From a991695e493071dab0929e43b16556135e5d801a Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Fri, 2 Mar 2018 21:41:08 +0000 Subject: [PATCH] Don't claim that va_start has special semantic checks We don't have special checks for BI_va_start in Sema::CheckBuiltinFunctionCall, so setting the 't' flag for va_start in Builtins.def disables semantic checking for it. That's not desired, and IRGen crashes when it tries to generate a call to va_start that doesn't have at least one argument. Follow-up to r322573 Fixes PR36565 llvm-svn: 326622 --- clang/include/clang/Basic/Builtins.def | 2 +- clang/test/Sema/varargs.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/Builtins.def b/clang/include/clang/Basic/Builtins.def index 716f014fc3df..9b7e09a75bd0 100644 --- a/clang/include/clang/Basic/Builtins.def +++ b/clang/include/clang/Basic/Builtins.def @@ -803,7 +803,7 @@ LIBBUILTIN(_setjmpex, "iJ", "fj", "setjmpex.h", ALL_MS_LANGUAGES) // C99 library functions // C99 stdarg.h -LIBBUILTIN(va_start, "vA.", "fnt", "stdarg.h", ALL_LANGUAGES) +LIBBUILTIN(va_start, "vA.", "fn", "stdarg.h", ALL_LANGUAGES) LIBBUILTIN(va_end, "vA", "fn", "stdarg.h", ALL_LANGUAGES) LIBBUILTIN(va_copy, "vAA", "fn", "stdarg.h", ALL_LANGUAGES) // C99 stdlib.h diff --git a/clang/test/Sema/varargs.c b/clang/test/Sema/varargs.c index 0ade0cf0aaf9..3fa429163ff5 100644 --- a/clang/test/Sema/varargs.c +++ b/clang/test/Sema/varargs.c @@ -112,3 +112,12 @@ void f13(enum E1 e, ...) { #endif __builtin_va_end(va); } + +void f14(int e, ...) { + // expected-warning@+3 {{implicitly declaring library function 'va_start'}} + // expected-note@+2 {{include the header }} + // expected-error@+1 {{too few arguments to function call}} + va_start(); + __builtin_va_list va; + va_start(va, e); +}