aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Basic/Builtins.cpp
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2025-03-15 11:01:53 -0400
committerGitHub <noreply@github.com>2025-03-15 11:01:53 -0400
commitd781ac1cf0d561b79f6ff834d786c6a999429901 (patch)
treee7b61b3879a4cbca3fada1446655316b9836855b /clang/lib/Basic/Builtins.cpp
parent5cc2ae0b519065c39df124d46de1ba75d4b144eb (diff)
downloadllvm-d781ac1cf0d561b79f6ff834d786c6a999429901.zip
llvm-d781ac1cf0d561b79f6ff834d786c6a999429901.tar.gz
llvm-d781ac1cf0d561b79f6ff834d786c6a999429901.tar.bz2
[C23] Add __builtin_c23_va_start (#131166)
This builtin is supported by GCC and is a way to improve diagnostic behavior for va_start in C23 mode. C23 no longer requires a second argument to the va_start macro in support of variadic functions with no leading parameters. However, we still want to diagnose passing more than two arguments, or diagnose when passing something other than the last parameter in the variadic function. This also updates the freestanding <stdarg.h> header to use the new builtin, same as how GCC works. Fixes #124031
Diffstat (limited to 'clang/lib/Basic/Builtins.cpp')
-rw-r--r--clang/lib/Basic/Builtins.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp
index e7829a4..885abdc 100644
--- a/clang/lib/Basic/Builtins.cpp
+++ b/clang/lib/Basic/Builtins.cpp
@@ -191,6 +191,9 @@ static bool builtinIsSupported(const llvm::StringTable &Strings,
/* consteval Unsupported */
if (!LangOpts.CPlusPlus20 && strchr(AttributesStr.data(), 'G') != nullptr)
return false;
+ /* C23 unsupported */
+ if (!LangOpts.C23 && BuiltinInfo.Langs == C23_LANG)
+ return false;
return true;
}