]> granicus.if.org Git - clang/commitdiff
Simplify the AST a bit by skipping creating member initializers for members
authorEli Friedman <eli.friedman@gmail.com>
Mon, 16 Nov 2009 23:07:59 +0000 (23:07 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Mon, 16 Nov 2009 23:07:59 +0000 (23:07 +0000)
with a trivial constructor.

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

lib/Sema/SemaDeclCXX.cpp

index 56381e76f87e9b4cb64a45ed89b6a82181586a82..e956ffec4929019c5de8ca9d6ad382514836c254 100644 (file)
@@ -1398,7 +1398,20 @@ Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
         HadError = true;
         continue;
       }
-      
+
+      if (FT.isConstQualified() && Ctor->isTrivial()) {
+        Diag(Constructor->getLocation(), diag::err_unintialized_member_in_ctor)
+          << (int)IsImplicitConstructor << Context.getTagDeclType(ClassDecl)
+          << 1 << (*Field)->getDeclName();
+        Diag((*Field)->getLocation(), diag::note_declared_at);
+        HadError = true;
+      }
+
+      // Don't create initializers for trivial constructors, since they don't
+      // actually need to be run.
+      if (Ctor->isTrivial())
+        continue;
+
       ASTOwningVector<&ActionBase::DeleteExpr> CtorArgs(*this);
       if (CompleteConstructorCall(Ctor, MultiExprArg(*this, 0, 0), 
                                   Constructor->getLocation(), CtorArgs))
@@ -1415,13 +1428,6 @@ Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
 
       AllToInit.push_back(Member);
       MarkDeclarationReferenced(Constructor->getLocation(), Ctor);
-      if (FT.isConstQualified() && Ctor->isTrivial()) {
-        Diag(Constructor->getLocation(), diag::err_unintialized_member_in_ctor)
-          << (int)IsImplicitConstructor << Context.getTagDeclType(ClassDecl)
-          << 1 << (*Field)->getDeclName();
-        Diag((*Field)->getLocation(), diag::note_declared_at);
-        HadError = true;
-      }
     }
     else if (FT->isReferenceType()) {
       Diag(Constructor->getLocation(), diag::err_unintialized_member_in_ctor)