Viewing file: attr-access-2.C (3.59 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* PR c++/94098 - checking ICE on attribute access redeclaration { dg-do compile } { dg-options "-Wall" } */
#define RO(...) __attribute__ ((access (read_only, __VA_ARGS__))) #define RW(...) __attribute__ ((access (read_write, __VA_ARGS__))) #define WO(...) __attribute__ ((access (write_only, __VA_ARGS__)))
typedef __INT32_TYPE__ int32_t;
int rdwr1_2_3_4 (void*, void*, void*, void*); int RW (1) rdwr1_2_3_4 (void*, void*, void*, void*); int RW (2) rdwr1_2_3_4 (void*, void*, void*, void*); int RW (3) rdwr1_2_3_4 (void*, void*, void*, void*); int RW (4) rdwr1_2_3_4 (void*, void*, void*, void*);
extern int32_t x[1];
void call_rdwrp1_2_3_4 (void) { rdwr1_2_3_4 (x, x, x, x); rdwr1_2_3_4 (x, x, x, x + 1); // { dg-warning "\\\[-Wstringop-overflow" } rdwr1_2_3_4 (x, x, x + 1, x); // { dg-warning "\\\[-Wstringop-overflow" } rdwr1_2_3_4 (x, x + 1, x, x); // { dg-warning "\\\[-Wstringop-overflow" } rdwr1_2_3_4 (x + 1, x, x, x); // { dg-warning "\\\[-Wstringop-overflow" } }
int rdwr4_3_2_1 (void*, void*, void*, void*); int RW (4) rdwr4_3_2_1 (void*, void*, void*, void*); int RW (3) rdwr4_3_2_1 (void*, void*, void*, void*); int RW (2) rdwr4_3_2_1 (void*, void*, void*, void*); int RW (1) rdwr4_3_2_1 (void*, void*, void*, void*);
void call_rdwr4_3_2_1 (void) { rdwr4_3_2_1 (x, x, x, x); rdwr4_3_2_1 (x, x, x, x + 1); // { dg-warning "\\\[-Wstringop-overflow" } rdwr4_3_2_1 (x, x, x + 1, x); // { dg-warning "\\\[-Wstringop-overflow" } rdwr4_3_2_1 (x, x + 1, x, x); // { dg-warning "\\\[-Wstringop-overflow" } rdwr4_3_2_1 (x + 1, x, x, x); // { dg-warning "\\\[-Wstringop-overflow" } }
int rdwrall (void*, void*, void*, void*); int RW (1) rdwrall (void*, void*, void*, void*); int RW (1) RW (2) rdwrall (void*, void*, void*, void*); int RW (1) RW (2) RW (3) rdwrall (void*, void*, void*, void*); int RW (1) RW (2) RW (3) RW (4) rdwrall (void*, void*, void*, void*);
void call_rdwrall (void) { rdwrall (x, x, x, x); rdwrall (x, x, x, x + 1); // { dg-warning "\\\[-Wstringop-overflow" } rdwrall (x, x, x + 1, x); // { dg-warning "\\\[-Wstringop-overflow" } rdwrall (x, x + 1, x, x); // { dg-warning "\\\[-Wstringop-overflow" } rdwrall (x + 1, x, x, x); // { dg-warning "\\\[-Wstringop-overflow" } }
// Verify the attribute is a part of the function's type. typedef __typeof__ (rdwrall) F;
void call_fnptr_typeof (F *f) { f (x, x, x, x); f (x, x, x, x + 1); // { dg-warning "\\\[-Wstringop-overflow" } f (x, x, x + 1, x); // { dg-warning "\\\[-Wstringop-overflow" } f (x, x + 1, x, x); // { dg-warning "\\\[-Wstringop-overflow" } f (x + 1, x, x, x); // { dg-warning "\\\[-Wstringop-overflow" } }
// Verify the attribute is effective on a typedef. typedef void FWRall (void*, void*, void*, void*); typedef RW (1) void FWRall (void*, void*, void*, void*); typedef RW (2) void FWRall (void*, void*, void*, void*); typedef RW (3) void FWRall (void*, void*, void*, void*); typedef RW (4) void FWRall (void*, void*, void*, void*);
void call_fnptr (FWRall *f) { f (x, x, x, x); f (x, x, x, x + 1); // { dg-warning "\\\[-Wstringop-overflow" "pr94171" { xfail *-*-* } } f (x, x, x + 1, x); // { dg-warning "\\\[-Wstringop-overflow" "pr94171" { xfail *-*-* } } f (x, x + 1, x, x); // { dg-warning "\\\[-Wstringop-overflow" "pr94171" { xfail *-*-* } } f (x + 1, x, x, x); // { dg-warning "\\\[-Wstringop-overflow" "pr94171" { xfail *-*-* } } }
|