[libclang] Expose aligned() attribute.
Summary: This is useful because otherwise there's no easy way to distinguish #pragma packed(N) from attribute(packed, aligned(N)) that isn't looking at field offsets (since pragma packed() also creates a packed attribute). Reviewers: Anastasia, arphaman, serge-sans-paille Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D59299 llvm-svn: 356062
This commit is contained in:
parent
7d546aba6c
commit
cd74127d28
|
@ -1345,6 +1345,7 @@ CursorKind.DLLIMPORT_ATTR = CursorKind(419)
|
|||
CursorKind.CONVERGENT_ATTR = CursorKind(438)
|
||||
CursorKind.WARN_UNUSED_ATTR = CursorKind(439)
|
||||
CursorKind.WARN_UNUSED_RESULT_ATTR = CursorKind(440)
|
||||
CursorKind.ALIGNED_ATTR = CursorKind(441)
|
||||
|
||||
###
|
||||
# Preprocessing
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
* compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable.
|
||||
*/
|
||||
#define CINDEX_VERSION_MAJOR 0
|
||||
#define CINDEX_VERSION_MINOR 53
|
||||
#define CINDEX_VERSION_MINOR 54
|
||||
|
||||
#define CINDEX_VERSION_ENCODE(major, minor) ( \
|
||||
((major) * 10000) \
|
||||
|
@ -2589,7 +2589,8 @@ enum CXCursorKind {
|
|||
CXCursor_ConvergentAttr = 438,
|
||||
CXCursor_WarnUnusedAttr = 439,
|
||||
CXCursor_WarnUnusedResultAttr = 440,
|
||||
CXCursor_LastAttr = CXCursor_WarnUnusedResultAttr,
|
||||
CXCursor_AlignedAttr = 441,
|
||||
CXCursor_LastAttr = CXCursor_AlignedAttr,
|
||||
|
||||
/* Preprocessing */
|
||||
CXCursor_PreprocessingDirective = 500,
|
||||
|
|
|
@ -20,6 +20,14 @@ struct __attribute__((warn_unused)) WarnUnused {
|
|||
int b;
|
||||
};
|
||||
|
||||
struct __attribute__((aligned(64))) Aligned1 {
|
||||
int c;
|
||||
};
|
||||
|
||||
struct Aligned2 {
|
||||
int c;
|
||||
} __attribute__((aligned(64)));
|
||||
|
||||
// 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]
|
||||
|
@ -39,3 +47,7 @@ struct __attribute__((warn_unused)) WarnUnused {
|
|||
// CHECK: attributes.c:17:44: attribute(warn_unused_result)= Extent=[17:44 - 17:62]
|
||||
// CHECK: attributes.c:19:37: StructDecl=WarnUnused:19:37 (Definition) Extent=[19:1 - 21:2]
|
||||
// CHECK: attributes.c:19:23: attribute(warn_unused)= Extent=[19:23 - 19:34]
|
||||
// CHECK: attributes.c:23:37: StructDecl=Aligned1:23:37 (Definition) Extent=[23:1 - 25:2]
|
||||
// CHECK: attributes.c:23:23: attribute(aligned)= Extent=[23:23 - 23:34]
|
||||
// CHECK: attributes.c:27:8: StructDecl=Aligned2:27:8 (Definition) Extent=[27:1 - 29:2]
|
||||
// CHECK: attributes.c:29:18: attribute(aligned)= Extent=[29:18 - 29:29]
|
||||
|
|
|
@ -5484,6 +5484,8 @@ CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) {
|
|||
return cxstring::createRef("attribute(warn_unused)");
|
||||
case CXCursor_WarnUnusedResultAttr:
|
||||
return cxstring::createRef("attribute(warn_unused_result)");
|
||||
case CXCursor_AlignedAttr:
|
||||
return cxstring::createRef("attribute(aligned)");
|
||||
}
|
||||
|
||||
llvm_unreachable("Unhandled CXCursorKind");
|
||||
|
|
|
@ -81,6 +81,7 @@ static CXCursorKind GetCursorKind(const Attr *A) {
|
|||
case attr::Convergent: return CXCursor_ConvergentAttr;
|
||||
case attr::WarnUnused: return CXCursor_WarnUnusedAttr;
|
||||
case attr::WarnUnusedResult: return CXCursor_WarnUnusedResultAttr;
|
||||
case attr::Aligned: return CXCursor_AlignedAttr;
|
||||
}
|
||||
|
||||
return CXCursor_UnexposedAttr;
|
||||
|
|
Loading…
Reference in New Issue