aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2012-06-28 21:43:01 +0000
committerDouglas Gregor <dgregor@apple.com>2012-06-28 21:43:01 +0000
commit0963017dcbc32176c79a251c3ab23bc35ac784e5 (patch)
tree22f32143d4d25187a37943d78a861f6827250766
parent9fc5b007726ef8a2fa923a95f047a51477704121 (diff)
Support the use of "=delete" and "=default" with delayed template
parsing. Fixes <rdar://problem/11700604>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159380 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Parse/ParseCXXInlineMethods.cpp1
-rw-r--r--lib/Parse/Parser.cpp1
-rw-r--r--test/Parser/DelayedTemplateParsing.cpp13
3 files changed, 14 insertions, 1 deletions
diff --git a/lib/Parse/ParseCXXInlineMethods.cpp b/lib/Parse/ParseCXXInlineMethods.cpp
index 131c6b6546..abce27c3f8 100644
--- a/lib/Parse/ParseCXXInlineMethods.cpp
+++ b/lib/Parse/ParseCXXInlineMethods.cpp
@@ -109,6 +109,7 @@ Decl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS,
// or if we are about to parse function member template then consume
// the tokens and store them for parsing at the end of the translation unit.
if (getLangOpts().DelayedTemplateParsing &&
+ DefinitionKind == FDK_Definition &&
((Actions.CurContext->isDependentContext() ||
TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) &&
!Actions.IsInsideALocalClassWithinATemplateFunction())) {
diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp
index 5b5d52b223..bec6dd717c 100644
--- a/lib/Parse/Parser.cpp
+++ b/lib/Parse/Parser.cpp
@@ -959,6 +959,7 @@ Decl *Parser::ParseFunctionDefinition(ParsingDeclarator &D,
// In delayed template parsing mode, for function template we consume the
// tokens and store them for late parsing at the end of the translation unit.
if (getLangOpts().DelayedTemplateParsing &&
+ Tok.isNot(tok::equal) &&
TemplateInfo.Kind == ParsedTemplateInfo::Template) {
MultiTemplateParamsArg TemplateParameterLists(Actions,
TemplateInfo.TemplateParams->data(),
diff --git a/test/Parser/DelayedTemplateParsing.cpp b/test/Parser/DelayedTemplateParsing.cpp
index 9737c731bd..77b47239f4 100644
--- a/test/Parser/DelayedTemplateParsing.cpp
+++ b/test/Parser/DelayedTemplateParsing.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fms-extensions -fdelayed-template-parsing -fsyntax-only -verify %s
+// RUN: %clang_cc1 -fms-extensions -fdelayed-template-parsing -fsyntax-only -verify -std=c++11 %s
template <class T>
class A {
@@ -90,3 +90,14 @@ Callback Bind() {
}
}
+
+namespace rdar11700604 {
+ template<typename T> void foo() = delete;
+
+ struct X {
+ X() = default;
+
+ template<typename T> void foo() = delete;
+ };
+}
+