diff options
author | Alexis Hunt <alercah@gmail.com> | 2011-05-17 20:44:43 +0000 |
---|---|---|
committer | Alexis Hunt <alercah@gmail.com> | 2011-05-17 20:44:43 +0000 |
commit | 604aeb384998d000b32a4715ce02906d8b6aba05 (patch) | |
tree | 919878cae37d850250ee915bf32183751218c1f6 /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | fa7afe2a05db4e87b120a9934dc9f2c37cba71c2 (diff) | |
download | bcm5719-llvm-604aeb384998d000b32a4715ce02906d8b6aba05.tar.gz bcm5719-llvm-604aeb384998d000b32a4715ce02906d8b6aba05.zip |
Fix some minor bugs and add a lot more test cases for defaulted
constructors, including two more FIXMEs (one of which I don't actually
understand).
llvm-svn: 131487
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index e280972f023..406f4df16f7 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -3187,17 +3187,21 @@ void Sema::CheckExplicitlyDefaultedCopyAssignment(CXXMethodDecl *MD) { *ExceptionType = Context.getFunctionType( Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>(); - // Check for parameter type matching. - // This is a copy ctor so we know it's a cv-qualified reference to T. QualType ArgType = OperType->getArgType(0); - if (ArgType->getPointeeType().isVolatileQualified()) { - Diag(MD->getLocation(), diag::err_defaulted_copy_assign_volatile_param); - HadError = true; - } - if (ArgType->getPointeeType().isConstQualified() && !Const) { - Diag(MD->getLocation(), diag::err_defaulted_copy_assign_const_param); + if (!ArgType->isReferenceType()) { + Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref); HadError = true; + } else { + if (ArgType->getPointeeType().isVolatileQualified()) { + Diag(MD->getLocation(), diag::err_defaulted_copy_assign_volatile_param); + HadError = true; + } + if (ArgType->getPointeeType().isConstQualified() && !Const) { + Diag(MD->getLocation(), diag::err_defaulted_copy_assign_const_param); + HadError = true; + } } + if (OperType->getTypeQuals()) { Diag(MD->getLocation(), diag::err_defaulted_copy_assign_quals); HadError = true; |