https://github.com/vinay-deshmukh updated https://github.com/llvm/llvm-project/pull/129979
>From e9c7869550d9fd1eba4d4d42ee644540e6b6d445 Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Tue, 4 Mar 2025 22:30:34 -0500 Subject: [PATCH 01/12] add failing test --- clang/test/C/drs/c89_with_c99_functions.c | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 clang/test/C/drs/c89_with_c99_functions.c diff --git a/clang/test/C/drs/c89_with_c99_functions.c b/clang/test/C/drs/c89_with_c99_functions.c new file mode 100644 index 0000000000000..d848727001562 --- /dev/null +++ b/clang/test/C/drs/c89_with_c99_functions.c @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -std=c89 -verify %s + +// From: https://github.com/llvm/llvm-project/issues/15522#issue-1071059939 +int logf = 5; +int main() { +return logf; +} >From 966aa6a735722063d7ea9727e36136f4f39c3d88 Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Wed, 5 Mar 2025 22:09:02 -0500 Subject: [PATCH 02/12] Update test to `expect-no-diagnostics` --- clang/test/C/drs/c89_with_c99_functions.c | 1 + 1 file changed, 1 insertion(+) diff --git a/clang/test/C/drs/c89_with_c99_functions.c b/clang/test/C/drs/c89_with_c99_functions.c index d848727001562..de525313fbba5 100644 --- a/clang/test/C/drs/c89_with_c99_functions.c +++ b/clang/test/C/drs/c89_with_c99_functions.c @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -std=c89 -verify %s +// expected-no-diagnostics // From: https://github.com/llvm/llvm-project/issues/15522#issue-1071059939 int logf = 5; >From 28c58718d76be9c62635cdeffebc9d812b192e50 Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Wed, 5 Mar 2025 22:13:50 -0500 Subject: [PATCH 03/12] Add exclusion for C89 / math.h functions --- clang/lib/Basic/Builtins.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index e7829a461bbc5..cfcbefdce2a24 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -14,6 +14,7 @@ #include "BuiltinTargetFeatures.h" #include "clang/Basic/IdentifierTable.h" #include "clang/Basic/LangOptions.h" +#include "clang/Basic/LangStandard.h" #include "clang/Basic/TargetInfo.h" #include "llvm/ADT/StringRef.h" using namespace clang; @@ -148,7 +149,7 @@ static bool builtinIsSupported(const llvm::StringTable &Strings, if (!LangOpts.Coroutines && (BuiltinInfo.Langs & COR_LANG)) return false; /* MathBuiltins Unsupported */ - if (LangOpts.NoMathBuiltin && BuiltinInfo.Header.ID == HeaderDesc::MATH_H) + if ((LangOpts.NoMathBuiltin || /*C89*/ LangOpts.LangStd == LangStandard::lang_c89)&& BuiltinInfo.Header.ID == HeaderDesc::MATH_H) return false; /* GnuMode Unsupported */ if (!LangOpts.GNUMode && (BuiltinInfo.Langs & GNU_LANG)) >From 6e790580b3859cd68ca6ea87c1601979047310ab Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Wed, 5 Mar 2025 22:25:07 -0500 Subject: [PATCH 04/12] clang-format --- clang/lib/Basic/Builtins.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index cfcbefdce2a24..81f85bb5454e4 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -149,7 +149,9 @@ static bool builtinIsSupported(const llvm::StringTable &Strings, if (!LangOpts.Coroutines && (BuiltinInfo.Langs & COR_LANG)) return false; /* MathBuiltins Unsupported */ - if ((LangOpts.NoMathBuiltin || /*C89*/ LangOpts.LangStd == LangStandard::lang_c89)&& BuiltinInfo.Header.ID == HeaderDesc::MATH_H) + if ((LangOpts.NoMathBuiltin || + /*C89*/ LangOpts.LangStd == LangStandard::lang_c89) && + BuiltinInfo.Header.ID == HeaderDesc::MATH_H) return false; /* GnuMode Unsupported */ if (!LangOpts.GNUMode && (BuiltinInfo.Langs & GNU_LANG)) >From 160d719b7ed5997d39accb110df873e6200991d4 Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Sun, 9 Mar 2025 14:14:37 -0400 Subject: [PATCH 05/12] exclude c99 symbols from builtins when std=c89 --- clang/lib/Basic/Builtins.cpp | 20 ++++++++++++++++++-- clang/test/C/drs/c89_with_c99_functions.c | 14 ++++++++++---- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index 81f85bb5454e4..70ea34da1f9e6 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -17,6 +17,7 @@ #include "clang/Basic/LangStandard.h" #include "clang/Basic/TargetInfo.h" #include "llvm/ADT/StringRef.h" +#include "llvm/ADT/StringTable.h" using namespace clang; const char *HeaderDesc::getName() const { @@ -136,6 +137,18 @@ bool Builtin::Context::isBuiltinFunc(llvm::StringRef FuncName) { return false; } +static bool isSymbolAvailableInC89(const llvm::StringTable& Strings, const Builtin::Info & BuiltinInfo) { + + auto NameStr = Strings[BuiltinInfo.Offsets.Name]; + + // FIXME: add other C89 symbols here + if(NameStr == "log") { + return true; + } + + return false; +} + /// Is this builtin supported according to the given language options? static bool builtinIsSupported(const llvm::StringTable &Strings, const Builtin::Info &BuiltinInfo, @@ -148,9 +161,12 @@ static bool builtinIsSupported(const llvm::StringTable &Strings, /* CorBuiltins Unsupported */ if (!LangOpts.Coroutines && (BuiltinInfo.Langs & COR_LANG)) return false; + bool isC89 = /*C89*/ LangOpts.LangStd == LangStandard::lang_c89; + if (isC89 && !isSymbolAvailableInC89(Strings, BuiltinInfo)) { + return false; + } /* MathBuiltins Unsupported */ - if ((LangOpts.NoMathBuiltin || - /*C89*/ LangOpts.LangStd == LangStandard::lang_c89) && + if (LangOpts.NoMathBuiltin && BuiltinInfo.Header.ID == HeaderDesc::MATH_H) return false; /* GnuMode Unsupported */ diff --git a/clang/test/C/drs/c89_with_c99_functions.c b/clang/test/C/drs/c89_with_c99_functions.c index de525313fbba5..aa3672eda1c53 100644 --- a/clang/test/C/drs/c89_with_c99_functions.c +++ b/clang/test/C/drs/c89_with_c99_functions.c @@ -1,8 +1,14 @@ -// RUN: %clang_cc1 -std=c89 -verify %s -// expected-no-diagnostics +// RUN: %clang_cc1 -std=c89 -verify=c89 %s // From: https://github.com/llvm/llvm-project/issues/15522#issue-1071059939 -int logf = 5; +int logf = 5; // this is fine + +// redefinition because log as a symbol exists in C89 +int log = 6; // #1 int main() { -return logf; +return 0; } + +// c89-error@#1 {{redefinition of 'log' as different kind of symbol}} +// c89-note@#1 {{unguarded header; consider using #ifdef guards or #pragma once}} +// c89-note@#1 {{previous definition}} >From 7572c217f84214af8aa06a219ead9382af6b148b Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Sun, 9 Mar 2025 14:19:20 -0400 Subject: [PATCH 06/12] clang-format --- clang/lib/Basic/Builtins.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index 70ea34da1f9e6..4795a7fca6a08 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -137,12 +137,13 @@ bool Builtin::Context::isBuiltinFunc(llvm::StringRef FuncName) { return false; } -static bool isSymbolAvailableInC89(const llvm::StringTable& Strings, const Builtin::Info & BuiltinInfo) { +static bool isSymbolAvailableInC89(const llvm::StringTable &Strings, + const Builtin::Info &BuiltinInfo) { auto NameStr = Strings[BuiltinInfo.Offsets.Name]; // FIXME: add other C89 symbols here - if(NameStr == "log") { + if (NameStr == "log") { return true; } @@ -166,8 +167,7 @@ static bool builtinIsSupported(const llvm::StringTable &Strings, return false; } /* MathBuiltins Unsupported */ - if (LangOpts.NoMathBuiltin && - BuiltinInfo.Header.ID == HeaderDesc::MATH_H) + if (LangOpts.NoMathBuiltin && BuiltinInfo.Header.ID == HeaderDesc::MATH_H) return false; /* GnuMode Unsupported */ if (!LangOpts.GNUMode && (BuiltinInfo.Langs & GNU_LANG)) >From 0afb18c710d8f6d5fb14ed62d0a003fdd9a44631 Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Sun, 9 Mar 2025 21:26:19 -0400 Subject: [PATCH 07/12] Allow __builtin_ prefixes --- clang/lib/Basic/Builtins.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index 4795a7fca6a08..5bc5270e248fb 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -142,6 +142,10 @@ static bool isSymbolAvailableInC89(const llvm::StringTable &Strings, auto NameStr = Strings[BuiltinInfo.Offsets.Name]; + if(NameStr.starts_with("__builtin_")) { + return true; + } + // FIXME: add other C89 symbols here if (NameStr == "log") { return true; >From 6b05ad872c3959dc64ce1b0518686dad6725be8d Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Sun, 9 Mar 2025 21:37:10 -0400 Subject: [PATCH 08/12] __clang_ --- clang/lib/Basic/Builtins.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index 5bc5270e248fb..cf482fd000212 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -142,7 +142,7 @@ static bool isSymbolAvailableInC89(const llvm::StringTable &Strings, auto NameStr = Strings[BuiltinInfo.Offsets.Name]; - if(NameStr.starts_with("__builtin_")) { + if (NameStr.starts_with("__builtin_") || NameStr.starts_with("__clang")) { return true; } >From 951bff3fd19a2e30c9fa1a65f4fc8631315c8167 Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Sun, 9 Mar 2025 21:57:22 -0400 Subject: [PATCH 09/12] Revert "__clang_" This reverts commit 6b05ad872c3959dc64ce1b0518686dad6725be8d. --- clang/lib/Basic/Builtins.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index cf482fd000212..22e469dff011e 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -142,7 +142,7 @@ static bool isSymbolAvailableInC89(const llvm::StringTable &Strings, auto NameStr = Strings[BuiltinInfo.Offsets.Name]; - if (NameStr.starts_with("__builtin_") || NameStr.starts_with("__clang")) { + if (NameStr.starts_with("__builtin_")) { return true; } >From 9a6d3a8ef3719ba67de111a3bfc2b7ced14a1f9b Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Sun, 9 Mar 2025 22:32:01 -0400 Subject: [PATCH 10/12] __arm --- clang/lib/Basic/Builtins.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index 22e469dff011e..80586014b5332 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -142,7 +142,7 @@ static bool isSymbolAvailableInC89(const llvm::StringTable &Strings, auto NameStr = Strings[BuiltinInfo.Offsets.Name]; - if (NameStr.starts_with("__builtin_")) { + if (NameStr.starts_with("__builtin_") || NameStr.starts_with("__arm")) { return true; } >From fc05614f897cda00ed04b3bf7eb16e285daf7a06 Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Sun, 9 Mar 2025 23:23:28 -0400 Subject: [PATCH 11/12] only check non-zero header IDs --- clang/lib/Basic/Builtins.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index 80586014b5332..1e8298f6d5ab2 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -142,7 +142,7 @@ static bool isSymbolAvailableInC89(const llvm::StringTable &Strings, auto NameStr = Strings[BuiltinInfo.Offsets.Name]; - if (NameStr.starts_with("__builtin_") || NameStr.starts_with("__arm")) { + if (NameStr.starts_with("__builtin_")) { return true; } @@ -167,7 +167,8 @@ static bool builtinIsSupported(const llvm::StringTable &Strings, if (!LangOpts.Coroutines && (BuiltinInfo.Langs & COR_LANG)) return false; bool isC89 = /*C89*/ LangOpts.LangStd == LangStandard::lang_c89; - if (isC89 && !isSymbolAvailableInC89(Strings, BuiltinInfo)) { + if (isC89 && BuiltinInfo.Header.ID != BuiltinInfo.Header.NO_HEADER && + !isSymbolAvailableInC89(Strings, BuiltinInfo)) { return false; } /* MathBuiltins Unsupported */ >From 636743965c159616f0fa0b7874d3a06f466a8ccd Mon Sep 17 00:00:00 2001 From: Vinay Deshmukh <32487576+vinay-deshm...@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:36:23 -0400 Subject: [PATCH 12/12] Add va_start,va_arg,va_end to allow list --- clang/lib/Basic/Builtins.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp index 1e8298f6d5ab2..8f33c798290bd 100644 --- a/clang/lib/Basic/Builtins.cpp +++ b/clang/lib/Basic/Builtins.cpp @@ -147,7 +147,8 @@ static bool isSymbolAvailableInC89(const llvm::StringTable &Strings, } // FIXME: add other C89 symbols here - if (NameStr == "log") { + if (NameStr == "log" || NameStr == "va_start" || NameStr == "va_arg" || + NameStr == "va_end") { return true; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits