diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-02-19 01:24:23 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-02-19 01:24:23 +0000 |
commit | bd249a542878a626192746c1e0c0b21f164e6df7 (patch) | |
tree | b658587e3524623023b936c4386274e60ce33c06 | |
parent | 440806306674e23ad74726208cbdc6f37849dd9d (diff) |
AST import for sizeof and alignof expressions
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96647 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/ASTImporter.cpp | 25 | ||||
-rw-r--r-- | test/ASTMerge/Inputs/exprs1.c | 3 | ||||
-rw-r--r-- | test/ASTMerge/Inputs/exprs2.c | 3 |
3 files changed, 29 insertions, 2 deletions
diff --git a/lib/AST/ASTImporter.cpp b/lib/AST/ASTImporter.cpp index 304ad2e1ee..573bab7b23 100644 --- a/lib/AST/ASTImporter.cpp +++ b/lib/AST/ASTImporter.cpp @@ -112,6 +112,7 @@ namespace { Expr *VisitCharacterLiteral(CharacterLiteral *E); Expr *VisitParenExpr(ParenExpr *E); Expr *VisitUnaryOperator(UnaryOperator *E); + Expr *VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E); Expr *VisitBinaryOperator(BinaryOperator *E); Expr *VisitCompoundAssignOperator(CompoundAssignOperator *E); Expr *VisitImplicitCastExpr(ImplicitCastExpr *E); @@ -2663,6 +2664,30 @@ Expr *ASTNodeImporter::VisitUnaryOperator(UnaryOperator *E) { Importer.Import(E->getOperatorLoc())); } +Expr *ASTNodeImporter::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) { + QualType ResultType = Importer.Import(E->getType()); + + if (E->isArgumentType()) { + TypeSourceInfo *TInfo = Importer.Import(E->getArgumentTypeInfo()); + if (!TInfo) + return 0; + + return new (Importer.getToContext()) SizeOfAlignOfExpr(E->isSizeOf(), + TInfo, ResultType, + Importer.Import(E->getOperatorLoc()), + Importer.Import(E->getRParenLoc())); + } + + Expr *SubExpr = Importer.Import(E->getArgumentExpr()); + if (!SubExpr) + return 0; + + return new (Importer.getToContext()) SizeOfAlignOfExpr(E->isSizeOf(), + SubExpr, ResultType, + Importer.Import(E->getOperatorLoc()), + Importer.Import(E->getRParenLoc())); +} + Expr *ASTNodeImporter::VisitBinaryOperator(BinaryOperator *E) { QualType T = Importer.Import(E->getType()); if (T.isNull()) diff --git a/test/ASTMerge/Inputs/exprs1.c b/test/ASTMerge/Inputs/exprs1.c index 03150a9e37..42e06de60a 100644 --- a/test/ASTMerge/Inputs/exprs1.c +++ b/test/ASTMerge/Inputs/exprs1.c @@ -3,6 +3,7 @@ enum E0 { E0_Val0 = 'a', E0_Val1 = (17), E0_Val2 = (1 << 2), - E0_Val3 = E0_Val2 + E0_Val3 = E0_Val2, + E0_Val4 = sizeof(int*) }; diff --git a/test/ASTMerge/Inputs/exprs2.c b/test/ASTMerge/Inputs/exprs2.c index 03150a9e37..42e06de60a 100644 --- a/test/ASTMerge/Inputs/exprs2.c +++ b/test/ASTMerge/Inputs/exprs2.c @@ -3,6 +3,7 @@ enum E0 { E0_Val0 = 'a', E0_Val1 = (17), E0_Val2 = (1 << 2), - E0_Val3 = E0_Val2 + E0_Val3 = E0_Val2, + E0_Val4 = sizeof(int*) }; |