From ba3fdfcbff06349851b22bea6ba3c6904e748a59 Mon Sep 17 00:00:00 2001 From: Sebastian Redl Date: Wed, 3 Dec 2008 23:17:54 +0000 Subject: Fix some type punning errors in SizeOfAlignOf and Typeid AST nodes. This should satisfy compilers and language lawyers alike. llvm-svn: 60511 --- clang/lib/AST/Expr.cpp | 4 ++-- clang/lib/AST/ExprCXX.cpp | 4 ++-- clang/lib/AST/StmtSerialization.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'clang/lib/AST') diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 948dbc24189..e4386eceda1 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -1314,12 +1314,12 @@ Stmt::child_iterator SizeOfAlignOfExpr::child_begin() { return child_iterator(T); return child_iterator(); } - return child_iterator((Stmt**)&Argument); + return child_iterator(&Argument.Ex); } Stmt::child_iterator SizeOfAlignOfExpr::child_end() { if (isArgumentType()) return child_iterator(); - return child_iterator((Stmt**)&Argument + 1); + return child_iterator(&Argument.Ex + 1); } // ArraySubscriptExpr diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp index 1bf07c4a63e..2d517196be6 100644 --- a/clang/lib/AST/ExprCXX.cpp +++ b/clang/lib/AST/ExprCXX.cpp @@ -28,10 +28,10 @@ void CXXConditionDeclExpr::Destroy(ASTContext& C) { // CXXTypeidExpr - has child iterators if the operand is an expression Stmt::child_iterator CXXTypeidExpr::child_begin() { - return isTypeOperand() ? child_iterator() : (Stmt**)&Operand; + return isTypeOperand() ? child_iterator() : &Operand.Ex; } Stmt::child_iterator CXXTypeidExpr::child_end() { - return isTypeOperand() ? child_iterator() : (Stmt**)&Operand+1; + return isTypeOperand() ? child_iterator() : &Operand.Ex+1; } // CXXBoolLiteralExpr diff --git a/clang/lib/AST/StmtSerialization.cpp b/clang/lib/AST/StmtSerialization.cpp index a8602245f3e..78a2cbcaa76 100644 --- a/clang/lib/AST/StmtSerialization.cpp +++ b/clang/lib/AST/StmtSerialization.cpp @@ -1394,7 +1394,7 @@ CXXNamedCastExpr::CreateImpl(Deserializer& D, ASTContext& C, StmtClass SC) { void CXXTypeidExpr::EmitImpl(llvm::Serializer& S) const { S.Emit(getType()); - S.Emit(isTypeOperand()); + S.EmitBool(isTypeOperand()); if (isTypeOperand()) { S.Emit(getTypeOperand()); } else { -- cgit v1.2.3