diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-06-28 21:43:01 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-06-28 21:43:01 +0000 |
commit | 0963017dcbc32176c79a251c3ab23bc35ac784e5 (patch) | |
tree | 22f32143d4d25187a37943d78a861f6827250766 | |
parent | 9fc5b007726ef8a2fa923a95f047a51477704121 (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.cpp | 1 | ||||
-rw-r--r-- | lib/Parse/Parser.cpp | 1 | ||||
-rw-r--r-- | test/Parser/DelayedTemplateParsing.cpp | 13 |
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; + }; +} + |