aaron.ballman added reviewers: clang-language-wg, jyknight. aaron.ballman added a comment.
Thank you for working on this! Adding a few more reviewers for exposure. ================ Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:6921-6926 def ext_typecheck_indirection_through_void_pointer : ExtWarn< "ISO C++ does not allow indirection on operand of type %0">, InGroup<DiagGroup<"void-ptr-dereference">>; +def warn_deference_void_pointer : Warning< + "deference a void pointer has undefined behavior">, InGroup< + DiagGroup<"deference-void-pointer">>; ---------------- I think we want the extension in both C and C++ ================ Comment at: clang/lib/Sema/SemaExpr.cpp:14541 + Kind = diag::ext_typecheck_indirection_through_void_pointer; + else if (S.getLangOpts().C99 && !IsAfterAmp) + Kind = diag::warn_deference_void_pointer; ---------------- junaire wrote: > I don't know why we don't have `getLangOpts().C89`. I'm a bit confused about > how we deal with different C standards... This trips up folks somewhat often, unfortunately! All of the language mode options are cumulative, so if the user specifies C11, then C99 and C11 will both be true. However, we don't have an explicit C89 language mode, instead we rely on `!CPlusPlus` to tell us we're in C mode and `!C99` to tell us we're in C89 mode. Does that make sense? ================ Comment at: clang/test/Analysis/misc-ps.m:136 if (!flag) { - if (sizeof(*q) == 1) + if (sizeof(*q) == 1) // expected-warning {{deference a void pointer has undefined behavior}} return; ---------------- This is why I think we want to reuse the existing extension diagnostic -- there's kind of no UB in this case because the dereference is never actually evaluated, but telling the user "this isn't allowed per spec" will at least tell them about the portability issue. ================ Comment at: clang/test/C/drs/dr1xx.c:142 /* The behavior of all three of these is undefined. */ - (void)*p; - (void)(i ? *p : *p); + (void)*p; /* expected-warning {{deference a void pointer has undefined behavior}} */ + (void)(i ? *p : *p); /* expected-warning {{deference a void pointer has undefined behavior}} */ ---------------- junaire wrote: > I seem not dealing with the tests correctly, mostly because we're specifying > multiple run lines with different standards. Can you help me a little bit > with this? @aaron.ballman What kind of problems are you running into? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D134461/new/ https://reviews.llvm.org/D134461 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits