]> gcc.gnu.org Git - gcc.git/commitdiff
target-supports.exp (check_effective_default_packed): New proc.
authorHans-Peter Nilsson <hp@axis.com>
Wed, 2 Nov 2005 02:41:44 +0000 (02:41 +0000)
committerHans-Peter Nilsson <hp@gcc.gnu.org>
Wed, 2 Nov 2005 02:41:44 +0000 (02:41 +0000)
* lib/target-supports.exp (check_effective_default_packed): New proc.
* g++.dg/ext/packed3.C, g++.dg/ext/packed8.C, g++.dg/other/crash-4.C:
Gate expected errors on target ! default_packed.
* g++.dg/ext/packed4.C: Gate on target ! default_packed.

From-SVN: r106374

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/packed3.C
gcc/testsuite/g++.dg/ext/packed4.C
gcc/testsuite/g++.dg/ext/packed8.C
gcc/testsuite/g++.dg/other/crash-4.C
gcc/testsuite/lib/target-supports.exp

index faa7ff51382dd6a7ef97efa0281117514aef60dc..079e1e64ed1f86d9a8fbdf881768a93fbecbefea 100644 (file)
@@ -1,3 +1,10 @@
+2005-11-02  Hans-Peter Nilsson  <hp@axis.com>
+
+       * lib/target-supports.exp (check_effective_default_packed): New proc.
+       * g++.dg/ext/packed3.C, g++.dg/ext/packed8.C, g++.dg/other/crash-4.C:
+       Gate expected errors on target ! default_packed.
+       * g++.dg/ext/packed4.C: Gate on target ! default_packed.
+
 2005-11-02  Tobias Schl"uter  <tobias.schlueter@physik.uni-muenchen.de>
 
        * gfortran.fortran-torture/execute/entry_9.f90: Revert previous
index 1d3ef534ae1b91175eeb8099755537ba79411082..3494ff4c31eeffac30baef82e7329b43386b3b2e 100644 (file)
@@ -19,7 +19,7 @@ struct  __attribute__ ((packed)) Packed
 
 void Foo (Packed &p)
 {
-  Ref (p.i); // { dg-error "cannot bind packed field" "" }
+  Ref (p.i); // { dg-error "cannot bind packed field" "" { target { ! default_packed } } }
   Ref (p.u.i);
-  Ref (p.u); // { dg-error "cannot bind packed field" "" }
+  Ref (p.u); // { dg-error "cannot bind packed field" "" { target { ! default_packed } } }
 }
index db1f5c992eea038124ea1779395c38d040dad385..e5e5e2c08da3ceca01f6e28b5e690c3e0b939e66 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-do run }
+// { dg-do run { target { ! default_packed } } }
 // { dg-options "-w" }
 
 // Copyright (C) 2003 Free Software Foundation, Inc.
index 61d248e992857b92f6da0b8bd635f9a6fba32f23..13fc134bd97e7f591bdafdcbe71a3d589fb70856 100644 (file)
@@ -19,6 +19,6 @@ class B
 
 public:
   B() {}
-  A GetA() { return a; } // { dg-error "" }
+  A GetA() { return a; } // { dg-error "" "" { target { ! default_packed } } }
 };
 
index 900afb7f90bd4c209efd283538c4b6b7dd7b2140..ea5a14fa7aed90e06d3d27686fb1087b002fd818 100644 (file)
@@ -15,12 +15,12 @@ struct a
   a(const a&);
 };
 struct b
-{ // { dg-error "cannot bind packed field" }
+{ // { dg-error "cannot bind packed field" "" { target { ! default_packed } } }
   char c;
   a aa __attribute__((packed));
 };
 struct c
 {
   b bb;
-  c(const b& __a): bb(__a) {} // { dg-error "synthesized" }
+  c(const b& __a): bb(__a) {} // { dg-error "synthesized" "" { target { ! default_packed } } }
 };
index b98e3ceb94f1ed558c2d43a3988026c2ae91ac30..eac665838f6d8780d9c8598fd97af473f8e42fcc 100644 (file)
@@ -304,6 +304,46 @@ proc check_profiling_available { test_what } {
     return $profiling_available_saved
 }
 
+# Return 1 if target has packed layout of structure members by
+# default, 0 otherwise.  Note that this is slightly different than
+# whether the target has "natural alignment": both attributes may be
+# false.
+
+proc check_effective_target_default_packed { } {
+    global et_default_packed_saved
+    global et_default_packed_target_name
+
+    if { ![info exists et_default_packed_target_name] } {
+       set et_default_packed_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_default_packed_target_name } {
+       verbose "check_effective_target_default_packed: `$et_default_packed_target_name'" 2
+       set et_default_packed_target_name $current_target
+       if [info exists et_default_packed_saved] {
+           verbose "check_effective_target_default_packed: removing cached result" 2
+           unset et_default_packed_saved
+       }
+    }
+
+    if [info exists et_default_packed_saved] {
+       verbose "check_effective_target_default_packed: using cached result" 2
+    } else {
+       verbose "check_effective_target_default_packed: compiling source" 2
+
+       set et_default_packed_saved \
+           [string match "" [get_compiler_messages default_packed assembly {
+           struct x { char a; long b; } c;
+           int s[sizeof (c) == sizeof (char) + sizeof (long) ? 1 : -1];
+       } ]]
+
+    }
+    verbose "check_effective_target_default_packed: returning $et_default_packed_saved" 2
+    return $et_default_packed_saved
+}
+
 # Return 1 if -fpic and -fPIC are supported, as in no warnings or errors
 # emitted, 0 otherwise.  Whether a shared library can actually be built is
 # out of scope for this test.
This page took 0.097025 seconds and 5 git commands to generate.