[PATCH] D54996: [libclang] Fix clang_Cursor_isAnonymous
Ivan Donchevskii via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 10 01:14:26 PST 2019
yvvan updated this revision to Diff 181005.
yvvan added a comment.
Replace the absolute path with {{.*}} to be independent from the machine.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D54996/new/
https://reviews.llvm.org/D54996
Files:
test/Index/print-type.cpp
tools/c-index-test/c-index-test.c
tools/libclang/CXType.cpp
Index: tools/libclang/CXType.cpp
===================================================================
--- tools/libclang/CXType.cpp
+++ tools/libclang/CXType.cpp
@@ -1229,11 +1229,15 @@
if (!clang_isDeclaration(C.kind))
return 0;
const Decl *D = cxcursor::getCursorDecl(C);
- if (const RecordDecl *FD = dyn_cast_or_null<RecordDecl>(D))
- return FD->isAnonymousStructOrUnion();
+ if (const NamespaceDecl *ND = dyn_cast_or_null<NamespaceDecl>(D)) {
+ return ND->isAnonymousNamespace();
+ } else if (const TagDecl *TD = dyn_cast_or_null<TagDecl>(D)) {
+ return TD->getTypedefNameForAnonDecl() == nullptr &&
+ TD->getIdentifier() == nullptr;
+ }
+
return 0;
}
-
CXType clang_Type_getNamedType(CXType CT){
QualType T = GetQualType(CT);
const Type *TP = T.getTypePtrOrNull();
Index: tools/c-index-test/c-index-test.c
===================================================================
--- tools/c-index-test/c-index-test.c
+++ tools/c-index-test/c-index-test.c
@@ -1654,16 +1654,17 @@
if (numFields != 0) {
printf(" [nbFields=%d]", numFields);
}
- /* Print if it is an anonymous record. */
- {
- unsigned isAnon = clang_Cursor_isAnonymous(cursor);
- if (isAnon != 0) {
- printf(" [isAnon=%d]", isAnon);
- }
- }
}
}
+ /* Print if it is an anonymous record or namespace. */
+ {
+ unsigned isAnon = clang_Cursor_isAnonymous(cursor);
+ if (isAnon != 0) {
+ printf(" [isAnon=%d]", isAnon);
+ }
+ }
+
printf("\n");
}
return CXChildVisit_Recurse;
Index: test/Index/print-type.cpp
===================================================================
--- test/Index/print-type.cpp
+++ test/Index/print-type.cpp
@@ -79,6 +79,17 @@
outer::Foo<bool> parameter;
outer::inner::Bar construct(¶meter);
+
+class X {
+ struct { int a; };
+ class { public: int b; };
+ union { int c; int d;};
+ enum { Test };
+};
+
+namespace {
+ int a;
+}
// RUN: c-index-test -test-print-type %s -std=c++14 | FileCheck %s
// CHECK: Namespace=outer:1:11 (Definition) [type=] [typekind=Invalid] [isPOD=0]
// CHECK: ClassTemplate=Foo:4:8 (Definition) [type=] [typekind=Invalid] [isPOD=0]
@@ -188,3 +199,8 @@
// CHECK: TypeAliasDecl=baz:76:7 (Definition) [type=baz] [typekind=Typedef] [templateargs/1= [type=A<void>] [typekind=Unexposed]] [canonicaltype=A<void>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=void] [typekind=Void]] [isPOD=0]
// CHECK: VarDecl=autoTemplPointer:78:6 (Definition) [type=Specialization<Specialization<bool> &> *] [typekind=Auto] [canonicaltype=Specialization<Specialization<bool> &> *] [canonicaltypekind=Pointer] [isPOD=1] [pointeetype=Specialization<Specialization<bool> &>] [pointeekind=Record]
// CHECK: CallExpr=Bar:17:3 [type=outer::inner::Bar] [typekind=Elaborated] [canonicaltype=outer::inner::Bar] [canonicaltypekind=Record] [args= [outer::Foo<bool> *] [Pointer]] [isPOD=0] [nbFields=3]
+// CHECK: StructDecl=:84:3 (Definition) [type=X::(anonymous struct at {{.*}}print-type.cpp:84:3)] [typekind=Record] [isPOD=1] [nbFields=1] [isAnon=1]
+// CHECK: ClassDecl=:85:3 (Definition) [type=X::(anonymous class at {{.*}}print-type.cpp:85:3)] [typekind=Record] [isPOD=1] [nbFields=1] [isAnon=1]
+// CHECK: UnionDecl=:86:3 (Definition) [type=X::(anonymous union at {{.*}}print-type.cpp:86:3)] [typekind=Record] [isPOD=1] [nbFields=2] [isAnon=1]
+// CHECK: EnumDecl=:87:3 (Definition) [type=X::(anonymous enum at {{.*}}print-type.cpp:87:3)] [typekind=Enum] [isPOD=1] [isAnon=1]
+// CHECK: Namespace=:90:11 (Definition) [type=] [typekind=Invalid] [isPOD=0] [isAnon=1]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D54996.181005.patch
Type: text/x-patch
Size: 3672 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190110/5b31cb9a/attachment.bin>
More information about the cfe-commits
mailing list