njames93 created this revision.
njames93 added reviewers: aaron.ballman, alexfh.
Herald added a subscriber: xazax.hun.
njames93 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

If C++17 mode is enabled and the assert doesn't have a string literal, we can 
emit a static assert with no message in favour of one with an empty message.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D97313

Files:
  clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp
  clang-tools-extra/test/clang-tidy/checkers/misc-static-assert.cpp


Index: clang-tools-extra/test/clang-tidy/checkers/misc-static-assert.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/misc-static-assert.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/misc-static-assert.cpp
@@ -1,4 +1,5 @@
-// RUN: %check_clang_tidy %s misc-static-assert %t
+// RUN: %check_clang_tidy -std=c++11 -check-suffixes=,CXX11 %s 
misc-static-assert %t
+// RUN: %check_clang_tidy -std=c++17 -check-suffixes=,CXX17 %s 
misc-static-assert %t
 
 void abort() {}
 #ifdef NDEBUG
@@ -36,8 +37,10 @@
 
 template <class T> void doSomething(T t) {
   assert(myfunc(1, 2));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be 
replaced by static_assert() [misc-static-assert]
-  // CHECK-FIXES: {{^  }}static_assert(myfunc(1, 2), "");
+  // CHECK-MESSAGES-CXX11: :[[@LINE-1]]:3: warning: found assert() that could 
be replaced by static_assert() [misc-static-assert]
+  // CHECK-MESSAGES-CXX17: :[[@LINE-2]]:3: warning: found assert() that could 
be replaced by static_assert() [misc-static-assert]
+  // CHECK-FIXES-CXX11: {{^  }}static_assert(myfunc(1, 2), "");
+  // CHECK-FIXES-CXX17: {{^  }}static_assert(myfunc(1, 2));
 
   assert(t.method());
   // CHECK-FIXES: {{^  }}assert(t.method());
@@ -52,7 +55,8 @@
 
   assert(myfunc(1, 2) && (3 == 4));
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be
-  // CHECK-FIXES: {{^  }}static_assert(myfunc(1, 2) && (3 == 4), "");
+  // CHECK-FIXES-CXX11: {{^  }}static_assert(myfunc(1, 2) && (3 == 4), "");
+  // CHECK-FIXES-CXX17: {{^  }}static_assert(myfunc(1, 2) && (3 == 4));
 
   int x = 1;
   assert(x == 0);
@@ -74,7 +78,8 @@
 
   assert(ZERO_MACRO);
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be
-  // CHECK-FIXES: {{^  }}static_assert(ZERO_MACRO, "");
+  // CHECK-FIXES-CXX11: {{^  }}static_assert(ZERO_MACRO, "");
+  // CHECK-FIXES-CXX17: {{^  }}static_assert(ZERO_MACRO);
 
   assert(!"Don't report me!");
   // CHECK-FIXES: {{^  }}assert(!"Don't report me!");
@@ -136,7 +141,8 @@
 
   assert(10 == 5 + 5);
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be
-  // CHECK-FIXES: {{^  }}static_assert(10 == 5 + 5, "");
+  // CHECK-FIXES-CXX11: {{^  }}static_assert(10 == 5 + 5, "");
+  // CHECK-FIXES-CXX17: {{^  }}static_assert(10 == 5 + 5);
 #undef assert
 
   return 0;
Index: clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp
+++ clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp
@@ -107,17 +107,16 @@
     FixItHints.push_back(
         FixItHint::CreateReplacement(SourceRange(AssertLoc), "static_assert"));
 
-    std::string StaticAssertMSG = ", \"\"";
     if (AssertExprRoot) {
       FixItHints.push_back(FixItHint::CreateRemoval(
           SourceRange(AssertExprRoot->getOperatorLoc())));
       FixItHints.push_back(FixItHint::CreateRemoval(
           SourceRange(AssertMSG->getBeginLoc(), AssertMSG->getEndLoc())));
-      StaticAssertMSG = (Twine(", \"") + AssertMSG->getString() + "\"").str();
+      FixItHints.push_back(FixItHint::CreateInsertion(
+          LastParenLoc, (Twine(", \"") + AssertMSG->getString() + 
"\"").str()));
+    } else if (!Opts.CPlusPlus17) {
+      FixItHints.push_back(FixItHint::CreateInsertion(LastParenLoc, ", \"\""));
     }
-
-    FixItHints.push_back(
-        FixItHint::CreateInsertion(LastParenLoc, StaticAssertMSG));
   }
 
   diag(AssertLoc, "found assert() that could be replaced by static_assert()")


