]> granicus.if.org Git - clang/commitdiff
Teach Sema::MergeFunctionDecl to properly check for an out-of-line definition of...
authorVassil Vassilev <v.g.vassilev@gmail.com>
Wed, 18 May 2016 15:14:46 +0000 (15:14 +0000)
committerVassil Vassilev <v.g.vassilev@gmail.com>
Wed, 18 May 2016 15:14:46 +0000 (15:14 +0000)
First part of PR27699.

Patch by Cristina Cristescu!

Reviewed by Richard Smith and me.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@269935 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDecl.cpp
test/SemaCXX/cxx0x-defaulted-functions.cpp

index 75aca834d2c855df666ef72d57ae0b95ea283e87..d34d9b5688c314464ea62c5423a10c408dfc49d8 100644 (file)
@@ -2993,7 +2993,7 @@ bool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD,
             << 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);
index 617a25716314b5735f80c4755d044c7b7d5955e5..2aaf6197b64107ad5c985144ed3c524456b9e33a 100644 (file)
@@ -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 {