From b61829887db706ac648abc56adb03c8379253208 Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Wed, 20 Jan 2016 22:14:10 +0000 Subject: [PATCH] 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 --- .../clang-tidy/modernize/UseDefaultCheck.cpp | 1 + .../test/clang-tidy/modernize-use-default-delayed.cpp | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 clang-tools-extra/test/clang-tidy/modernize-use-default-delayed.cpp diff --git a/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp index 68ead15e2240..dbc84ef3a879 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 000000000000..c7163e8d9341 --- /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 +struct S { + S& operator=(const S&) { return *this; } +};