]> granicus.if.org Git - clang/commitdiff
[libclang 8/8] Add support for the flag_enum attribute
authorMichael Wu <mwu.code@gmail.com>
Fri, 3 Aug 2018 05:55:40 +0000 (05:55 +0000)
committerMichael Wu <mwu.code@gmail.com>
Fri, 3 Aug 2018 05:55:40 +0000 (05:55 +0000)
Summary:
This adds support to libclang for reading the flag_enum attribute.

This also bumps CINDEX_VERSION_MINOR for this patch series.

Reviewers: yvvan, jbcoe

Reviewed By: yvvan

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D49635

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@338820 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang-c/Index.h
test/Index/attributes.c
tools/libclang/CIndex.cpp
tools/libclang/CXCursor.cpp

index 93f6a7770f032178ffd0a8c8e2123d8e31decece..86383d13510b3cddd5d70f31a2ceae3a73166d7a 100644 (file)
@@ -32,7 +32,7 @@
  * compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable.
  */
 #define CINDEX_VERSION_MAJOR 0
-#define CINDEX_VERSION_MINOR 49
+#define CINDEX_VERSION_MINOR 50
 
 #define CINDEX_VERSION_ENCODE(major, minor) ( \
       ((major) * 10000)                       \
@@ -2585,7 +2585,8 @@ enum CXCursorKind {
   CXCursor_ObjCDesignatedInitializer     = 434,
   CXCursor_ObjCRuntimeVisible            = 435,
   CXCursor_ObjCBoxable                   = 436,
-  CXCursor_LastAttr                      = CXCursor_ObjCBoxable,
+  CXCursor_FlagEnum                      = 437,
+  CXCursor_LastAttr                      = CXCursor_FlagEnum,
 
   /* Preprocessing */
   CXCursor_PreprocessingDirective        = 500,
index 95d9c7548bd7b24f7e0c48abb8d40883a62191be..e3b2c1ab7a7d38d90dfcb6f820c7ead5739c0229 100644 (file)
@@ -8,6 +8,10 @@ void pure_fn() __attribute__((pure));
 void const_fn() __attribute__((const));
 void noduplicate_fn() __attribute__((noduplicate));
 
+enum __attribute((flag_enum)) FlagEnum {
+  Foo
+};
+
 // 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]
@@ -18,3 +22,5 @@ void noduplicate_fn() __attribute__((noduplicate));
 // CHECK: attributes.c:8:32: attribute(const)= Extent=[8:32 - 8:37]
 // CHECK: attributes.c:9:6: FunctionDecl=noduplicate_fn:9:6 Extent=[9:1 - 9:51]
 // 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]
index 41fa868b06e470a21b8bb29d8934cc047c41e0e9..001c8da2643cb2fcccffc93b5917280877a6744b 100644 (file)
@@ -5313,6 +5313,8 @@ CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) {
     return cxstring::createRef("attribute(objc_runtime_visible)");
   case CXCursor_ObjCBoxable:
     return cxstring::createRef("attribute(objc_boxable)");
+  case CXCursor_FlagEnum:
+    return cxstring::createRef("attribute(flag_enum)");
   case CXCursor_PreprocessingDirective:
     return cxstring::createRef("preprocessing directive");
   case CXCursor_MacroDefinition:
index 09321be0515e657609005835322233773e51187d..e69143cee0188a70e763c18bb2e62c648b2e6b5c 100644 (file)
@@ -78,6 +78,7 @@ static CXCursorKind GetCursorKind(const Attr *A) {
     case attr::ObjCDesignatedInitializer: return CXCursor_ObjCDesignatedInitializer;
     case attr::ObjCRuntimeVisible: return CXCursor_ObjCRuntimeVisible;
     case attr::ObjCBoxable: return CXCursor_ObjCBoxable;
+    case attr::FlagEnum: return CXCursor_FlagEnum;
   }
 
   return CXCursor_UnexposedAttr;