diff options
author | Fangrui Song <i@maskray.me> | 2022-08-06 23:12:18 +0000 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2022-08-06 23:12:18 +0000 |
commit | c7ec86b13c461f6a8ce11f8443c1b6242013d26f (patch) | |
tree | 457529be2da68fbb45e9f3aeda8426f63a209d60 | |
parent | bf5550b6790b5873f75db010db158cdae84deecc (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.cpp | 20 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.h | 2 |
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 |