diff options
Diffstat (limited to 'test/Sema/builtin-preserve-access-index.c')
-rw-r--r-- | test/Sema/builtin-preserve-access-index.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/test/Sema/builtin-preserve-access-index.c b/test/Sema/builtin-preserve-access-index.c index c10ceb5145..71da8457fa 100644 --- a/test/Sema/builtin-preserve-access-index.c +++ b/test/Sema/builtin-preserve-access-index.c @@ -4,10 +4,28 @@ const void *invalid1(const int *arg) { return __builtin_preserve_access_index(&arg[1], 1); // expected-error {{too many arguments to function call, expected 1, have 2}} } -void *invalid2(const int *arg) { - return __builtin_preserve_access_index(&arg[1]); // expected-warning {{returning 'const void *' from a function with result type 'void *' discards qualifiers}} +const void *invalid2(const int *arg) { + return __builtin_preserve_access_index(1); // expected-error {{__builtin_preserve_access_index argument must a pointer type instead of 'int'}} } -const void *invalid3(const int *arg) { - return __builtin_preserve_access_index(1); // expected-warning {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const void *'}} +void *invalid3(const int *arg) { + return __builtin_preserve_access_index(&arg[1]); // expected-warning {{returning 'const int *' from a function with result type 'void *' discards qualifiers}} +} + +const void *invalid4(volatile const int *arg) { + return __builtin_preserve_access_index(arg); // expected-warning {{returning 'const volatile int *' from a function with result type 'const void *' discards qualifiers}} +} + +int *valid5(int *arg) { + return __builtin_preserve_access_index(arg); +} + +int valid6(const volatile int *arg) { + return *__builtin_preserve_access_index(arg); +} + +struct s { int a; int b; }; + +int valid7(struct s *arg) { + return *__builtin_preserve_access_index(&arg->b); } |