[PATCH] D33102: [clang] Implement -Wcast-qual for C++

Roman Lebedev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Jun 10 03:33:43 PDT 2017


lebedev.ri planned changes to this revision.
lebedev.ri added a comment.

In https://reviews.llvm.org/D33102#773296, @dblaikie wrote:

> But sure. Could you also (manually, I guess) confirm that this matches GCC's cast-qual behavior (insofar as the warning fires in the same situations). If there are any deviations, let's chat about them.


Great, you were right :)
Found a false-negative:

  $ cat /tmp/tst.c
  int main() {
    void* p1 = (void*)"txt";
    char* p2 = (char*)"txt";
  }
  $ gcc -x c -Wcast-qual /tmp/tst.c
  $ gcc -x c++ -Wcast-qual /tmp/tst.c
  /tmp/tst.c: In function ‘int main()’:
  /tmp/tst.c:2:21: warning: cast from type ‘const char*’ to type ‘void*’ casts away qualifiers [-Wcast-qual]
     void* p1 = (void*)"txt";
                       ^~~~~
  /tmp/tst.c:3:21: warning: cast from type ‘const char*’ to type ‘char*’ casts away qualifiers [-Wcast-qual]
     char* p2 = (char*)"txt";
                       ^~~~~
  
  $ ./bin/clang -x c -Wcast-qual /tmp/tst.c 
  $ ./bin/clang -x c++ -Wcast-qual /tmp/tst.c 
  /tmp/tst.c:3:21: warning: cast from 'const char *' to 'char *' drops const qualifier [-Wcast-qual]
    char* p2 = (char*)"txt";
                      ^
  1 warning generated.

So at least, in C++ mode, it should warn on both lines.
I'm not sure, should that really not produce a warning in C?
(gcc version 6.3.0 20170516 (Debian 6.3.0-18) )


Repository:
  rL LLVM

https://reviews.llvm.org/D33102





More information about the cfe-commits mailing list