aaron.ballman added inline comments.
================ Comment at: clang/lib/AST/FormatString.cpp:422 + case BuiltinType::Bool: + // Don't warn printf("%hd", [char]) + // https://reviews.llvm.org/D66186 ---------------- inclyc wrote: > aaron.ballman wrote: > > The comment is talking about passing a `char` (promoted to `int`) then > > printed as a `short` but the check is looking for the type to be printed as > > an `int`; that doesn't seem like a type confusion situation so much as a > > match due to promotion. Should the test below be looking for a short type > > instead of an int type? > > The comment is talking about passing a `char` (promoted to `int`) then > > printed as a `short` but the check is looking for the type to be printed as > > an `int`; that doesn't seem like a type confusion situation so much as a > > match due to promotion. Should the test below be looking for a short type > > instead of an int type? > > Sorry for this (sometimes shit happens). There is a lot of redundant logic in > this place, I will upload the corrected code immediately. No worries! ================ Comment at: clang/test/Sema/format-strings-scanf.c:289-290 + // ill-formed floats + scanf("%hf", // expected-warning{{length modifier 'h' results in undefined behavior or no effect with 'f' conversion specifier}} + &sc); // Is this a clang bug ? + ---------------- inclyc wrote: > aaron.ballman wrote: > > inclyc wrote: > > > aaron.ballman wrote: > > > > Is what a clang bug? > > > > > > > > Also, what is with the "or no effect" in that wording? "This could > > > > cause major issues or nothing bad at all might happen" is a very odd > > > > way to word a diagnostic. :-D (Maybe something to look into improving > > > > in a later patch.) > > > > Is what a clang bug? > > > > > > Look at `sc` which is a `signed char`, but scanf need a pointer `float > > > *`, I add this comment because I think there should be a warning like > > > ``` > > > format specifies type 'float *' but the argument has type 'signed short *' > > > ``` > > > > > > See printf tests below > > Oh I see what you're saying! There are two issues with the code: one is > > that the format specifier itself is UB and the other is that the argument > > passed to this confused format specifier does not agree. > > > > To me, the priority is the invalid format specifier; unless the user > > corrects that, we're not really certain what they were aiming to scan in. > > And I think it's *probably* more likely that the user made a typo in the > > format specifier instead of trying to scan a half float (or whatever they > > thought they were scanning) into a `signed char`, so it seems defensible to > > silence the mismatched specifier diagnostic. > > > > WDYT? > ``` > printf("%hf", // expected-warning{{length modifier 'h' results in undefined > behavior or no effect with 'f' conversion specifier}} > sc); // expected-warning{{format specifies type 'double' but the argument > has type 'signed char'}} > ``` > > Then clang seems to have two different behaviors to `printf` and `scanf`, and > for `printf` it will give the kind of diagnosis I said. I don't think this > problem is particularly serious, because the key point is that using `%hf` > UB. So maybe we can just keep clang as-is? Or we should consider implement > the same warning in `scanf` ? > So maybe we can just keep clang as-is? I think let's keep clang as-is for the moment so we can keep the concerns separate. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132568/new/ https://reviews.llvm.org/D132568 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits