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

Reply via email to