aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-02-19 01:24:23 +0000
committerDouglas Gregor <dgregor@apple.com>2010-02-19 01:24:23 +0000
commitbd249a542878a626192746c1e0c0b21f164e6df7 (patch)
treeb658587e3524623023b936c4386274e60ce33c06
parent440806306674e23ad74726208cbdc6f37849dd9d (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.cpp25
-rw-r--r--test/ASTMerge/Inputs/exprs1.c3
-rw-r--r--test/ASTMerge/Inputs/exprs2.c3
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*)
};