This diagnostic rule was added at users' request.
The analyzer has detected a situation where the 'const' qualifier was removed. Modifying an object, which was declared with the 'const' qualifier, through a pointer/reference to non-'const' type leads to undefined behavior. Besides, such code often indicates poor application design.
Look at the example:
void read_settings(const char *buf); const char* get_settings_file_name(); bool settings_present(); // .... void init_settings() { const char name[MAX_PATH] = "default.cfg"; if (settings_present()) { strcpy((char *)name, get_settings_file_name()); } read_settings(name); }
To avoid undefined behavior, abandon constancy when declaring a local variable:
void read_settings(const char *buf); const char* get_settings_file_name(); bool settings_present(); // .... void init_settings() { char name[MAX_PATH] = "default.cfg"; if (settings_present()) { strcpy(name, get_settings_file_name()); } read_settings(name); }