diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2bd0541e453b362b1215b19dde9ac9eef1e33112..e71e05ee6d0f02143f51c6e62976dba4564ef8c4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2005-12-13 Jakub Jelinek <jakub@redhat.com> + + PR c++/25331 + * gcc.dg/compat/struct-layout-1_generate.c (subfield): Don't + put atal* and atpaal* attributes on array elements. + (generate_fields): Revert 2005-10-07 and 2005-10-11 changes. + * g++.dg/compat/struct-layout-1_generate.c (subfield): Don't + put atal* and atpaal* attributes on array elements. + (generate_fields): Don't prevent atal* attribute on ETYPE_ARRAY. + 2005-12-13 Carlos O'Donell <carlos@codesourcery.com> * gcc.dg/single-precision-constant.c: New test. diff --git a/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c b/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c index 2951638de8094b1d2bec017ac358bf81123873d3..da915c7cb8f6c1e69e46baada900354ad64fe22a 100644 --- a/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c +++ b/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c @@ -609,6 +609,13 @@ subfield (struct entry *e, char *letter) snprintf (buf, 20, "%c[]", *letter); else snprintf (buf, 20, "%c[%d]", *letter, e[0].arr_len); + /* If this is an array type, do not put aligned attributes on + elements. Aligning elements to a value greater than their + size will result in a compiler error. */ + if (type == 1 + && ((strncmp (e[0].attrib, "atal", 4) == 0) + || strncmp (e[0].attrib, "atpaal", 6) == 0)) + type = 2; } else { @@ -665,18 +672,32 @@ subfield (struct entry *e, char *letter) } ++*letter; if (e[0].attrib) - switch (generate_random () % 3) - { - case 0: - fprintf (outfile, "%s %s %s;", e[0].attrib, e[0].type->name, buf); - break; - case 1: - fprintf (outfile, "%s %s %s;", e[0].type->name, e[0].attrib, buf); - break; - case 2: - fprintf (outfile, "%s %s %s;", e[0].type->name, buf, e[0].attrib); - break; - } + { + /* If this is an array type, do not put aligned attributes on + elements. Aligning elements to a value greater than their + size will result in a compiler error. */ + if (e[0].etype == ETYPE_ARRAY + && ((strncmp (e[0].attrib, "atal", 4) == 0) + || strncmp (e[0].attrib, "atpaal", 6) == 0)) + type = 2; + else + type = generate_random () % 3; + switch (type) + { + case 0: + fprintf (outfile, "%s %s %s;", e[0].attrib, e[0].type->name, + buf); + break; + case 1: + fprintf (outfile, "%s %s %s;", e[0].type->name, e[0].attrib, + buf); + break; + case 2: + fprintf (outfile, "%s %s %s;", e[0].type->name, buf, + e[0].attrib); + break; + } + } else fprintf (outfile, "%s %s;", e[0].type->name, buf); return 1; @@ -1297,15 +1318,6 @@ generate_fields (enum FEATURE features, struct entry *e, struct entry *parent, || (e[n].type >= &aligned_bitfld_types[0] && e[n].type < &aligned_bitfld_types[n_aligned_bitfld_types]))) e[n].attrib = NULL; - - /* If this is an array type, do not put aligned attributes on - elements. Aligning elements to a value greater than their - size will result in a compiler error. */ - - if ((e[n].etype == ETYPE_ARRAY) - && e[n].attrib != NULL - && (strncmp (e[n].attrib, "atal", 4) == 0)) - e[n].attrib = NULL; } } } diff --git a/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c b/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c index 2f69575cb72e8198e94c5bf887f03e9a8d1456a8..cca2954c448100ec105fa4abf61850737afee6c3 100644 --- a/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c +++ b/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c @@ -789,6 +789,13 @@ subfield (struct entry *e, char *letter) snprintf (buf, 20, "%c[]", *letter); else snprintf (buf, 20, "%c[%d]", *letter, e[0].arr_len); + /* If this is an array type, do not put aligned attributes on + elements. Aligning elements to a value greater than their + size will result in a compiler error. */ + if (type == 1 + && ((strncmp (e[0].attrib, "atal", 4) == 0) + || strncmp (e[0].attrib, "atpaal", 6) == 0)) + type = 2; } else { @@ -845,18 +852,32 @@ subfield (struct entry *e, char *letter) } ++*letter; if (e[0].attrib) - switch (generate_random () % 3) - { - case 0: - fprintf (outfile, "%s %s %s;", e[0].attrib, e[0].type->name, buf); - break; - case 1: - fprintf (outfile, "%s %s %s;", e[0].type->name, e[0].attrib, buf); - break; - case 2: - fprintf (outfile, "%s %s %s;", e[0].type->name, buf, e[0].attrib); - break; - } + { + /* If this is an array type, do not put aligned attributes on + elements. Aligning elements to a value greater than their + size will result in a compiler error. */ + if (e[0].etype == ETYPE_ARRAY + && ((strncmp (e[0].attrib, "atal", 4) == 0) + || strncmp (e[0].attrib, "atpaal", 6) == 0)) + type = 2; + else + type = generate_random () % 3; + switch (type) + { + case 0: + fprintf (outfile, "%s %s %s;", e[0].attrib, e[0].type->name, + buf); + break; + case 1: + fprintf (outfile, "%s %s %s;", e[0].type->name, e[0].attrib, + buf); + break; + case 2: + fprintf (outfile, "%s %s %s;", e[0].type->name, buf, + e[0].attrib); + break; + } + } else fprintf (outfile, "%s %s;", e[0].type->name, buf); return 1; @@ -1746,15 +1767,6 @@ generate_fields (enum FEATURE features, struct entry *e, struct entry *parent, || (e[n].type >= &aligned_bitfld_types[0] && e[n].type < &aligned_bitfld_types[n_aligned_bitfld_types]))) e[n].attrib = NULL; - - /* If this is an array type, do not put aligned attributes on - elements. Aligning elements to a value greater than their - size will result in a compiler error. */ - - if ((e[n].etype == ETYPE_ARRAY) - && e[n].attrib != NULL - && (strncmp (e[n].attrib, "atal", 4) == 0)) - e[n].attrib = NULL; } } }