[clang-tools-extra] r266992 - [Clang-tidy] Fix for crash in modernize-raw-string-literal check

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 21 07:39:13 PDT 2016


Author: alexfh
Date: Thu Apr 21 09:39:12 2016
New Revision: 266992

URL: http://llvm.org/viewvc/llvm-project?rev=266992&view=rev
Log:
[Clang-tidy] Fix for crash in modernize-raw-string-literal check

Summary:
Clang-tidy modernize-raw-string-literal check crashes on run-time assert while it is evaluating compiler predefined identifiers such as
- __FUNCTION__
- __func__
- __PRETTY_FUNCTION__

Check is asserting because it cannot find opening quote for such string literal. It occurs only on debug build config.
I think that it would be good to prune such cases by crossing off predefined expressions - there is no need to evaluate such matches.

Reviewers: LegalizeAdulthood, alexfh

Subscribers: cfe-commits

Patch by Marek Jenda!

Differential Revision: http://reviews.llvm.org/D19331

Modified:
    clang-tools-extra/trunk/clang-tidy/modernize/RawStringLiteralCheck.cpp
    clang-tools-extra/trunk/test/clang-tidy/modernize-raw-string-literal.cpp

Modified: clang-tools-extra/trunk/clang-tidy/modernize/RawStringLiteralCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/RawStringLiteralCheck.cpp?rev=266992&r1=266991&r2=266992&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/modernize/RawStringLiteralCheck.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/modernize/RawStringLiteralCheck.cpp Thu Apr 21 09:39:12 2016
@@ -108,7 +108,8 @@ void RawStringLiteralCheck::storeOptions
 }
 
 void RawStringLiteralCheck::registerMatchers(MatchFinder *Finder) {
-  Finder->addMatcher(stringLiteral().bind("lit"), this);
+  Finder->addMatcher(
+      stringLiteral(unless(hasParent(predefinedExpr()))).bind("lit"), this);
 }
 
 void RawStringLiteralCheck::check(const MatchFinder::MatchResult &Result) {

Modified: clang-tools-extra/trunk/test/clang-tidy/modernize-raw-string-literal.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-raw-string-literal.cpp?rev=266992&r1=266991&r2=266992&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/modernize-raw-string-literal.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/modernize-raw-string-literal.cpp Thu Apr 21 09:39:12 2016
@@ -91,6 +91,10 @@ char const *const HexPrintable("\x40\\")
 // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: {{.*}} can be written as a raw string literal
 // CHECK-FIXES: {{^}}char const *const HexPrintable(R"(@\)");{{$}}
 
+char const *const prettyFunction(__PRETTY_FUNCTION__);
+char const *const function(__FUNCTION__);
+char const *const func(__func__);
+
 #define TRICK(arg_) #arg_
 char const *const MacroBody = TRICK(foo\\bar);
 




More information about the cfe-commits mailing list