DmitryPolukhin added a comment.

PTAL


================
Comment at: lib/Sema/SemaDeclCXX.cpp:13113-13114
@@ -13065,28 +13112,4 @@
 
-    if (MD->isInvalidDecl())
-      return;
-
-    switch (Member) {
-    case CXXDefaultConstructor:
-      DefineImplicitDefaultConstructor(DefaultLoc,
-                                       cast<CXXConstructorDecl>(MD));
-      break;
-    case CXXCopyConstructor:
-      DefineImplicitCopyConstructor(DefaultLoc, cast<CXXConstructorDecl>(MD));
-      break;
-    case CXXCopyAssignment:
-      DefineImplicitCopyAssignment(DefaultLoc, MD);
-      break;
-    case CXXDestructor:
-      DefineImplicitDestructor(DefaultLoc, cast<CXXDestructorDecl>(MD));
-      break;
-    case CXXMoveConstructor:
-      DefineImplicitMoveConstructor(DefaultLoc, cast<CXXConstructorDecl>(MD));
-      break;
-    case CXXMoveAssignment:
-      DefineImplicitMoveAssignment(DefaultLoc, MD);
-      break;
-    case CXXInvalid:
-      llvm_unreachable("Invalid special member.");
-    }
+    if (!MD->isInvalidDecl())
+      DefineImplicitSpecialMember(*this, MD, DefaultLoc);
   } else {
----------------
I added code to drop dllexport attribute but the check for dropping dllexport 
attribute is basically the same. Moreover it cannot be done when the attribute 
is processed because we need full class definition so I moved the check to 
CheckCompletedCXXClass. Alternatively I can move the check to 
checkClassLevelDLLAttribute but it will start working for classes without class 
level dllexport attribute to detect if any class member has member level 
attribute (it is less efficient  because it requires more more loop over all 
class methods even for all classes).


http://reviews.llvm.org/D20422



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to