From 93cec6a90a54139231426aeb04a10f6d504c1ad2 Mon Sep 17 00:00:00 2001 From: hp <hp@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Wed, 2 Nov 2005 02:49:24 +0000 Subject: [PATCH] * lib/target-supports.exp (check_effective_target_pcc_bitfield_type_matters): New proc. * gcc.dg/bitfld-3.c: Gate on target pcc_bitfield_type_matters. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106375 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gcc.dg/bitfld-3.c | 2 +- gcc/testsuite/lib/target-supports.exp | 40 +++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 079e1e64ed1f..278324341d18 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2005-11-02 Hans-Peter Nilsson <hp@axis.com> + * lib/target-supports.exp + (check_effective_target_pcc_bitfield_type_matters): New proc. + * gcc.dg/bitfld-3.c: Gate on target pcc_bitfield_type_matters. + * 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. diff --git a/gcc/testsuite/gcc.dg/bitfld-3.c b/gcc/testsuite/gcc.dg/bitfld-3.c index 3843acb6e393..5207bedb8837 100644 --- a/gcc/testsuite/gcc.dg/bitfld-3.c +++ b/gcc/testsuite/gcc.dg/bitfld-3.c @@ -1,5 +1,5 @@ /* Test for bitfield alignment in structs and unions. */ -/* { dg-do run } */ +/* { dg-do run { target pcc_bitfield_type_matters } } */ /* { dg-options "-O2" } */ extern void abort (void); diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index eac665838f6d..3116c42c45f8 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -344,6 +344,46 @@ proc check_effective_target_default_packed { } { return $et_default_packed_saved } +# Return 1 if target has PCC_BITFIELD_TYPE_MATTERS defined. See +# documentation, where the test also comes from. + +proc check_effective_target_pcc_bitfield_type_matters { } { + global et_pcc_bitfield_type_matters_saved + global et_pcc_bitfield_type_matters_target_name + + if { ![info exists et_pcc_bitfield_type_matters_target_name] } { + set et_pcc_bitfield_type_matters_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_pcc_bitfield_type_matters_target_name } { + verbose "check_effective_target_pcc_bitfield_type_matters: `$et_pcc_bitfield_type_matters_target_name'" 2 + set et_pcc_bitfield_type_matters_target_name $current_target + if [info exists et_pcc_bitfield_type_matters_saved] { + verbose "check_effective_target_pcc_bitfield_type_matters: removing cached result" 2 + unset et_pcc_bitfield_type_matters_saved + } + } + + if [info exists et_pcc_bitfield_type_matters_saved] { + verbose "check_effective_target_pcc_bitfield_type_matters: using cached result" 2 + } else { + verbose "check_effective_target_pcc_bitfield_type_matters: 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_pcc_bitfield_type_matters_saved \ + [string match "" [get_compiler_messages pcc_bitfield_type_matters assembly { + struct foo1 { char x; char :0; char y; }; + struct foo2 { char x; int :0; char y; }; + int s[sizeof (struct foo1) != sizeof (struct foo2) ? 1 : -1]; + } ]] + } + verbose "check_effective_target_pcc_bitfield_type_matters: returning $et_pcc_bitfield_type_matters_saved" 2 + return $et_pcc_bitfield_type_matters_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. -- GitLab