aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/ext/lvalue-cast-1.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/ext/lvalue-cast-1.C')
-rw-r--r--gcc/testsuite/g++.dg/ext/lvalue-cast-1.C34
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;
+}