diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/parse/offsetof9.C')
-rw-r--r-- | gcc/testsuite/g++.dg/parse/offsetof9.C | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/parse/offsetof9.C b/gcc/testsuite/g++.dg/parse/offsetof9.C new file mode 100644 index 000000000..efc103837 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/offsetof9.C @@ -0,0 +1,32 @@ +/* PR c/32041 */ +/* { dg-do run } */ + +struct S +{ + int c; + struct { float f; } sa[2]; +}; + +char a[__builtin_offsetof (S, sa->f) + == __builtin_offsetof (S, sa[0].f) ? 1 : -1]; + +template <int N> +struct T +{ + int c[N]; + struct { float f; } sa[N]; + static int foo () { return __builtin_offsetof (T, sa->f); } + static int bar () { return __builtin_offsetof (T, sa[0].f); } +}; + +char b[__builtin_offsetof (T<5>, sa->f) + == __builtin_offsetof (T<5>, sa[0].f) ? 1 : -1]; + +int +main () +{ + if (T<1>::foo () != T<1>::bar ()) + __builtin_abort (); + if (T<7>::foo () != T<7>::bar ()) + __builtin_abort (); +} |