Author: akirtzidis Date: Thu Feb 18 17:08:36 2016 New Revision: 261274 URL: http://llvm.org/viewvc/llvm-project?rev=261274&view=rev Log: [ASTImporter] Implement missing VisitAccessSpecDecl function in ASTImporter class.
Patch by Elisavet Sakellari! Modified: cfe/trunk/lib/AST/ASTImporter.cpp cfe/trunk/test/ASTMerge/Inputs/class1.cpp cfe/trunk/test/ASTMerge/Inputs/class2.cpp cfe/trunk/test/ASTMerge/class.cpp Modified: cfe/trunk/lib/AST/ASTImporter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=261274&r1=261273&r2=261274&view=diff ============================================================================== --- cfe/trunk/lib/AST/ASTImporter.cpp (original) +++ cfe/trunk/lib/AST/ASTImporter.cpp Thu Feb 18 17:08:36 2016 @@ -130,6 +130,7 @@ namespace clang { bool IsStructuralMatch(ClassTemplateDecl *From, ClassTemplateDecl *To); bool IsStructuralMatch(VarTemplateDecl *From, VarTemplateDecl *To); Decl *VisitDecl(Decl *D); + Decl *VisitAccessSpecDecl(AccessSpecDecl *D); Decl *VisitTranslationUnitDecl(TranslationUnitDecl *D); Decl *VisitNamespaceDecl(NamespaceDecl *D); Decl *VisitTypedefNameDecl(TypedefNameDecl *D, bool IsAlias); @@ -2316,6 +2317,31 @@ Decl *ASTNodeImporter::VisitTranslationU return ToD; } +Decl *ASTNodeImporter::VisitAccessSpecDecl(AccessSpecDecl *D) { + + SourceLocation Loc = Importer.Import(D->getLocation()); + SourceLocation ColonLoc = Importer.Import(D->getColonLoc()); + + // Import the context of this declaration. + DeclContext *DC = Importer.ImportContext(D->getDeclContext()); + if (!DC) + return nullptr; + + AccessSpecDecl *accessSpecDecl + = AccessSpecDecl::Create(Importer.getToContext(), D->getAccess(), + DC, Loc, ColonLoc); + + if (!accessSpecDecl) + return nullptr; + + // Lexical DeclContext and Semantic DeclContext + // is always the same for the accessSpec. + accessSpecDecl->setLexicalDeclContext(DC); + DC->addDeclInternal(accessSpecDecl); + + return accessSpecDecl; +} + Decl *ASTNodeImporter::VisitNamespaceDecl(NamespaceDecl *D) { // Import the major distinguishing characteristics of this namespace. DeclContext *DC, *LexicalDC; Modified: cfe/trunk/test/ASTMerge/Inputs/class1.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ASTMerge/Inputs/class1.cpp?rev=261274&r1=261273&r2=261274&view=diff ============================================================================== --- cfe/trunk/test/ASTMerge/Inputs/class1.cpp (original) +++ cfe/trunk/test/ASTMerge/Inputs/class1.cpp Thu Feb 18 17:08:36 2016 @@ -1,5 +1,6 @@ struct A { - int x; + public: + int x; }; struct B : A { Modified: cfe/trunk/test/ASTMerge/Inputs/class2.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ASTMerge/Inputs/class2.cpp?rev=261274&r1=261273&r2=261274&view=diff ============================================================================== --- cfe/trunk/test/ASTMerge/Inputs/class2.cpp (original) +++ cfe/trunk/test/ASTMerge/Inputs/class2.cpp Thu Feb 18 17:08:36 2016 @@ -1,5 +1,6 @@ struct A { - int x; + public: + int x; }; struct B : A { Modified: cfe/trunk/test/ASTMerge/class.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ASTMerge/class.cpp?rev=261274&r1=261273&r2=261274&view=diff ============================================================================== --- cfe/trunk/test/ASTMerge/class.cpp (original) +++ cfe/trunk/test/ASTMerge/class.cpp Thu Feb 18 17:08:36 2016 @@ -3,12 +3,12 @@ // RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 -Wno-odr -Werror -// CHECK: class1.cpp:5:8: warning: type 'B' has incompatible definitions in different translation units -// CHECK: class1.cpp:6:9: note: field 'y' has type 'float' here -// CHECK: class2.cpp:6:7: note: field 'y' has type 'int' here +// CHECK: class1.cpp:6:8: warning: type 'B' has incompatible definitions in different translation units +// CHECK: class1.cpp:7:9: note: field 'y' has type 'float' here +// CHECK: class2.cpp:7:7: note: field 'y' has type 'int' here // FIXME: we should also complain about mismatched types on the method -// CHECK: class1.cpp:17:6: warning: type 'E' has incompatible definitions in different translation units -// CHECK: class1.cpp:18:3: note: enumerator 'b' with value 1 here -// CHECK: class2.cpp:11:3: note: enumerator 'a' with value 0 here +// CHECK: class1.cpp:18:6: warning: type 'E' has incompatible definitions in different translation units +// CHECK: class1.cpp:19:3: note: enumerator 'b' with value 1 here +// CHECK: class2.cpp:12:3: note: enumerator 'a' with value 0 here _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits