teach codegen to handle noop casts as lvalues.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67164 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 3ab8568..b3cf921 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -179,6 +179,19 @@
     return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E));
   case Expr::ChooseExprClass:
     return EmitLValue(cast<ChooseExpr>(E)->getChosenSubExpr(getContext()));
+  case Expr::ImplicitCastExprClass:
+  case Expr::CStyleCastExprClass:
+  case Expr::CXXFunctionalCastExprClass:
+  case Expr::CXXStaticCastExprClass:
+  case Expr::CXXDynamicCastExprClass:
+  case Expr::CXXReinterpretCastExprClass:
+  case Expr::CXXConstCastExprClass:
+    // Casts are only lvalues when the source and destination types are the 
+    // same.
+    assert(getContext().hasSameUnqualifiedType(E->getType(),
+                               cast<CastExpr>(E)->getSubExpr()->getType()) &&
+           "Type changing cast is not an lvalue");
+    return EmitLValue(cast<CastExpr>(E)->getSubExpr());
   }
 }