On Mon, Jun 12, 2017 at 10:10 AM Roman Lebedev via Phabricator < revi...@reviews.llvm.org> wrote:
> lebedev.ri added a comment. > > So i'm trying to analyze that stage2 warning. > Could you link to the buildbot failure to see the original LLVM project code triggering this situation? > The testcase //seems// to be: (autogenerated all the variants) > > void test_nop() { > unsigned char **ptr1 = 0; > void **ptr2 = (void **)ptr1; > } > void test_bad() { > unsigned char **ptr1 = 0; > const void **ptr2 = (const void **)ptr1; // expected-warning {{cast > from 'unsigned char **' to 'const void **' must have all intermediate > pointers const qualified to be safe}} > } > void test_good0() { > unsigned char **ptr1 = 0; > void *const *ptr2 = (void *const *)ptr1; > } > void test_good1() { > unsigned char **ptr1 = 0; > const void *const *ptr2 = (const void *const *)ptr1; > } > void test_good2() { > unsigned char *const *ptr1 = 0; > void *const *ptr2 = (void *const *)ptr1; > } > void test_good3() { > unsigned char *const *ptr1 = 0; > const void *const *ptr2 = (const void *const *)ptr1; > } > void test_good4() { > const unsigned char **ptr1 = 0; > const void **ptr2 = (const void **)ptr1; > } > void test_good5() { > const unsigned char **ptr1 = 0; > const void *const *ptr2 = (const void *const *)ptr1; > } > void test_good6() { > const unsigned char *const *ptr1 = 0; > const void *const *ptr2 = (const void *const *)ptr1; > } > > GCC does not warn about such code at all, clang in C mode does warn about > only one combination: > > $ gcc -c /tmp/test.c -Wcast-qual > $ echo $? > 0 > $ clang -c /tmp/test.c -Wcast-qual > /tmp/test.c:7:38: warning: cast from 'unsigned char **' to 'const void > **' must have all intermediate pointers const qualified to be safe > [-Wcast-qual] > const void **ptr2 = (const void **)ptr1; // expected-warning {{cast > from 'unsigned char **' to 'const void **' must have all intermediate > pointers const qualified to be safe}} > ^ > 1 warning generated. > > David, you reviewed the original `-Wcast-qual` patch, does all that ^ make > sense? > That seems like a reasonable warning, do you agree? But maybe it's best to put it under another flag name so it doesn't collide with GCC. But really - *shrug* I'd probably leave it under the same flag, fix the LLVM project code that causes it, and carry on. > > F3429854: gen.cpp <https://reviews.llvm.org/F3429854> > > > Repository: > rL LLVM > > https://reviews.llvm.org/D33102 > > > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits