Author: Fangrui Song Date: 2022-08-06T23:12:18Z New Revision: c7ec86b13c461f6a8ce11f8443c1b6242013d26f
URL: https://github.com/llvm/llvm-project/commit/c7ec86b13c461f6a8ce11f8443c1b6242013d26f DIFF: https://github.com/llvm/llvm-project/commit/c7ec86b13c461f6a8ce11f8443c1b6242013d26f.diff LOG: [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 Added: Modified: clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.h Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp index dcc01589f1162..132fbf85c1fe6 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 182afd717baec..01b63614163c1 100644 --- a/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.h +++ b/clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.h @@ -60,7 +60,7 @@ class SignalHandlerCheck : public ClangTidyCheck { clang::CallGraph CG; AsyncSafeFunctionSetKind AsyncSafeFunctionSet; - const llvm::StringSet<> ConformingFunctions; + llvm::StringSet<> ConformingFunctions; }; } // namespace bugprone _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits