return EmitFloatingLiteral(cast<FloatingLiteral>(E));
case Expr::CharacterLiteralClass:
return EmitCharacterLiteral(cast<CharacterLiteral>(E));
+ case Expr::TypesCompatibleExprClass:
+ return EmitTypesCompatibleExpr(cast<TypesCompatibleExpr>(E));
// Operators.
case Expr::ParenExprClass:
E->getValue()));
}
+RValue CodeGenFunction::EmitTypesCompatibleExpr(const TypesCompatibleExpr *E) {
+ return RValue::get(llvm::ConstantInt::get(ConvertType(E->getType()),
+ E->typesAreCompatible()));
+}
+
+
RValue CodeGenFunction::EmitArraySubscriptExprRV(const ArraySubscriptExpr *E) {
// Emit subscript expressions in rvalue context's. For most cases, this just
// loads the lvalue formed by the subscript expr. However, we have to be
class IntegerLiteral;
class FloatingLiteral;
class CharacterLiteral;
+ class TypesCompatibleExpr;
+
class CastExpr;
class CallExpr;
class UnaryOperator;
RValue EmitIntegerLiteral(const IntegerLiteral *E);
RValue EmitFloatingLiteral(const FloatingLiteral *E);
RValue EmitCharacterLiteral(const CharacterLiteral *E);
+ RValue EmitTypesCompatibleExpr(const TypesCompatibleExpr *E);
RValue EmitCastExpr(const Expr *Op, QualType DestTy);
RValue EmitCallExpr(const CallExpr *E);