diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2016-01-20 22:14:10 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2016-01-20 22:14:10 +0000 |
commit | b61829887db706ac648abc56adb03c8379253208 (patch) | |
tree | e87f44ae3f439940f475d9477d57244dcb1c7878 | |
parent | 9fb70f53cee45cf1cfb74070d2aaadcb8434b94b (diff) | |
download | bcm5719-llvm-b61829887db706ac648abc56adb03c8379253208.tar.gz bcm5719-llvm-b61829887db706ac648abc56adb03c8379253208.zip |
Make modernize-use-default tolerant of delayed template parsing; this code was previously causing failed assertions because dyn_cast was being passed a null pointer due to the delay-parsed body.
llvm-svn: 258356
-rw-r--r-- | clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp | 1 | ||||
-rw-r--r-- | clang-tools-extra/test/clang-tidy/modernize-use-default-delayed.cpp | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp index 68ead15e224..dbc84ef3a87 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp @@ -272,6 +272,7 @@ void UseDefaultCheck::check(const MatchFinder::MatchResult &Result) { // that are not user-provided (automatically generated). if (SpecialFunctionDecl->isDeleted() || SpecialFunctionDecl->isExplicitlyDefaulted() || + SpecialFunctionDecl->isLateTemplateParsed() || !SpecialFunctionDecl->isUserProvided() || !SpecialFunctionDecl->hasBody()) return; diff --git a/clang-tools-extra/test/clang-tidy/modernize-use-default-delayed.cpp b/clang-tools-extra/test/clang-tidy/modernize-use-default-delayed.cpp new file mode 100644 index 00000000000..c7163e8d934 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/modernize-use-default-delayed.cpp @@ -0,0 +1,8 @@ +// RUN: clang-tidy %s -checks=-*,modernize-use-default -- -std=c++11 -fdelayed-template-parsing -fexceptions | count 0 +// Note: this test expects no diagnostics, but FileCheck cannot handle that, +// hence the use of | count 0. + +template <typename Ty> +struct S { + S<Ty>& operator=(const S<Ty>&) { return *this; } +}; |