mirror of https://github.com/microsoft/clang.git
libclang: expose dllexport, dllimport attributes
These attributes were previously unexposed. Expose them through the libclang interfaces. Add tests that cover both the MSVC spelling and the GNU spelling. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@255273 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6988851137
commit
be1340d2b9
|
@ -1102,6 +1102,9 @@ CursorKind.CUDASHARED_ATTR = CursorKind(416)
|
|||
|
||||
CursorKind.VISIBILITY_ATTR = CursorKind(417)
|
||||
|
||||
CursorKind.DLLEXPORT_ATTR = CursorKind(418)
|
||||
CursorKind.DLLIMPORT_ATTR = CursorKind(419)
|
||||
|
||||
###
|
||||
# Preprocessing
|
||||
CursorKind.PREPROCESSING_DIRECTIVE = CursorKind(500)
|
||||
|
|
|
@ -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) \
|
||||
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue