diff options
author | Paul Brook <paul@codesourcery.com> | 2006-01-26 04:08:39 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2006-01-26 04:08:39 +0000 |
commit | efe5e271097ac8d761b396ab8f36628044c8381c (patch) | |
tree | 626d3274fb4c1b042b35b73718819d1d3e244bdb | |
parent | ee45f67911c04907fd0349670fa412ed1089412b (diff) | |
download | gcc-efe5e271097ac8d761b396ab8f36628044c8381c.zip gcc-efe5e271097ac8d761b396ab8f36628044c8381c.tar.gz gcc-efe5e271097ac8d761b396ab8f36628044c8381c.tar.bz2 |
struct-layout-1.exp: Pass -e to generator program on short-enum targets.
2006-01-26 Paul Brook <paul@codesourcery.com>
* gcc.dg/compat/struct-layout-1.exp: Pass -e to generator program
on short-enum targets.
* gcc.dg/compat/struct-layout-1_generate.c (short_enums): New
variable.
(generate_fields): Use short_enums.
(main): Set short_enums. Document -e.
* g++.dg/compat/struct-layout-1.exp: Pass -e to generator program
on short-enum targets.
* g++.dg/compat/struct-layout-1_generate.c (short_enums): New
variable.
(generate_fields): Use short_enums.
(main): Set short_enums. Document -e.
* lib/target-supports.exp (check_effective_target_short_enums): New.
From-SVN: r110247
-rw-r--r-- | gcc/testsuite/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/compat/struct-layout-1.exp | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/compat/struct-layout-1.exp | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 39 |
6 files changed, 85 insertions, 8 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index be7e9a1..dde3de8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,19 @@ +2006-01-26 Paul Brook <paul@codesourcery.com> + + * gcc.dg/compat/struct-layout-1.exp: Pass -e to generator program + on short-enum targets. + * gcc.dg/compat/struct-layout-1_generate.c (short_enums): New + variable. + (generate_fields): Use short_enums. + (main): Set short_enums. Document -e. + * g++.dg/compat/struct-layout-1.exp: Pass -e to generator program + on short-enum targets. + * g++.dg/compat/struct-layout-1_generate.c (short_enums): New + variable. + (generate_fields): Use short_enums. + (main): Set short_enums. Document -e. + * lib/target-supports.exp (check_effective_target_short_enums): New. + 2006-01-26 Hans-Peter Nilsson <hp@axis.com> PR target/25947 diff --git a/gcc/testsuite/g++.dg/compat/struct-layout-1.exp b/gcc/testsuite/g++.dg/compat/struct-layout-1.exp index e0a13f7..b9f6329 100644 --- a/gcc/testsuite/g++.dg/compat/struct-layout-1.exp +++ b/gcc/testsuite/g++.dg/compat/struct-layout-1.exp @@ -138,6 +138,9 @@ if { $status == 0 } then { if [info exists env(RUN_ALL_COMPAT_TESTS) ] then { set generator_args "$generator_args -n 15000" } + if [check_effective_target_short_enums] then { + set generator_args "-e $generator_args" + } set status [remote_exec host "$generator $generator_args"] set status [lindex $status 0] if { $status == 0 } then { 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 a2aba71..4234e9f 100644 --- a/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c +++ b/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c @@ -478,7 +478,7 @@ struct types attrib_array_types[] = { #define HASH_SIZE 32749 static struct entry *hash_table[HASH_SIZE]; -static int idx, limidx, output_one; +static int idx, limidx, output_one, short_enums; static const char *destdir; static const char *srcdir; FILE *outfile; @@ -1368,10 +1368,14 @@ generate_fields (enum FEATURE features, struct entry *e, struct entry *parent, abort (); if (!mi) mi = 1; - if (mi <= 32) + if (mi > 32) + ma = 64; + else if (mi > 16 || !short_enums) ma = 32; + else if (mi > 8) + ma = 16; else - ma = 64; + ma = 8; break; default: abort (); @@ -1533,6 +1537,10 @@ main (int argc, char **argv) output_one = 1; limidx = atoi (optarg); break; + case 'e': + short_enums = 1; + i--; + break; default: fprintf (stderr, "unrecognized option %s\n", argv[i]); goto usage; @@ -1555,7 +1563,7 @@ main (int argc, char **argv) { usage: fprintf (stderr, "Usage:\n\ -%s [-s srcdir -d destdir] [-n count] [-i idx]\n\ +%s [-e] [-s srcdir -d destdir] [-n count] [-i idx]\n\ Either -s srcdir -d destdir or -i idx must be used\n", argv[0]); return 1; } diff --git a/gcc/testsuite/gcc.dg/compat/struct-layout-1.exp b/gcc/testsuite/gcc.dg/compat/struct-layout-1.exp index 46fdae6..940b637 100644 --- a/gcc/testsuite/gcc.dg/compat/struct-layout-1.exp +++ b/gcc/testsuite/gcc.dg/compat/struct-layout-1.exp @@ -99,6 +99,9 @@ if { $status == 0 } then { if [info exists env(RUN_ALL_COMPAT_TESTS) ] then { set generator_args "$generator_args -n 15000" } + if [check_effective_target_short_enums] then { + set generator_args "-e $generator_args" + } set status [remote_exec host "$generator $generator_args"] set status [lindex $status 0] if { $status == 0 } then { 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 6af27d0..59b777f 100644 --- a/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c +++ b/gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c @@ -718,7 +718,7 @@ struct entry #define HASH_SIZE 32749 static struct entry *hash_table[HASH_SIZE]; -static int idx, limidx, output_one; +static int idx, limidx, output_one, short_enums; static const char *destdir; static const char *srcdir; FILE *outfile; @@ -1759,10 +1759,14 @@ generate_fields (enum FEATURE features, struct entry *e, struct entry *parent, abort (); if (!mi) mi = 1; - if (mi <= 32) + if (mi > 32) + ma = 64; + else if (mi > 16 || !short_enums) ma = 32; + else if (mi > 8) + ma = 16; else - ma = 64; + ma = 8; break; default: abort (); @@ -1935,6 +1939,10 @@ main (int argc, char **argv) output_one = 1; limidx = atoi (optarg); break; + case 'e': + short_enums = 1; + i--; + break; default: fprintf (stderr, "unrecognized option %s\n", argv[i]); goto usage; @@ -1957,7 +1965,7 @@ main (int argc, char **argv) { usage: fprintf (stderr, "Usage:\n\ -%s [-s srcdir -d destdir] [-n count] [-i idx]\n\ +%s [-e] [-s srcdir -d destdir] [-n count] [-i idx]\n\ Either -s srcdir -d destdir or -i idx must be used\n", argv[0]); return 1; } diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 851218f..5fee9ea 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1658,3 +1658,42 @@ proc is-effective-target-keyword { arg } { } } } + +# Return 1 if target default to short enums + +proc check_effective_target_short_enums { } { + global et_short_enums_saved + global et_short_enums_target_name + + if { ![info exists et_short_enums_target_name] } { + set et_short_enums_target_name "" + } + + # If the target has changed since we set the cached value, clear it. + set current_target [current_target_name] + if { $current_target != $et_short_enums_target_name } { + verbose "check_effective_target_short_enums: `$et_short_enums_target_name'" 2 + set et_short_enums_target_name $current_target + if [info exists et_short_enums_saved] { + verbose "check_effective_target_short_enums: removing cached result" 2 + unset et_short_enums_saved + } + } + + if [info exists et_short_enums_saved] { + verbose "check_effective_target_short_enums: using cached result" 2 + } else { + verbose "check_effective_target_short_enums: compiling source" 2 + + # PCC_BITFIELD_TYPE_MATTERS isn't just about unnamed or empty + # bitfields, but let's stick to the example code from the docs. + set et_short_enums_saved \ + [string match "" [get_compiler_messages short_enums assembly { + enum foo { bar }; + int s[sizeof (enum foo) == 1 ? 1 : -1]; + } ]] + } + verbose "check_effective_target_short_enums: returning $et_short_enums_saved" 2 + return $et_short_enums_saved +} + |