Author: alexfh
Date: Wed Sep 30 07:48:42 2015
New Revision: 248895

URL: http://llvm.org/viewvc/llvm-project?rev=248895&view=rev
Log:
[clang-tidy] Fix an assertion in the readability-braces-around-statements check.

Modified:
    
clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp
    
clang-tools-extra/trunk/test/clang-tidy/readability-braces-around-statements.cpp

Modified: 
clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp?rev=248895&r1=248894&r2=248895&view=diff
==============================================================================
--- 
clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp 
(original)
+++ 
clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp 
Wed Sep 30 07:48:42 2015
@@ -232,8 +232,18 @@ bool BracesAroundStatementsCheck::checkS
 
   // InitialLoc points at the last token before opening brace to be inserted.
   assert(InitialLoc.isValid());
+  // Convert InitialLoc to file location, if it's on the same macro expansion
+  // level as the start of the statement. We also need file locations for
+  // Lexer::getLocForEndOfToken working properly.
+  InitialLoc = Lexer::makeFileCharRange(
+                   CharSourceRange::getCharRange(InitialLoc, S->getLocStart()),
+                   SM, Context->getLangOpts())
+                   .getBegin();
+  if (InitialLoc.isInvalid())
+    return false;
   SourceLocation StartLoc =
       Lexer::getLocForEndOfToken(InitialLoc, 0, SM, Context->getLangOpts());
+
   // StartLoc points at the location of the opening brace to be inserted.
   SourceLocation EndLoc;
   std::string ClosingInsertion;

Modified: 
clang-tools-extra/trunk/test/clang-tidy/readability-braces-around-statements.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-braces-around-statements.cpp?rev=248895&r1=248894&r2=248895&view=diff
==============================================================================
--- 
clang-tools-extra/trunk/test/clang-tidy/readability-braces-around-statements.cpp
 (original)
+++ 
clang-tools-extra/trunk/test/clang-tidy/readability-braces-around-statements.cpp
 Wed Sep 30 07:48:42 2015
@@ -183,4 +183,12 @@ int test_macros(bool b) {
   // CHECK-FIXES: } else {
   // CHECK-FIXES-NEXT:   M(return 2);
   // CHECK-FIXES-NEXT: }
+  M(
+    for (;;)
+      ;
+  );
+  // CHECK-MESSAGES: :[[@LINE-3]]:13: warning: statement should be inside 
braces
+  // CHECK-FIXES: {{^}}    for (;;) {{{$}}
+  // CHECK-FIXES-NEXT: {{^      ;$}}
+  // CHECK-FIXES-NEXT: {{^}$}}
 }


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to