aboutsummaryrefslogtreecommitdiff
path: root/lib/Parse/ParseDeclCXX.cpp
diff options
context:
space:
mode:
authorSean Hunt <scshunt@csclub.uwaterloo.ca>2011-05-05 03:36:28 +0000
committerSean Hunt <scshunt@csclub.uwaterloo.ca>2011-05-05 03:36:28 +0000
commitad7ec12ef2edbadb85a3754f0395ef2f06d4256c (patch)
treedb1fe46fc1aa90aaf1089ea66bbd9a54e7b17ba0 /lib/Parse/ParseDeclCXX.cpp
parent7665ad83d8eff7b8b2c5f3b893b6b7ece38f847c (diff)
Implement some framework for defaulted constructors.
There's some unused stuff for now. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130912 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseDeclCXX.cpp')
-rw-r--r--lib/Parse/ParseDeclCXX.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp
index 596778dbd3..41b773e007 100644
--- a/lib/Parse/ParseDeclCXX.cpp
+++ b/lib/Parse/ParseDeclCXX.cpp
@@ -1621,6 +1621,8 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
ExprResult BitfieldSize;
ExprResult Init;
bool Deleted = false;
+ bool Defaulted = false;
+ SourceLocation DefLoc;
while (1) {
// member-declarator:
@@ -1652,6 +1654,11 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
Diag(Tok, diag::warn_deleted_function_accepted_as_extension);
ConsumeToken();
Deleted = true;
+ } else if (Tok.is(tok::kw_delete)) {
+ if (!getLang().CPlusPlus0x)
+ Diag(Tok, diag::warn_defaulted_function_accepted_as_extension);
+ DefLoc = ConsumeToken();
+ Defaulted = true;
} else {
Init = ParseInitializer();
if (Init.isInvalid())
@@ -1683,6 +1690,10 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
ThisDecl = Actions.ActOnFriendFunctionDecl(getCurScope(), DeclaratorInfo,
/*IsDefinition*/ false,
move(TemplateParams));
+ if (Defaulted) {
+ Diag(DefLoc, diag::err_friends_define_only_namespace_scope);
+ ThisDecl->setInvalidDecl();
+ }
} else {
ThisDecl = Actions.ActOnCXXMemberDeclarator(getCurScope(), AS,
DeclaratorInfo,
@@ -1690,7 +1701,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
BitfieldSize.release(),
VS, Init.release(),
/*IsDefinition*/Deleted,
- Deleted);
+ Deleted, Defaulted);
}
if (ThisDecl)
DeclsInGroup.push_back(ThisDecl);
@@ -1717,6 +1728,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
BitfieldSize = 0;
Init = 0;
Deleted = false;
+ Defaulted = false;
// Attributes are only allowed on the second declarator.
MaybeParseGNUAttributes(DeclaratorInfo);