Index: clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/readability/BracesAroundStatementsCheck.cpp @@ -215,6 +215,8 @@ return false; } + if (!InitialLoc.isValid()) + return false; const SourceManager &SM = *Result.SourceManager; const ASTContext *Context = Result.Context; @@ -225,8 +227,6 @@ if (FileRange.isInvalid()) return false; - // 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. Index: clang-tools-extra/trunk/test/clang-tidy/readability-braces-around-statements-assert-failure.cpp =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-braces-around-statements-assert-failure.cpp +++ clang-tools-extra/trunk/test/clang-tidy/readability-braces-around-statements-assert-failure.cpp @@ -1,7 +1,12 @@ -// RUN: %check_clang_tidy %s readability-braces-around-statements %t +// RUN: clang-tidy -checks='-*,readability-braces-around-statements' %s -- + +// Note: this test expects no assert failure happened in clang-tidy. int test_failure() { if (std::rand()) { - // CHECK-MESSAGES: :[[@LINE-1]]:7: error: use of undeclared identifier 'std' } } + +void test_failure2() { + for (a b c;; +}