aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2005-11-02 02:41:44 +0000
committerHans-Peter Nilsson <hp@gcc.gnu.org>2005-11-02 02:41:44 +0000
commitaa5c7673b84fbcecbe6301d6df6a0849dffbcb02 (patch)
tree73b65719360715f40a1a898b2c0e144a14c9fba9
parent745f2a84b9af863b30fa4eeaad778e0672feb4ab (diff)
downloadgcc-aa5c7673b84fbcecbe6301d6df6a0849dffbcb02.zip
gcc-aa5c7673b84fbcecbe6301d6df6a0849dffbcb02.tar.gz
gcc-aa5c7673b84fbcecbe6301d6df6a0849dffbcb02.tar.bz2
target-supports.exp (check_effective_default_packed): New proc.
* 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
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/ext/packed3.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/packed4.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/packed8.C2
-rw-r--r--gcc/testsuite/g++.dg/other/crash-4.C4
-rw-r--r--gcc/testsuite/lib/target-supports.exp40
6 files changed, 53 insertions, 6 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index faa7ff5..079e1e6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/g++.dg/ext/packed3.C b/gcc/testsuite/g++.dg/ext/packed3.C
index 1d3ef53..3494ff4 100644
--- a/gcc/testsuite/g++.dg/ext/packed3.C
+++ b/gcc/testsuite/g++.dg/ext/packed3.C
@@ -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 } } }
}
diff --git a/gcc/testsuite/g++.dg/ext/packed4.C b/gcc/testsuite/g++.dg/ext/packed4.C
index db1f5c9..e5e5e2c 100644
--- a/gcc/testsuite/g++.dg/ext/packed4.C
+++ b/gcc/testsuite/g++.dg/ext/packed4.C
@@ -1,4 +1,4 @@
-// { dg-do run }
+// { dg-do run { target { ! default_packed } } }
// { dg-options "-w" }
// Copyright (C) 2003 Free Software Foundation, Inc.
diff --git a/gcc/testsuite/g++.dg/ext/packed8.C b/gcc/testsuite/g++.dg/ext/packed8.C
index 61d248e..13fc134 100644
--- a/gcc/testsuite/g++.dg/ext/packed8.C
+++ b/gcc/testsuite/g++.dg/ext/packed8.C
@@ -19,6 +19,6 @@ class B
public:
B() {}
- A GetA() { return a; } // { dg-error "" }
+ A GetA() { return a; } // { dg-error "" "" { target { ! default_packed } } }
};
diff --git a/gcc/testsuite/g++.dg/other/crash-4.C b/gcc/testsuite/g++.dg/other/crash-4.C
index 900afb7..ea5a14f 100644
--- a/gcc/testsuite/g++.dg/other/crash-4.C
+++ b/gcc/testsuite/g++.dg/other/crash-4.C
@@ -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 } } }
};
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index b98e3ce..eac6658 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -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.