diff options
author | Richard Biener <rguenther@suse.de> | 2023-12-04 14:03:37 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-12-05 08:31:32 +0100 |
commit | 4dd02d62abd76a69f65d9f3fed6febeed53fc90a (patch) | |
tree | f863cb2f0737c8f2137e477cafb2a08e27b75a8e /gcc | |
parent | e00c00730912cd6072954cd2c29ca44e33dbb598 (diff) | |
download | gcc-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.cc | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/pr89270.c | 7 |
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; +} |