struct-layout-1.exp: Pass -e to generator program on short-enum targets.
authorPaul Brook <paul@codesourcery.com>
Thu, 26 Jan 2006 04:08:39 +0000 (04:08 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Thu, 26 Jan 2006 04:08:39 +0000 (04:08 +0000)
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

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/compat/struct-layout-1.exp
gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c
gcc/testsuite/gcc.dg/compat/struct-layout-1.exp
gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c
gcc/testsuite/lib/target-supports.exp

index be7e9a18a938d20faf7f6f390a340ee57df4438a..dde3de869c8ff6e2a09f6f56905e8a4184238c0a 100644 (file)
@@ -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
index e0a13f7d100a1f7717f5b5bac034b51ab2471bba..b9f63295301260e10ce80fabf5f2042a8793327a 100644 (file)
@@ -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 {
index a2aba71ba8e6019fd7678a816ff1fbe31144f437..4234e9f3dc36dec1b5e8585c7cd4ec5eef36a640 100644 (file)
@@ -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;
     }
index 46fdae6b2c8fc16423728d746ffb2451b7238da2..940b637ed84f7d82f46ede6243b373e58ecd0652 100644 (file)
@@ -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 {
index 6af27d04adf21890353f0833ae79d7a0d1d54753..59b777f1e038afc99a81e8926ec2bda26e866bf2 100644 (file)
@@ -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;
     }
index 851218fb0184eee9da02de251410aef8eb5d23f2..5fee9eac2695e13de422da4dda5422e12d9741b2 100644 (file)
@@ -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
+}
+