]> granicus.if.org Git - clang/commitdiff
Address some of Anders comments
authorDouglas Gregor <dgregor@apple.com>
Fri, 18 Dec 2009 05:19:44 +0000 (05:19 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 18 Dec 2009 05:19:44 +0000 (05:19 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91670 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGCXX.cpp

index 21f3e00ac07bec10c8d5115dda6c49e79e4b821e..011257b7499fe09fa9bb43020b85ab7822de5d91 100644 (file)
@@ -579,10 +579,14 @@ CodeGenFunction::EmitCXXConstructExpr(llvm::Value *Dest,
     const Expr *Arg = E->getArg(0);
 
     if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Arg)) {
-      if (isa<CXXBindTemporaryExpr>(ICE->getSubExpr()))
-        Arg = cast<CXXBindTemporaryExpr>(ICE->getSubExpr())->getSubExpr();
-    } else if (const CXXBindTemporaryExpr *BindExpr = 
-                  dyn_cast<CXXBindTemporaryExpr>(Arg))
+      assert((ICE->getCastKind() == CastExpr::CK_NoOp ||
+              ICE->getCastKind() == CastExpr::CK_ConstructorConversion) &&
+             "Unknown implicit cast kind in constructor elision");
+      Arg = ICE->getSubExpr();
+    }
+
+    if (const CXXBindTemporaryExpr *BindExpr = 
+           dyn_cast<CXXBindTemporaryExpr>(Arg))
       Arg = BindExpr->getSubExpr();
 
     EmitAggExpr(Arg, Dest, false);