d: Explicitly determine which built-in copysign function to call.

For some targets, mathfn_built_in returns NULL as copysign is not
implicitly available, causing an ICE.  Now copysign is explicitly
requested when expanding the intrinsic.

gcc/d/ChangeLog:

	* intrinsics.cc (expand_intrinsic_copysign): Explicitly determine
	which built-in copysign function to call.
This commit is contained in:
Iain Buclaw 2020-11-13 09:57:57 +01:00
parent 5d4b824faf
commit d975d6dce9

View file

@ -466,11 +466,14 @@ expand_intrinsic_copysign (tree callexp)
from = fold_convert (type, from);
/* Which variant of __builtin_copysign* should we call? */
tree builtin = mathfn_built_in (type, BUILT_IN_COPYSIGN);
gcc_assert (builtin != NULL_TREE);
built_in_function code = (type == float_type_node) ? BUILT_IN_COPYSIGNF
: (type == double_type_node) ? BUILT_IN_COPYSIGN
: (type == long_double_type_node) ? BUILT_IN_COPYSIGNL
: END_BUILTINS;
return call_builtin_fn (callexp, DECL_FUNCTION_CODE (builtin), 2,
to, from);
gcc_assert (code != END_BUILTINS);
return call_builtin_fn (callexp, code, 2, to, from);
}
/* Expand a front-end intrinsic call to pow(). This takes two arguments, the