From dc2c93017f8bf2a2c10b8e024f8f4a6409dbeeee Mon Sep 17 00:00:00 2001 From: Sven van Haastregt Date: Mon, 11 Feb 2019 11:00:56 +0000 Subject: [PATCH] [libclang] Add attribute support for 'convergent'. This bumps CINDEX_VERSION_MINOR up (to 51). Patch by Hsin-Hsiao Lin. Differential Revision: https://reviews.llvm.org/D57946 llvm-svn: 353690 --- clang/bindings/python/clang/cindex.py | 1 + clang/include/clang-c/Index.h | 5 +++-- clang/test/Index/attributes.c | 5 +++++ clang/tools/libclang/CIndex.cpp | 4 +++- clang/tools/libclang/CXCursor.cpp | 1 + 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py index 2c97d01a104a..8630c59c1359 100644 --- a/clang/bindings/python/clang/cindex.py +++ b/clang/bindings/python/clang/cindex.py @@ -1342,6 +1342,7 @@ CursorKind.VISIBILITY_ATTR = CursorKind(417) CursorKind.DLLEXPORT_ATTR = CursorKind(418) CursorKind.DLLIMPORT_ATTR = CursorKind(419) +CursorKind.CONVERGENT_ATTR = CursorKind(420) ### # Preprocessing diff --git a/clang/include/clang-c/Index.h b/clang/include/clang-c/Index.h index 3dd8432609d2..38af8aa6d8b6 100644 --- a/clang/include/clang-c/Index.h +++ b/clang/include/clang-c/Index.h @@ -32,7 +32,7 @@ * compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable. */ #define CINDEX_VERSION_MAJOR 0 -#define CINDEX_VERSION_MINOR 50 +#define CINDEX_VERSION_MINOR 51 #define CINDEX_VERSION_ENCODE(major, minor) ( \ ((major) * 10000) \ @@ -2586,7 +2586,8 @@ enum CXCursorKind { CXCursor_ObjCRuntimeVisible = 435, CXCursor_ObjCBoxable = 436, CXCursor_FlagEnum = 437, - CXCursor_LastAttr = CXCursor_FlagEnum, + CXCursor_ConvergentAttr = 438, + CXCursor_LastAttr = CXCursor_ConvergentAttr, /* Preprocessing */ CXCursor_PreprocessingDirective = 500, diff --git a/clang/test/Index/attributes.c b/clang/test/Index/attributes.c index e3b2c1ab7a7d..3aedacd33fa4 100644 --- a/clang/test/Index/attributes.c +++ b/clang/test/Index/attributes.c @@ -12,6 +12,8 @@ enum __attribute((flag_enum)) FlagEnum { Foo }; +void convergent_fn() __attribute__((convergent)); + // CHECK: attributes.c:3:32: StructDecl=Test2:3:32 (Definition) Extent=[3:1 - 5:2] // CHECK: attributes.c:3:23: attribute(packed)=packed Extent=[3:23 - 3:29] // CHECK: attributes.c:4:8: FieldDecl=a:4:8 (Definition) Extent=[4:3 - 4:9] [access=public] @@ -24,3 +26,6 @@ enum __attribute((flag_enum)) FlagEnum { // CHECK: attributes.c:9:38: attribute(noduplicate)= Extent=[9:38 - 9:49] // CHECK: attributes.c:11:31: EnumDecl=FlagEnum:11:31 (Definition) Extent=[11:1 - 13:2] // CHECK: attributes.c:11:19: attribute(flag_enum)= Extent=[11:19 - 11:28] +// CHECK: attributes.c:12:3: EnumConstantDecl=Foo:12:3 (Definition) Extent=[12:3 - 12:6] +// CHECK: attributes.c:15:6: FunctionDecl=convergent_fn:15:6 Extent=[15:1 - 15:49] +// CHECK: attributes.c:15:37: attribute(convergent)= Extent=[15:37 - 15:47] diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index 4287222b15e9..a931fccdf60f 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -5474,7 +5474,9 @@ CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) { case CXCursor_StaticAssert: return cxstring::createRef("StaticAssert"); case CXCursor_FriendDecl: - return cxstring::createRef("FriendDecl"); + return cxstring::createRef("FriendDecl"); + case CXCursor_ConvergentAttr: + return cxstring::createRef("attribute(convergent)"); } llvm_unreachable("Unhandled CXCursorKind"); diff --git a/clang/tools/libclang/CXCursor.cpp b/clang/tools/libclang/CXCursor.cpp index 1eeab63da673..fdd24261cb1b 100644 --- a/clang/tools/libclang/CXCursor.cpp +++ b/clang/tools/libclang/CXCursor.cpp @@ -78,6 +78,7 @@ static CXCursorKind GetCursorKind(const Attr *A) { case attr::ObjCRuntimeVisible: return CXCursor_ObjCRuntimeVisible; case attr::ObjCBoxable: return CXCursor_ObjCBoxable; case attr::FlagEnum: return CXCursor_FlagEnum; + case attr::Convergent: return CXCursor_ConvergentAttr; } return CXCursor_UnexposedAttr;