Index: clang-tools-extra/test/clang-tidy/checkers/misc-static-assert.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/misc-static-assert.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/misc-static-assert.cpp
@@ -1,4 +1,5 @@
-// RUN: %check_clang_tidy %s misc-static-assert %t
+// RUN: %check_clang_tidy -std=c++11 -check-suffixes=,CXX11 %s misc-static-assert %t
+// RUN: %check_clang_tidy -std=c++17 -check-suffixes=,CXX17 %s misc-static-assert %t
 
 void abort() {}
 #ifdef NDEBUG
@@ -36,8 +37,10 @@
 
 template <class T> void doSomething(T t) {
   assert(myfunc(1, 2));
-  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be replaced by static_assert() [misc-static-assert]
-  // CHECK-FIXES: {{^  }}static_assert(myfunc(1, 2), "");
+  // CHECK-MESSAGES-CXX11: :[[@LINE-1]]:3: warning: found assert() that could be replaced by static_assert() [misc-static-assert]
+  // CHECK-MESSAGES-CXX17: :[[@LINE-2]]:3: warning: found assert() that could be replaced by static_assert() [misc-static-assert]
+  // CHECK-FIXES-CXX11: {{^  }}static_assert(myfunc(1, 2), "");
+  // CHECK-FIXES-CXX17: {{^  }}static_assert(myfunc(1, 2));
 
   assert(t.method());
   // CHECK-FIXES: {{^  }}assert(t.method());
@@ -52,7 +55,8 @@
 
   assert(myfunc(1, 2) && (3 == 4));
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be
-  // CHECK-FIXES: {{^  }}static_assert(myfunc(1, 2) && (3 == 4), "");
+  // CHECK-FIXES-CXX11: {{^  }}static_assert(myfunc(1, 2) && (3 == 4), "");
+  // CHECK-FIXES-CXX17: {{^  }}static_assert(myfunc(1, 2) && (3 == 4));
 
   int x = 1;
   assert(x == 0);
@@ -74,7 +78,8 @@
 
   assert(ZERO_MACRO);
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be
-  // CHECK-FIXES: {{^  }}static_assert(ZERO_MACRO, "");
+  // CHECK-FIXES-CXX11: {{^  }}static_assert(ZERO_MACRO, "");
+  // CHECK-FIXES-CXX17: {{^  }}static_assert(ZERO_MACRO);
 
   assert(!"Don't report me!");
   // CHECK-FIXES: {{^  }}assert(!"Don't report me!");
@@ -136,7 +141,8 @@
 
   assert(10 == 5 + 5);
   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: found assert() that could be
-  // CHECK-FIXES: {{^  }}static_assert(10 == 5 + 5, "");
+  // CHECK-FIXES-CXX11: {{^  }}static_assert(10 == 5 + 5, "");
+  // CHECK-FIXES-CXX17: {{^  }}static_assert(10 == 5 + 5);
 #undef assert
 
   return 0;
Index: clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp
+++ clang-tools-extra/clang-tidy/misc/StaticAssertCheck.cpp
@@ -107,17 +107,16 @@
     FixItHints.push_back(
         FixItHint::CreateReplacement(SourceRange(AssertLoc), "static_assert"));
 
-    std::string StaticAssertMSG = ", \"\"";
     if (AssertExprRoot) {
       FixItHints.push_back(FixItHint::CreateRemoval(
           SourceRange(AssertExprRoot->getOperatorLoc())));
       FixItHints.push_back(FixItHint::CreateRemoval(
           SourceRange(AssertMSG->getBeginLoc(), AssertMSG->getEndLoc())));
-      StaticAssertMSG = (Twine(", \"") + AssertMSG->getString() + "\"").str();
+      FixItHints.push_back(FixItHint::CreateInsertion(
+          LastParenLoc, (Twine(", \"") + AssertMSG->getString() + "\"").str()));
+    } else if (!Opts.CPlusPlus17) {
+      FixItHints.push_back(FixItHint::CreateInsertion(LastParenLoc, ", \"\""));
     }
-
-    FixItHints.push_back(
-        FixItHint::CreateInsertion(LastParenLoc, StaticAssertMSG));
   }
 
   diag(AssertLoc, "found assert() that could be replaced by static_assert()")
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to