summaryrefslogtreecommitdiffstats
path: root/clang/test/Sema/bpf-attr-preserve-access-index.c
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/Sema/bpf-attr-preserve-access-index.c')
-rw-r--r--clang/test/Sema/bpf-attr-preserve-access-index.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/clang/test/Sema/bpf-attr-preserve-access-index.c b/clang/test/Sema/bpf-attr-preserve-access-index.c
new file mode 100644
index 00000000000..472f778b6b5
--- /dev/null
+++ b/clang/test/Sema/bpf-attr-preserve-access-index.c
@@ -0,0 +1,48 @@
+// RUN: %clang_cc1 -x c -triple bpf-pc-linux-gnu -dwarf-version=4 -fsyntax-only -verify %s
+
+#define __reloc__ __attribute__((preserve_access_index))
+#define __err_reloc__ __attribute__((preserve_access_index(0)))
+
+struct t1 {
+ int a;
+ int b[4];
+ int c:1;
+} __reloc__;
+
+union t2 {
+ int a;
+ int b[4];
+ int c:1;
+} __reloc__;
+
+struct t3 {
+ int a;
+} __err_reloc__; // expected-error {{'preserve_access_index' attribute takes no arguments}}
+
+struct t4 {
+ union {
+ int a;
+ char b[5];
+ };
+ struct {
+ int c:1;
+ } __reloc__;
+ int d;
+} __reloc__;
+
+struct __reloc__ p;
+struct __reloc__ q;
+struct p {
+ int a;
+};
+
+int a __reloc__; // expected-error {{preserve_addess_index attribute only applies to struct or union type}}
+struct s *p __reloc__; // expected-error {{preserve_addess_index attribute only applies to struct or union type}}
+
+void invalid1(const int __reloc__ *arg) {} // expected-error {{preserve_addess_index attribute only applies to struct or union type}}
+void invalid2() { const int __reloc__ *arg; } // expected-error {{preserve_addess_index attribute only applies to struct or union type}}
+int valid3(struct t4 *arg) { return arg->a + arg->b[3] + arg->c + arg->d; }
+int valid4(void *arg) {
+ struct local_t { int a; int b; } __reloc__;
+ return ((struct local_t *)arg)->b;
+}
OpenPOWER on IntegriCloud