diff options
author | Alexis Hunt <alercah@gmail.com> | 2011-05-26 01:26:05 +0000 |
---|---|---|
committer | Alexis Hunt <alercah@gmail.com> | 2011-05-26 01:26:05 +0000 |
commit | d051b871609d8a071c2421f2d4168e3725ba2fcb (patch) | |
tree | 1443ed56a78d15378db75edc69b458fdf80ffe01 /clang/lib/Sema/SemaDecl.cpp | |
parent | 7fac79e255a90b2d029e8e918c7c64fb1cb23696 (diff) | |
download | bcm5719-llvm-d051b871609d8a071c2421f2d4168e3725ba2fcb.tar.gz bcm5719-llvm-d051b871609d8a071c2421f2d4168e3725ba2fcb.zip |
Implement a new warning for when adding a default argument to a method
makes it into a special member function. This is very bad and can lead
to all sorts of nastiness including implicit member functions violating
the One Definition Rule. This should probably be made ill-formed in a
later version of the standard, but for now we'll just warn.
llvm-svn: 132104
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index dae7ba20b1f..77bd5b79ae0 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -1505,14 +1505,14 @@ struct GNUCompatibleParamWarning { /// getSpecialMember - get the special member enum for a method. Sema::CXXSpecialMember Sema::getSpecialMember(const CXXMethodDecl *MD) { if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(MD)) { + if (Ctor->isDefaultConstructor()) + return Sema::CXXDefaultConstructor; + if (Ctor->isCopyConstructor()) return Sema::CXXCopyConstructor; - + if (Ctor->isMoveConstructor()) return Sema::CXXMoveConstructor; - - if (Ctor->isDefaultConstructor()) - return Sema::CXXDefaultConstructor; } else if (isa<CXXDestructorDecl>(MD)) { return Sema::CXXDestructor; } else if (MD->isCopyAssignmentOperator()) { |