aaron.ballman added a comment.

In D132266#3739567 <https://reviews.llvm.org/D132266#3739567>, @inclyc wrote:

> N2562.pdf:
>
>> Modify 7.21.6.2p12:
>> ...
>>  Unless a length modifier is specified, t~~T~~he corresponding argument 
>> shall be a pointer to int ~~signed integer~~.
>
> Does this clarification statement mean that `hhd` should not be considered to 
> correspond to `int`, but a `signed char`?

Correct.

> If so, could this exactly imply that we have unmatched argument type? (i.e. 
> `int` <--x--> `hhd` (signed char) )

Here's how that's intended to be read:

  int i;
  signed char sc;
  unsigned char uc;
  char c;
  
  scanf("%hhd, %hhd, %hhd, %hhd", &i, &sc, &uc, &c);

The first format specifier has a type mismatch: expected `signed char *` or 
`unsigned char *`, got `int *`.
The second format specifier is correct: expected `signed char *` or `unsigned 
char *`, got `signed char *`.
The third format specifier is correct: expected `signed char *` or `unsigned 
char *`, got `unsigned char *`.
The fourth format specifier is questionable (and I'll file an NB comment to 
clarify this) but I think intended to be correct: expected `signed char *` or 
`unsigned char *`, got `char *`. Pedantically, this is incorrect per 6.2.5 
making `char` special.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D132266/new/

https://reviews.llvm.org/D132266

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to