diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2011-07-11 21:45:59 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2011-07-11 21:45:59 +0000 |
| commit | 6290ae476ee6baf93ca607c8bf0fb993de42c06c (patch) | |
| tree | 8b1efbc76da7daf8459568aeb08944990862b0ba /clang/test | |
| parent | 8532db2ec4671486adf44cfb97f76d008eecb2cc (diff) | |
| download | bcm5719-llvm-6290ae476ee6baf93ca607c8bf0fb993de42c06c.tar.gz bcm5719-llvm-6290ae476ee6baf93ca607c8bf0fb993de42c06c.zip | |
Add diagnostic for constructs like "va_arg(l, float)" which have undefined behavior. PR10201.
llvm-svn: 134926
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Sema/varargs.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/test/Sema/varargs.c b/clang/test/Sema/varargs.c index 820567777c5..07081edd1d9 100644 --- a/clang/test/Sema/varargs.c +++ b/clang/test/Sema/varargs.c @@ -67,3 +67,12 @@ void f8(int a, ...) { (void)__builtin_va_arg(ap, void); // expected-error {{second argument to 'va_arg' is of incomplete type 'void'}} __builtin_va_end(ap); } + +enum E { x = -1, y = 2, z = 10000 }; +void f9(__builtin_va_list args) +{ + (void)__builtin_va_arg(args, float); // expected-warning {{second argument to 'va_arg' is of promotable type 'float'}} + (void)__builtin_va_arg(args, enum E); // Don't warn here in C + (void)__builtin_va_arg(args, short); // expected-warning {{second argument to 'va_arg' is of promotable type 'short'}} + (void)__builtin_va_arg(args, char); // expected-warning {{second argument to 'va_arg' is of promotable type 'char'}} +} |

