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