diff options
author | Hal Finkel <hfinkel@anl.gov> | 2014-09-26 05:04:30 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2014-09-26 05:04:30 +0000 |
commit | ee90a223ead9d1389e0538401e8c88cffa4e7507 (patch) | |
tree | 69f450c880a58dd8131d04463afd90fd666470d0 /clang/test/Sema/builtin-assume-aligned.c | |
parent | ec44e4d05382e668ac84467a1ed99f398cd4a170 (diff) | |
download | bcm5719-llvm-ee90a223ead9d1389e0538401e8c88cffa4e7507.tar.gz bcm5719-llvm-ee90a223ead9d1389e0538401e8c88cffa4e7507.zip |
Support the assume_aligned function attribute
In addition to __builtin_assume_aligned, GCC also supports an assume_aligned
attribute which specifies the alignment (and optional offset) of a function's
return value. Here we implement support for the assume_aligned attribute by making
use of the @llvm.assume intrinsic.
llvm-svn: 218500
Diffstat (limited to 'clang/test/Sema/builtin-assume-aligned.c')
-rw-r--r-- | clang/test/Sema/builtin-assume-aligned.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/test/Sema/builtin-assume-aligned.c b/clang/test/Sema/builtin-assume-aligned.c index e8c172d2265..33c1b74488e 100644 --- a/clang/test/Sema/builtin-assume-aligned.c +++ b/clang/test/Sema/builtin-assume-aligned.c @@ -43,3 +43,18 @@ int test8(int *a, int j) { return a[0]; } +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 + +int j __attribute__((assume_aligned(8))); // expected-warning {{'assume_aligned' attribute only applies to functions and methods}} +void *test_no_fn_proto() __attribute__((assume_aligned(32))); // no-warning +void *test_with_fn_proto(void) __attribute__((assume_aligned(128))); // no-warning + +void *test_no_fn_proto() __attribute__((assume_aligned(31))); // expected-error {{requested alignment is not a power of 2}} +void *test_no_fn_proto() __attribute__((assume_aligned(32, 73))); // no-warning + +void *test_no_fn_proto() __attribute__((assume_aligned)); // expected-error {{'assume_aligned' attribute takes at least 1 argument}} +void *test_no_fn_proto() __attribute__((assume_aligned())); // expected-error {{'assume_aligned' attribute takes at least 1 argument}} +void *test_no_fn_proto() __attribute__((assume_aligned(32, 45, 37))); // expected-error {{'assume_aligned' attribute takes no more than 2 arguments}} + |