diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-01-12 20:44:33 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-01-12 20:44:33 +0100 |
commit | 634b5df5d5c0ccfaa523ca0f9a737df3c0f28372 (patch) | |
tree | 7eb464794074dac1ac24e5ca0d2dc38255415b91 /gcc/testsuite/g++.dg | |
parent | 89b7d5e1898644c9bfd7012181f18cc4523e29cc (diff) | |
download | gcc-634b5df5d5c0ccfaa523ca0f9a737df3c0f28372.zip gcc-634b5df5d5c0ccfaa523ca0f9a737df3c0f28372.tar.gz gcc-634b5df5d5c0ccfaa523ca0f9a737df3c0f28372.tar.bz2 |
re PR c/32041 (offsetof buglet)
PR c/32041
* c-parser.c (c_parser_postfix_expression): Allow `->' in
offsetof member-designator, handle it as `[0].'.
* parser.c (cp_parser_builtin_offsetof): Allow `->' in
offsetof member-designator, handle it as `[0].'.
* gcc.dg/pr32041.c: New test.
* g++.dg/parse/offsetof9.C: New test.
From-SVN: r143305
Diffstat (limited to 'gcc/testsuite/g++.dg')
-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 0000000..efc1038 --- /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 (); +} |