blob: f5cfad161a5850232191a760ed5343e50b88d266 [file] [log] [blame]
/* { dg-do compile }
* { dg-options "-std=c23 -O2" }
*/
/* The structs are incompatible so can be assumed not to
* alias, but this is not exploited. So do not check for
* this below but check the error about incompatibility. */
struct bar { int x; int f[]; };
int test_bar3(struct bar* a, void* b)
{
a->x = 1;
struct bar { int x; int f[1]; }* p = b;
struct bar* q = a; /* { dg-error "incompatible" } */
p->x = 2;
return a->x;
}
int main()
{
struct bar z;
// allow both results here
int r = test_bar3(&z, &z);
// UB but could be expected to return 1 with optimization
// exploiting the UB (not done at time of writing) or 2
return r;
}