diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/ext/lvalue-cast-1.C')
-rw-r--r-- | gcc/testsuite/g++.dg/ext/lvalue-cast-1.C | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/ext/lvalue-cast-1.C b/gcc/testsuite/g++.dg/ext/lvalue-cast-1.C new file mode 100644 index 00000000000..ebee754f069 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/lvalue-cast-1.C @@ -0,0 +1,34 @@ +/* APPLE LOCAL file non lvalue assign */ +/* { dg-do run } */ +/* { dg-options "-fnon-lvalue-assign" } */ + +#include <stdlib.h> +#define CHECK_IF(expr) if (!(expr)) abort () + +static int global; + +void f(int &) { global = 35; } +void f(const int &) { global = 78; } + +long long_arr[2]; + +int main(void) { + + char *p; + + (long *)p = long_arr; /* { dg-warning "target of assignment not really an lvalue" } */ + ((long *)p)++; /* { dg-warning "target of assignment not really an lvalue" } */ + *(long *)p = -1; + + *p = -2; + CHECK_IF(p[-1] == 0 && p[0] == -2 && p[1] == -1); + + (long *)p += 2; /* { dg-warning "target of assignment not really an lvalue" } */ + (long *)p -= 2; /* { dg-warning "target of assignment not really an lvalue" } */ + + long x = 0; + f((int)x); + CHECK_IF(global == 78); + + return 0; +} |