Skip to content

Commit

Permalink
libclang: expose dllexport, dllimport attributes
Browse files Browse the repository at this point in the history
These attributes were previously unexposed.  Expose them through the libclang
interfaces.  Add tests that cover both the MSVC spelling and the GNU spelling.

llvm-svn: 255273
  • Loading branch information
compnerd committed Dec 10, 2015
1 parent a8547d3 commit 8aa0b80
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 2 deletions.
3 changes: 3 additions & 0 deletions clang/bindings/python/clang/cindex.py
Original file line number Diff line number Diff line change
Expand Up @@ -1102,6 +1102,9 @@ def __repr__(self):

CursorKind.VISIBILITY_ATTR = CursorKind(417)

CursorKind.DLLEXPORT_ATTR = CursorKind(418)
CursorKind.DLLIMPORT_ATTR = CursorKind(419)

###
# Preprocessing
CursorKind.PREPROCESSING_DIRECTIVE = CursorKind(500)
Expand Down
6 changes: 4 additions & 2 deletions clang/include/clang-c/Index.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
* compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable.
*/
#define CINDEX_VERSION_MAJOR 0
#define CINDEX_VERSION_MINOR 31
#define CINDEX_VERSION_MINOR 32

#define CINDEX_VERSION_ENCODE(major, minor) ( \
((major) * 10000) \
Expand Down Expand Up @@ -2297,7 +2297,9 @@ enum CXCursorKind {
CXCursor_CUDAHostAttr = 415,
CXCursor_CUDASharedAttr = 416,
CXCursor_VisibilityAttr = 417,
CXCursor_LastAttr = CXCursor_VisibilityAttr,
CXCursor_DLLExport = 418,
CXCursor_DLLImport = 419,
CXCursor_LastAttr = CXCursor_DLLImport,

/* Preprocessing */
CXCursor_PreprocessingDirective = 500,
Expand Down
16 changes: 16 additions & 0 deletions clang/test/Index/index-attrs.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// RUN: c-index-test -index-file -check-prefix CHECK %s -target armv7-windows-gnu -fdeclspec

void __declspec(dllexport) export_function(void) {}
// CHECK: [indexDeclaraton]: kind: function | name: export_function | {{.*}} | lang: C
// CHECK: <attribute>: attribute(dllexport)
void __attribute__((dllexport)) export_gnu_attribute(void) {}
// CHECK: [indexDeclaration] kind: function | name: export_gnu_attribute | {{.*}} | lang: C
// CHECK: <attribute>: attribute(dllexport)

void __declspec(dllimport) import_function(void);
// CHECK: [indexDeclaration] kind: function | name: import_function | {{.*}} | lang: C
// CHECK: <attribute>: attribute(dllimport)
void __attribute__((dllimport)) import_gnu_attribute(void);
// CHECK: [indexDeclaration] kind: function | name: import_gnu_function | {{.*}} | lang: C
// CHECK: <attribute>: attribute(dllimport)

50 changes: 50 additions & 0 deletions clang/test/Index/index-attrs.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// RUN: c-index-test -index-file -check-prefix CHECK %s -target armv7-windows-gnu -fdeclspec

struct __declspec(dllexport) export_s {
void m();
};
// CHECK: [indexDeclaration]: kind: struct | name: export_s | {{.*}} | lang: C++
// CHECK: <attribute>: attribute(dllexport)
// CHECK: [indexDeclaration]: kind: c++-instance-method | name: m | {{.*}} | lang: C++
// CHECK: <attribute>: attribute(dllexport)

struct __declspec(dllimport) import_s {
void m();
};
// CHECK: [indexDeclaration]: kind: struct | name: import_s | {{.*}} | lang: C++
// CHECK: <attribute>: attribute(dllimport)
// CHECK: [indexDeclaration]: kind: c++-instance-method | name: m | {{.*}} | lang: C++
// CHECK: <attribute>: attribute(dllimport)

class __attribute__((dllexport)) export_gnu_s {
void m();
};
// CHECK: [indexDeclaration]: kind: struct | name: export_gnu_s | {{.*}} | lang: C++
// CHECK: <attribute>: attribute(dllexport)
// CHECK: [indexDeclaration]: kind: c++-instance-method | name: m | {{.*}} | lang: C++
// CHECK: <attribute>: attribute(dllexport)

class __attribute__((dllimport)) import_gnu_s {
void m();
};
// CHECK: [indexDeclaration]: kind: struct | name: import_gnu_s | {{.*}} | lang: C++
// CHECK: <attribute>: attribute(dllimport)
// CHECK: [indexDeclaration]: kind: c++-instance-method | name: m | {{.*}} | lang: C++
// CHECK: <attribute>: attribute(dllimport)

extern "C" void __declspec(dllexport) export_function(void) {}
// CHECK: [indexDeclaraton]: kind: function | name: export_function | {{.*}} | lang: C
// CHECK: <attribute>: attribute(dllexport)
extern "C" void __attribute__((dllexport)) export_gnu_function(void) {}
// CHECK: [indexDeclaraton]: kind: function | name: export_gnu_function | {{.*}} | lang: C
// CHECK: <attribute>: attribute(dllexport)

extern "C" {
void __declspec(dllimport) import_function(void);
// CHECK: [indexDeclaration] kind: function | name: import_function | {{.*}} | lang: C
// CHECK: <attribute>: attribute(dllimport)
void __attribute__((dllimport)) import_gnu_function(void);
// CHECK: [indexDeclaration] kind: function | name: import_gnu_function | {{.*}} | lang: C
// CHECK: <attribute>: attribute(dllimport)
}

4 changes: 4 additions & 0 deletions clang/tools/libclang/CIndex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4389,6 +4389,10 @@ CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) {
return cxstring::createRef("attribute(shared)");
case CXCursor_VisibilityAttr:
return cxstring::createRef("attribute(visibility)");
case CXCursor_DLLExport:
return cxstring::createRef("attribute(dllexport)");
case CXCursor_DLLImport:
return cxstring::createRef("attribute(dllimport)");
case CXCursor_PreprocessingDirective:
return cxstring::createRef("preprocessing directive");
case CXCursor_MacroDefinition:
Expand Down
2 changes: 2 additions & 0 deletions clang/tools/libclang/CXCursor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ static CXCursorKind GetCursorKind(const Attr *A) {
case attr::CUDAHost: return CXCursor_CUDAHostAttr;
case attr::CUDAShared: return CXCursor_CUDASharedAttr;
case attr::Visibility: return CXCursor_VisibilityAttr;
case attr::DLLExport: return CXCursor_DLLExport;
case attr::DLLImport: return CXCursor_DLLImport;
}

return CXCursor_UnexposedAttr;
Expand Down

0 comments on commit 8aa0b80

Please sign in to comment.