diff options
| author | Alexander Kornienko <alexfh@google.com> | 2019-03-05 14:09:57 +0000 |
|---|---|---|
| committer | Alexander Kornienko <alexfh@google.com> | 2019-03-05 14:09:57 +0000 |
| commit | 401997db928eb5aff56b8daaf4cd676e102b05d7 (patch) | |
| tree | e09cf5a3ce7902ad96e789f894e6662ac87e72c2 | |
| parent | 4d93b9c75c0452674ad451256c7225fb86da5e87 (diff) | |
| download | bcm5719-llvm-401997db928eb5aff56b8daaf4cd676e102b05d7.tar.gz bcm5719-llvm-401997db928eb5aff56b8daaf4cd676e102b05d7.zip | |
[clang-tidy] Fix bugprone-string-constructor crash
llvm-svn: 355401
| -rw-r--r-- | clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.cpp | 3 | ||||
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/bugprone-string-constructor.cpp | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.cpp index 3a4e75bcda8..a4b83ada98d 100644 --- a/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.cpp @@ -138,7 +138,8 @@ void StringConstructorCheck::check(const MatchFinder::MatchResult &Result) { } } else if (const auto *Ptr = Result.Nodes.getNodeAs<Expr>("from-ptr")) { Expr::EvalResult ConstPtr; - if (Ptr->EvaluateAsRValue(ConstPtr, Ctx) && + if (!Ptr->isInstantiationDependent() && + Ptr->EvaluateAsRValue(ConstPtr, Ctx) && ((ConstPtr.Val.isInt() && ConstPtr.Val.getInt().isNullValue()) || (ConstPtr.Val.isLValue() && ConstPtr.Val.isNullPointer()))) { diag(Loc, "constructing string from nullptr is undefined behaviour"); diff --git a/clang-tools-extra/test/clang-tidy/bugprone-string-constructor.cpp b/clang-tools-extra/test/clang-tidy/bugprone-string-constructor.cpp index 3ab4f424087..9e11a32a018 100644 --- a/clang-tools-extra/test/clang-tidy/bugprone-string-constructor.cpp +++ b/clang-tools-extra/test/clang-tidy/bugprone-string-constructor.cpp @@ -65,3 +65,11 @@ void Valid() { std::string s2("test", 3); std::string s3("test"); } + +namespace instantiation_dependent_exprs { +template<typename T> +struct S { + bool x; + std::string f() { return x ? "a" : "b"; } +}; +} |

