From: Douglas Gregor Date: Fri, 19 Feb 2010 01:17:02 +0000 (+0000) Subject: AST import for DeclRefExprs X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=440806306674e23ad74726208cbdc6f37849dd9d;p=clang AST import for DeclRefExprs git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96646 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/ASTImporter.cpp b/lib/AST/ASTImporter.cpp index 661adb82f2..304ad2e1ee 100644 --- a/lib/AST/ASTImporter.cpp +++ b/lib/AST/ASTImporter.cpp @@ -107,6 +107,7 @@ namespace { // Importing expressions Expr *VisitExpr(Expr *E); + Expr *VisitDeclRefExpr(DeclRefExpr *E); Expr *VisitIntegerLiteral(IntegerLiteral *E); Expr *VisitCharacterLiteral(CharacterLiteral *E); Expr *VisitParenExpr(ParenExpr *E); @@ -2594,6 +2595,30 @@ Expr *ASTNodeImporter::VisitExpr(Expr *E) { return 0; } +Expr *ASTNodeImporter::VisitDeclRefExpr(DeclRefExpr *E) { + NestedNameSpecifier *Qualifier = 0; + if (E->getQualifier()) { + Qualifier = Importer.Import(E->getQualifier()); + if (!E->getQualifier()) + return 0; + } + + ValueDecl *ToD = cast_or_null(Importer.Import(E->getDecl())); + if (!ToD) + return 0; + + QualType T = Importer.Import(E->getType()); + if (T.isNull()) + return 0; + + return DeclRefExpr::Create(Importer.getToContext(), Qualifier, + Importer.Import(E->getQualifierRange()), + ToD, + Importer.Import(E->getLocation()), + T, + /*FIXME:TemplateArgs=*/0); +} + Expr *ASTNodeImporter::VisitIntegerLiteral(IntegerLiteral *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 bc76887979..03150a9e37 100644 --- a/test/ASTMerge/Inputs/exprs1.c +++ b/test/ASTMerge/Inputs/exprs1.c @@ -2,6 +2,7 @@ enum E0 { E0_Val0 = 'a', E0_Val1 = (17), - E0_Val2 = (1 << 2) + E0_Val2 = (1 << 2), + E0_Val3 = E0_Val2 }; diff --git a/test/ASTMerge/Inputs/exprs2.c b/test/ASTMerge/Inputs/exprs2.c index bc76887979..03150a9e37 100644 --- a/test/ASTMerge/Inputs/exprs2.c +++ b/test/ASTMerge/Inputs/exprs2.c @@ -2,6 +2,7 @@ enum E0 { E0_Val0 = 'a', E0_Val1 = (17), - E0_Val2 = (1 << 2) + E0_Val2 = (1 << 2), + E0_Val3 = E0_Val2 };