forked from OSchip/llvm-project
[Sema] Try 2: Sanity-check alignment requested via `__attribute__((assume_aligned(imm)))`
Summary: For `__builtin_assume_aligned()`, we do validate that the alignment is not greater than `536870912` (D68824), but we don't do that for `__attribute__((assume_aligned(N)))` attribute. I suspect we should. This was initially committed ina4cfb15d15
but reverted in210f0882c9
due to suspicious bot failures. Reviewers: erichkeane, aaron.ballman, hfinkel, rsmith, jdoerfert Reviewed By: erichkeane Subscribers: cfe-commits, llvm-commits Tags: #llvm, #clang Differential Revision: https://reviews.llvm.org/D72994
This commit is contained in:
parent
5cee34013c
commit
0a002f679b
|
@ -1625,6 +1625,12 @@ void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E,
|
|||
<< E->getSourceRange();
|
||||
return;
|
||||
}
|
||||
|
||||
// Alignment calculations can wrap around if it's greater than 2**29.
|
||||
unsigned MaximumAlignment = 536870912;
|
||||
if (I > MaximumAlignment)
|
||||
Diag(CI.getLoc(), diag::warn_assume_aligned_too_great)
|
||||
<< CI.getRange() << MaximumAlignment;
|
||||
}
|
||||
|
||||
if (OE) {
|
||||
|
|
|
@ -46,6 +46,7 @@ int test8(int *a, int j) {
|
|||
void test_void_assume_aligned(void) __attribute__((assume_aligned(32))); // expected-warning {{'assume_aligned' attribute only applies to return values that are pointers}}
|
||||
int test_int_assume_aligned(void) __attribute__((assume_aligned(16))); // expected-warning {{'assume_aligned' attribute only applies to return values that are pointers}}
|
||||
void *test_ptr_assume_aligned(void) __attribute__((assume_aligned(64))); // no-warning
|
||||
void *test_ptr_assume_aligned(void) __attribute__((assume_aligned(1073741824))); // expected-warning {{requested alignment must be 536870912 bytes or smaller; maximum alignment assumed}}
|
||||
|
||||
int j __attribute__((assume_aligned(8))); // expected-warning {{'assume_aligned' attribute only applies to Objective-C methods and functions}}
|
||||
void *test_no_fn_proto() __attribute__((assume_aligned(32))); // no-warning
|
||||
|
|
Loading…
Reference in New Issue