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
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index dae7ba20..77bd5b7 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -1505,14 +1505,14 @@
 /// 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->isCopyConstructor())
-      return Sema::CXXCopyConstructor;
-    
-    if (Ctor->isMoveConstructor())
-      return Sema::CXXMoveConstructor;
-    
     if (Ctor->isDefaultConstructor())
       return Sema::CXXDefaultConstructor;
+
+    if (Ctor->isCopyConstructor())
+      return Sema::CXXCopyConstructor;
+
+    if (Ctor->isMoveConstructor())
+      return Sema::CXXMoveConstructor;
   } else if (isa<CXXDestructorDecl>(MD)) {
     return Sema::CXXDestructor;
   } else if (MD->isCopyAssignmentOperator()) {