aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-12-04 14:03:37 +0100
committerRichard Biener <rguenther@suse.de>2023-12-05 08:31:32 +0100
commit4dd02d62abd76a69f65d9f3fed6febeed53fc90a (patch)
treef863cb2f0737c8f2137e477cafb2a08e27b75a8e /gcc
parente00c00730912cd6072954cd2c29ca44e33dbb598 (diff)
downloadgcc-4dd02d62abd76a69f65d9f3fed6febeed53fc90a.zip
gcc-4dd02d62abd76a69f65d9f3fed6febeed53fc90a.tar.gz
gcc-4dd02d62abd76a69f65d9f3fed6febeed53fc90a.tar.bz2
c/89270 - honor registered_builtin_types in type_for_size
The following fixes the intermediate conversions inserted by convert_to_integer when facing address-spaces and converts to their effective [u]intptr_t when they are registered_builtin_types by considering those also from c_common_type_for_size and not only from c_common_type_for_mode. PR c/89270 gcc/c-family/ * c-common.cc (c_common_type_for_size): Consider registered_builtin_types. gcc/testsuite/ * gcc.target/avr/pr89270.c: New testcase.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/c-common.cc9
-rw-r--r--gcc/testsuite/gcc.target/avr/pr89270.c7
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc
index b2b70c9..d175054d 100644
--- a/gcc/c-family/c-common.cc
+++ b/gcc/c-family/c-common.cc
@@ -2362,6 +2362,15 @@ c_common_type_for_size (unsigned int bits, int unsignedp)
return (unsignedp ? widest_unsigned_literal_type_node
: widest_integer_literal_type_node);
+ for (tree t = registered_builtin_types; t; t = TREE_CHAIN (t))
+ {
+ tree type = TREE_VALUE (t);
+ if (TREE_CODE (type) == INTEGER_TYPE
+ && bits == TYPE_PRECISION (type)
+ && !!unsignedp == !!TYPE_UNSIGNED (type))
+ return type;
+ }
+
if (bits <= TYPE_PRECISION (intQI_type_node))
return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
diff --git a/gcc/testsuite/gcc.target/avr/pr89270.c b/gcc/testsuite/gcc.target/avr/pr89270.c
new file mode 100644
index 0000000..2b6e4a8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/avr/pr89270.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+
+void test()
+{
+ extern const unsigned char __memx __data_load_end;
+ __uint24 top=(__uint24)&__data_load_end;
+}