Hello.

The attached patch adds support for a clang -Wcast-qual option. Semantic is
compatible with the gcc one.

Warn whenever a pointer is cast so as to remove a type qualifier from the
> target
> type. For example, warn if a "const char*" is cast to an ordinary "char*".
> Also warn when making a cast that introduces a type qualifier in an unsafe
> way.
> For example, casting "char**" to "const char**" is unsafe, as in this
> example:
> /* p is char ** value. */
> const char **q = (const char **) p;
> /* Assignment of readonly string to const char * is OK. */
> *q = "string";
> /* Now char** pointer points to read-only memory. */
> **p = ’b’;

(Gcc manual).

What is "introducing in an unsafe way" precisely described in [conv.qual]
item of C++ standard.

So, the proposed patch is very similar to the code that checks assign
constrains. Differences are:

* This patch generates only warnings, not errors, which helps to have
cleaner implementation.
* It is called only for C-style casting and functional-style casting
(because only three casts can remove qualifiers: C-sytle, functional-style
and const_cast. But const_cast in gcc is not generated warnings, so I
preserved this behaviour in clang). Other cases filtered by checks in
appropriate casts.

Please, review.

Attachment: warn_cast_qual.diff
Description: Binary data

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to