[cfe-commits] r41440 - /cfe/trunk/CodeGen/CGExprScalar.cpp
Chris Lattner
sabre at nondot.org
Sun Aug 26 00:26:14 PDT 2007
Author: lattner
Date: Sun Aug 26 02:26:12 2007
New Revision: 41440
URL: http://llvm.org/viewvc/llvm-project?rev=41440&view=rev
Log:
there are no conversions from aggregates to scalars.
Modified:
cfe/trunk/CodeGen/CGExprScalar.cpp
Modified: cfe/trunk/CodeGen/CGExprScalar.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/CodeGen/CGExprScalar.cpp?rev=41440&r1=41439&r2=41440&view=diff
==============================================================================
--- cfe/trunk/CodeGen/CGExprScalar.cpp (original)
+++ cfe/trunk/CodeGen/CGExprScalar.cpp Sun Aug 26 02:26:12 2007
@@ -365,30 +365,23 @@
// have to handle a more broad range of conversions than explicit casts, as they
// handle things like function to ptr-to-function decay etc.
Value *ScalarExprEmitter::EmitCastExpr(const Expr *E, QualType DestTy) {
- // Handle cases where the source is an LLVM Scalar type.
- if (!CGF.hasAggregateLLVMType(E->getType())) {
+ // Handle cases where the source is an non-complex type.
+ const ComplexType *CT = E->getType()->getAsComplexType();
+ if (!CT) {
Value *Src = Visit(const_cast<Expr*>(E));
// Use EmitScalarConversion to perform the conversion.
return EmitScalarConversion(Src, E->getType(), DestTy);
}
-
- if (const ComplexType *CT = E->getType()->getAsComplexType()) {
- // Emit the complex value, only keeping the real component. C99 6.3.1.7p2:
- // "When a value of complex type is converted to a real type, the imaginary
- // part of the complex value is discarded and the value of the real part is
- // converted according to the conversion rules for the corresponding real
- // type.
- Value *Src = CGF.EmitComplexExpr(E).first;
- return EmitScalarConversion(Src, CT->getElementType(), DestTy);
- }
-
- RValue Src = CGF.EmitAnyExpr(E);
-
- // If the destination is void, just evaluate the source.
- if (DestTy->isVoidType()) return 0;
- assert(0 && "Can't convert from an aggregate yet!");
+ // Handle cases where the source is a complex type.
+
+ // C99 6.3.1.7p2: "When a value of complex type is converted to a real type,
+ // the imaginary part of the complex value is discarded and the value of the
+ // real part is converted according to the conversion rules for the
+ // corresponding real type.
+ Value *Src = CGF.EmitComplexExpr(E).first;
+ return EmitScalarConversion(Src, CT->getElementType(), DestTy);
}
//===----------------------------------------------------------------------===//
More information about the cfe-commits
mailing list