/* 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; }