diff options
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/attrib5.C | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/struct1.C | 14 |
3 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ccabe18..fdf1c38 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-04-12 Richard Sandiford <rsandifo@redhat.com> + + * g++.dg/ext/attrib5.C, + * g++.dg/lookup/struct1.C: New tests. + 2002-04-11 Jakub Jelinek <jakub@redhat.com> * gcc.dg/20020411-1.c: New test. diff --git a/gcc/testsuite/g++.dg/ext/attrib5.C b/gcc/testsuite/g++.dg/ext/attrib5.C new file mode 100644 index 0000000..f67510d --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attrib5.C @@ -0,0 +1,21 @@ +// There were two related problems here, depending on the vintage. At +// one time: +// +// typedef struct A { ... } A __attribute__ ((aligned (16))); +// +// would cause original_types to go into an infinite loop. At other +// times, the attributes applied to an explicit typedef would be lost +// (check_b3 would have a negative size). + +// First check that the declaration is accepted and has an effect. +typedef struct A { int i; } A __attribute__ ((aligned (16))); +int check_A[__alignof__ (A) >= 16 ? 1 : -1]; + +// Check that the alignment is only applied to the typedef. +struct B { int i; }; +struct B b1; +typedef struct B B __attribute__((aligned (16))); +struct B b2; +B b3; +int check_b1[__alignof__ (b1) == __alignof__ (b2) ? 1 : -1]; +int check_b3[__alignof__ (b3) >= 16 ? 1 : -1]; diff --git a/gcc/testsuite/g++.dg/lookup/struct1.C b/gcc/testsuite/g++.dg/lookup/struct1.C new file mode 100644 index 0000000..c8bc056 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/struct1.C @@ -0,0 +1,14 @@ +// Various struct lookup tests. We didn't used to complain about +// the definition of C. + +struct A; +typedef struct A B; // { dg-error "previous declaration" } +struct B; // { dg-error "conflicting types" } + +typedef struct { int i; } C; // { dg-error "previous declaration" } +struct C; // { dg-error "conflicting types" } + +struct D; +typedef struct D D; +typedef struct D { int i; } D; +typedef struct D D; |