r261274 - [ASTImporter] Implement missing VisitAccessSpecDecl function in ASTImporter class.
Argyrios Kyrtzidis via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 18 15:08:37 PST 2016
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
More information about the cfe-commits
mailing list