Fix completely bogus types for some builtins:
authorRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 19 Dec 2016 23:59:34 +0000 (23:59 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 19 Dec 2016 23:59:34 +0000 (23:59 +0000)
commit836de6babb7846e08476988c8b2cf3ced0b09a1e
treeeec032705d2c271fe0d7abbc5e71f9b40a9303f8
parentebfc2f90d0a12eac664e5978de905e09ca483b2f
Fix completely bogus types for some builtins:

 * In C++, never create a FunctionNoProtoType for a builtin (fixes C++1z
   crasher from r289754).

 * Fix type of __sync_synchronize to be a no-parameter function rather than a
   varargs function. This matches GCC.

 * Fix type of vfprintf to match its actual type. We gave it a wrong type due
   to PR4290 (apparently autoconf generates invalid code and expects compilers
   to choke it down or it miscompiles the program; the relevant error in clang
   was downgraded to a warning in r122744 to fix other occurrences of this
   autoconf brokenness, so we don't need this workaround any more).

 * Turn off vararg argument checking for __noop, since it's not *really* a
   varargs function. Alternatively we could add custom type checking for it
   and synthesize parameter types matching the actual arguments in each call,
   but that seemed like overkill.

llvm-svn: 290146
clang/include/clang/Basic/Builtins.def
clang/lib/AST/ASTContext.cpp
clang/lib/Sema/SemaChecking.cpp
clang/lib/Sema/SemaExceptionSpec.cpp
clang/test/Sema/vfprintf-invalid-redecl.c
clang/test/Sema/vfprintf-valid-redecl.c
clang/test/SemaCXX/builtins.cpp