diff options
Diffstat (limited to 'clang/test/Sema/enable_if.c')
-rw-r--r-- | clang/test/Sema/enable_if.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/clang/test/Sema/enable_if.c b/clang/test/Sema/enable_if.c index 1cc14659021..a11f53eb493 100644 --- a/clang/test/Sema/enable_if.c +++ b/clang/test/Sema/enable_if.c @@ -149,4 +149,25 @@ void PR27122_ext() { regular_enable_if(1, 2); // expected-error{{too many arguments}} regular_enable_if(); // expected-error{{too few arguments}} } + +// We had a bug where we'd crash upon trying to evaluate varargs. +void variadic_enable_if(int a, ...) __attribute__((enable_if(a, ""))); // expected-note 6 {{disabled}} +void variadic_test() { + variadic_enable_if(1); + variadic_enable_if(1, 2); + variadic_enable_if(1, "c", 3); + + variadic_enable_if(0); // expected-error{{no matching}} + variadic_enable_if(0, 2); // expected-error{{no matching}} + variadic_enable_if(0, "c", 3); // expected-error{{no matching}} + + int m; + variadic_enable_if(1); + variadic_enable_if(1, m); + variadic_enable_if(1, m, "c"); + + variadic_enable_if(0); // expected-error{{no matching}} + variadic_enable_if(0, m); // expected-error{{no matching}} + variadic_enable_if(0, m, 3); // expected-error{{no matching}} +} #endif |