summaryrefslogtreecommitdiffstats
path: root/clang/test/Sema/builtin-assume-aligned.c
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2014-09-26 05:04:30 +0000
committerHal Finkel <hfinkel@anl.gov>2014-09-26 05:04:30 +0000
commitee90a223ead9d1389e0538401e8c88cffa4e7507 (patch)
tree69f450c880a58dd8131d04463afd90fd666470d0 /clang/test/Sema/builtin-assume-aligned.c
parentec44e4d05382e668ac84467a1ed99f398cd4a170 (diff)
downloadbcm5719-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.c15
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}}
+
OpenPOWER on IntegriCloud