From d82fdc245884fbe516ef0ca319561b9232235dfb Mon Sep 17 00:00:00 2001 From: pbrook Date: Thu, 26 Jan 2006 04:08:39 +0000 Subject: [PATCH] 2006-01-26 Paul Brook * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110247 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 16 +++++++++ gcc/testsuite/g++.dg/compat/struct-layout-1.exp | 3 ++ .../g++.dg/compat/struct-layout-1_generate.c | 16 ++++++--- gcc/testsuite/gcc.dg/compat/struct-layout-1.exp | 3 ++ .../gcc.dg/compat/struct-layout-1_generate.c | 16 ++++++--- 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 be7e9a18a93..dde3de869c8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,19 @@ +2006-01-26 Paul Brook + + * 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 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 e0a13f7d100..b9f63295301 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 a2aba71ba8e..4234e9f3dc3 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 46fdae6b2c8..940b637ed84 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 6af27d04adf..59b777f1e03 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 851218fb018..5fee9eac269 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 +} + -- 2.11.4.GIT