ZijunZhao added inline comments.

================
Comment at: clang/test/C/C2x/n2683.c:16
+
+    bool flag_add = ckd_add(&result, a33, char_var);
+    bool flag_sub = ckd_sub(&result, bool_var, day);
----------------
aaron.ballman wrote:
> It looks like the builtins are missing some checks that are required by the C 
> standard.
> 
> 7.20p3: Both type2 and type3 shall be any integer type other than "plain" 
> char, bool, a bit-precise integer type, or an enumerated type, and they need 
> not be the same.  ...
> 
> So we should get a (warning?) diagnostic on all of these uses.
> 
> We should also add a test when the result type is not suitable for the given 
> operand types. e.g.,
> ```
> void func(int one, int two) {
>   short result;
>   ckd_add(&result, one, two); // `short` may not be suitable to hold the 
> result of adding two `int`s
> 
>   const int other_result = 0;
>   ckd_add(&other_result, one, two); // `const int` is definitely not suitable 
> because it's not a modifiable lvalue
> }
> ```
> This is because of:
> 
> 7.20.1p4: It is recommended to produce a diagnostic message if type2 or type3 
> are not suitable integer types, or if *result is not a modifiable lvalue of a 
> suitable integer type.
yes, I am trying to add the tests about `short` type and `const` variable but 
there is no warning about inappropriate type 😢 and for const one I get 
```result argument to overflow builtin must be a pointer to a non-const integer 
('const int *' invalid)``` error 😂 


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D157331

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

Reply via email to