[clang-tools-extra] c7ec86b - [clang-tidy] Fix g++ -DCMAKE_CXX_STANDARD=17 build

Fangrui Song via cfe-commits cfe-commits at lists.llvm.org
Sat Aug 6 16:12:30 PDT 2022


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


        


More information about the cfe-commits mailing list