c/86869 - preserve address-space info when building qualified ARRAY_TYPE

Message ID 20231204123445.1FE40139E2@imap2.dmz-prg2.suse.org
State Committed
Commit e00c00730912cd6072954cd2c29ca44e33dbb598
Headers
Series c/86869 - preserve address-space info when building qualified ARRAY_TYPE |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_gcc_check--master-aarch64 success Testing passed

Commit Message

Richard Biener Dec. 4, 2023, 12:34 p.m. UTC
  The following adjusts the C FE specific qualified type building
to preserve address-space info also for ARRAY_TYPE.

Bootstrap / regtest running on x86_64-unknown-linux-gnu, OK?

Thanks,
Richard.

	PR c/86869
gcc/c/
	* c-typeck.cc (c_build_qualified_type): Preserve address-space
	info for ARRAY_TYPE.

gcc/testsuite/
	* gcc.target/avr/pr86869.c: New testcase.
---
 gcc/c/c-typeck.cc                      | 1 +
 gcc/testsuite/gcc.target/avr/pr86869.c | 9 +++++++++
 2 files changed, 10 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/avr/pr86869.c
  

Comments

Joseph Myers Dec. 4, 2023, 9:14 p.m. UTC | #1
On Mon, 4 Dec 2023, Richard Biener wrote:

> The following adjusts the C FE specific qualified type building
> to preserve address-space info also for ARRAY_TYPE.
> 
> Bootstrap / regtest running on x86_64-unknown-linux-gnu, OK?

OK.
  

Patch

diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
index a6edbc85f10..836893905fa 100644
--- a/gcc/c/c-typeck.cc
+++ b/gcc/c/c-typeck.cc
@@ -16263,6 +16263,7 @@  c_build_qualified_type (tree type, int type_quals, tree orig_qual_type,
 
 	  t = build_variant_type_copy (type);
 	  TREE_TYPE (t) = element_type;
+	  TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (element_type);
 
           if (TYPE_STRUCTURAL_EQUALITY_P (element_type)
               || (domain && TYPE_STRUCTURAL_EQUALITY_P (domain)))
diff --git a/gcc/testsuite/gcc.target/avr/pr86869.c b/gcc/testsuite/gcc.target/avr/pr86869.c
new file mode 100644
index 00000000000..fbfb378e8c9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/avr/pr86869.c
@@ -0,0 +1,9 @@ 
+/* { dg-do compile } */
+
+struct S {
+  char y[2];
+};
+
+void foo(const __memx  struct S *s) {
+  const char (*p)[2] = &s->y;
+}