aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-01-26 04:08:39 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2006-01-26 04:08:39 +0000
commitefe5e271097ac8d761b396ab8f36628044c8381c (patch)
tree626d3274fb4c1b042b35b73718819d1d3e244bdb
parentee45f67911c04907fd0349670fa412ed1089412b (diff)
downloadgcc-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/ChangeLog16
-rw-r--r--gcc/testsuite/g++.dg/compat/struct-layout-1.exp3
-rw-r--r--gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c16
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-layout-1.exp3
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c16
-rw-r--r--gcc/testsuite/lib/target-supports.exp39
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
+}
+