diff options
Diffstat (limited to 'gcc/d')
-rw-r--r-- | gcc/d/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/d/d-lang.cc | 22 |
2 files changed, 28 insertions, 0 deletions
diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog index 6b692f5..41ea48e 100644 --- a/gcc/d/ChangeLog +++ b/gcc/d/ChangeLog @@ -1,5 +1,11 @@ 2019-08-20 Iain Buclaw <ibuclaw@gdcproject.org> + PR d/90446 + * d-lang.cc (d_type_for_mode): Check for all internal __intN types. + (d_type_for_size): Likewise. + +2019-08-20 Iain Buclaw <ibuclaw@gdcproject.org> + PR d/90445 * d-builtins.cc (d_build_c_type_nodes): Test UINTMAX_TYPE for setting uintmax_type_node. Set signed_size_type_node as the signed_type_for diff --git a/gcc/d/d-lang.cc b/gcc/d/d-lang.cc index f23f719..db0db0e 100644 --- a/gcc/d/d-lang.cc +++ b/gcc/d/d-lang.cc @@ -1360,6 +1360,17 @@ d_type_for_mode (machine_mode mode, int unsignedp) if (mode == TYPE_MODE (build_pointer_type (d_int_type))) return build_pointer_type (d_int_type); + for (int i = 0; i < NUM_INT_N_ENTS; i ++) + { + if (int_n_enabled_p[i] && mode == int_n_data[i].m) + { + if (unsignedp) + return int_n_trees[i].unsigned_type; + else + return int_n_trees[i].signed_type; + } + } + if (COMPLEX_MODE_P (mode)) { machine_mode inner_mode; @@ -1408,6 +1419,17 @@ d_type_for_size (unsigned bits, int unsignedp) if (bits <= TYPE_PRECISION (d_cent_type)) return unsignedp ? d_ucent_type : d_cent_type; + for (int i = 0; i < NUM_INT_N_ENTS; i ++) + { + if (int_n_enabled_p[i] && bits == int_n_data[i].bitsize) + { + if (unsignedp) + return int_n_trees[i].unsigned_type; + else + return int_n_trees[i].signed_type; + } + } + return 0; } |