diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2019-08-21 07:53:25 +0000 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gcc.gnu.org> | 2019-08-21 07:53:25 +0000 |
commit | edf095929fdec6a0c183ab5fd119f26dfd406b13 (patch) | |
tree | e3615caa158373330d19c3628c3ea9267cd540aa /gcc/d | |
parent | 7610ae806e4f611379766c1dca98e360b206665c (diff) | |
download | gcc-edf095929fdec6a0c183ab5fd119f26dfd406b13.zip gcc-edf095929fdec6a0c183ab5fd119f26dfd406b13.tar.gz gcc-edf095929fdec6a0c183ab5fd119f26dfd406b13.tar.bz2 |
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
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; } |