]> granicus.if.org Git - clang/commitdiff
AST import for sizeof and alignof expressions
authorDouglas Gregor <dgregor@apple.com>
Fri, 19 Feb 2010 01:24:23 +0000 (01:24 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 19 Feb 2010 01:24:23 +0000 (01:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96647 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTImporter.cpp
test/ASTMerge/Inputs/exprs1.c
test/ASTMerge/Inputs/exprs2.c

index 304ad2e1ee519222eb671bf8efb095d65ef86d5f..573bab7b23c34bc5cf131cff2d354fed2112bb3c 100644 (file)
@@ -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())
index 03150a9e377ee65c0098699544e6579643207e08..42e06de60abbb5f2da9657fb6fdb5253d8e45741 100644 (file)
@@ -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*)
 };
 
index 03150a9e377ee65c0098699544e6579643207e08..42e06de60abbb5f2da9657fb6fdb5253d8e45741 100644 (file)
@@ -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*)
 };