Author: vvassilev Date: Wed May 18 10:14:46 2016 New Revision: 269935 URL: http://llvm.org/viewvc/llvm-project?rev=269935&view=rev Log: Teach Sema::MergeFunctionDecl to properly check for an out-of-line definition of a function that is declared as =default in its class definition.
First part of PR27699. Patch by Cristina Cristescu! Reviewed by Richard Smith and me. Modified: cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/test/SemaCXX/cxx0x-defaulted-functions.cpp Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=269935&r1=269934&r2=269935&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed May 18 10:14:46 2016 @@ -2993,7 +2993,7 @@ bool Sema::MergeFunctionDecl(FunctionDec << New << getSpecialMember(OldMethod); return true; } - } else if (OldMethod->isExplicitlyDefaulted() && !isFriend) { + } else if (OldMethod->getFirstDecl()->isExplicitlyDefaulted() && !isFriend) { Diag(NewMethod->getLocation(), diag::err_definition_of_explicitly_defaulted_member) << getSpecialMember(OldMethod); Modified: cfe/trunk/test/SemaCXX/cxx0x-defaulted-functions.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx0x-defaulted-functions.cpp?rev=269935&r1=269934&r2=269935&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/cxx0x-defaulted-functions.cpp (original) +++ cfe/trunk/test/SemaCXX/cxx0x-defaulted-functions.cpp Wed May 18 10:14:46 2016 @@ -150,6 +150,14 @@ namespace PR13527 { Y::~Y() = default; // expected-error {{definition of explicitly defaulted}} } +namespace PR27699 { + struct X { + X(); + }; + X::X() = default; // expected-note {{here}} + X::X() = default; // expected-error {{redefinition of 'X'}} +} + namespace PR14577 { template<typename T> struct Outer { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits