From edf095929fdec6a0c183ab5fd119f26dfd406b13 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Wed, 21 Aug 2019 07:53:25 +0000 Subject: d: Fix ICE: Segmentation fault in build_function_type at gcc/tree.c:8539 gcc/d/ChangeLog: PR d/90446 * d-lang.cc (d_type_for_mode): Check for all internal __intN types. (d_type_for_size): Likewise. From-SVN: r274767 --- gcc/d/ChangeLog | 6 ++++++ gcc/d/d-lang.cc | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) (limited to 'gcc/d') 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 + 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 + 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; } -- cgit v1.1