From: Reid Kleckner Date: Fri, 2 Mar 2018 21:41:08 +0000 (+0000) Subject: Don't claim that va_start has special semantic checks X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8835fb821b4e87cdeefb4528c35aa30a7a373088;p=clang 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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@326622 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def index 716f014fc3..9b7e09a75b 100644 --- a/include/clang/Basic/Builtins.def +++ b/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/test/Sema/varargs.c b/test/Sema/varargs.c index 0ade0cf0aa..3fa429163f 100644 --- a/test/Sema/varargs.c +++ b/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); +}