r326622 - Don't claim that va_start has special semantic checks

Reid Kleckner via cfe-commits cfe-commits at lists.llvm.org
Fri Mar 2 13:41:08 PST 2018


Author: rnk
Date: Fri Mar  2 13:41:08 2018
New Revision: 326622

URL: http://llvm.org/viewvc/llvm-project?rev=326622&view=rev
Log:
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

Modified:
    cfe/trunk/include/clang/Basic/Builtins.def
    cfe/trunk/test/Sema/varargs.c

Modified: cfe/trunk/include/clang/Basic/Builtins.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def?rev=326622&r1=326621&r2=326622&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/Builtins.def (original)
+++ cfe/trunk/include/clang/Basic/Builtins.def Fri Mar  2 13:41:08 2018
@@ -803,7 +803,7 @@ LIBBUILTIN(_setjmpex, "iJ", "fj",   "set
 
 // 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

Modified: cfe/trunk/test/Sema/varargs.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/varargs.c?rev=326622&r1=326621&r2=326622&view=diff
==============================================================================
--- cfe/trunk/test/Sema/varargs.c (original)
+++ cfe/trunk/test/Sema/varargs.c Fri Mar  2 13:41:08 2018
@@ -112,3 +112,12 @@ void f13(enum E1 e, ...) {
 #endif
   __builtin_va_end(va);
 }
+
+void f14(int e, ...) {
+  // expected-warning at +3 {{implicitly declaring library function 'va_start'}}
+  // expected-note at +2 {{include the header <stdarg.h>}}
+  // expected-error at +1 {{too few arguments to function call}}
+  va_start();
+  __builtin_va_list va;
+  va_start(va, e);
+}




More information about the cfe-commits mailing list