aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFangrui Song <i@maskray.me>2022-08-06 23:12:18 +0000
committerFangrui Song <i@maskray.me>2022-08-06 23:12:18 +0000
commitc7ec86b13c461f6a8ce11f8443c1b6242013d26f (patch)
tree457529be2da68fbb45e9f3aeda8426f63a209d60
parentbf5550b6790b5873f75db010db158cdae84deecc (diff)
[clang-tidy] Fix g++ -DCMAKE_CXX_STANDARD=17 build
`constexpr std::initializer_list<llvm::StringRef>` leads to ``` error: modification of '<temporary>' is not a constant expression ``` Related to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102921
-rw-r--r--clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp20
-rw-r--r--clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.h2
2 files changed, 13 insertions, 9 deletions
diff --git a/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp
index dcc01589f116..132fbf85c1fe 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp
@@ -13,7 +13,7 @@
// This is the minimal set of safe functions.
// https://wiki.sei.cmu.edu/confluence/display/c/SIG30-C.+Call+only+asynchronous-safe+functions+within+signal+handlers
-constexpr std::initializer_list<llvm::StringRef> MinimalConformingFunctions = {
+constexpr llvm::StringLiteral MinimalConformingFunctions[] = {
"signal", "abort", "_Exit", "quick_exit"};
// The POSIX-defined set of safe functions.
@@ -22,7 +22,7 @@ constexpr std::initializer_list<llvm::StringRef> MinimalConformingFunctions = {
// mentioned POSIX specification was not updated after 'quick_exit' appeared
// in the C11 standard.
// Also, we want to keep the "minimal set" a subset of the "POSIX set".
-constexpr std::initializer_list<llvm::StringRef> POSIXConformingFunctions = {
+constexpr llvm::StringLiteral POSIXConformingFunctions[] = {
"_Exit",
"_exit",
"abort",
@@ -300,12 +300,16 @@ AST_MATCHER(FunctionDecl, isStandardFunction) {
SignalHandlerCheck::SignalHandlerCheck(StringRef Name,
ClangTidyContext *Context)
: ClangTidyCheck(Name, Context),
- AsyncSafeFunctionSet(
- Options.get("AsyncSafeFunctionSet", AsyncSafeFunctionSetKind::POSIX)),
- ConformingFunctions(AsyncSafeFunctionSet ==
- AsyncSafeFunctionSetKind::Minimal
- ? MinimalConformingFunctions
- : POSIXConformingFunctions) {}
+ AsyncSafeFunctionSet(Options.get("AsyncSafeFunctionSet",
+ AsyncSafeFunctionSetKind::POSIX)) {
+ if (AsyncSafeFunctionSet == AsyncSafeFunctionSetKind::Minimal) {
+ for (StringRef v : MinimalConformingFunctions)
+ ConformingFunctions.insert(v);
+ } else {
+ for (StringRef v : POSIXConformingFunctions)
+ ConformingFunctions.insert(v);
+ }
+}
void SignalHandlerCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
Options.store(Opts, "AsyncSafeFunctionSet", AsyncSafeFunctionSet);
diff --git a/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.h b/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.h
index 182afd717bae..01b63614163c 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.h
@@ -60,7 +60,7 @@ private:
clang::CallGraph CG;
AsyncSafeFunctionSetKind AsyncSafeFunctionSet;
- const llvm::StringSet<> ConformingFunctions;
+ llvm::StringSet<> ConformingFunctions;
};
} // namespace bugprone