On 4/26/20 8:23 AM, Jakub Jelinek wrote:
Hi!
When this builtin has no parameters, speculation_safe_value_resolve_call
returns BUILT_IN_NONE, but resolve_overloaded_builtin uselessly
dereferences the first param just to return error_mark_node immediately.
The following patch rearranges it so that we only read the first parameter
if fncode is not BUILT_IN_NONE.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
2020-04-25 Jakub Jelinek <ja...@redhat.com>
PR c/94755
* c-common.c (resolve_overloaded_builtin): Return error_mark_node for
fncode == BUILT_IN_NONE before initialization of first_param.
* c-c++-common/pr94755.c: New test.
--- gcc/c-family/c-common.c.jj 2020-03-21 18:29:58.989160193 +0100
+++ gcc/c-family/c-common.c 2020-04-25 10:13:14.158722031 +0200
@@ -7402,9 +7402,11 @@ resolve_overloaded_builtin (location_t l
enum built_in_function fncode
= speculation_safe_value_resolve_call (function, params);;
+ if (fncode == BUILT_IN_NONE)
+ return error_mark_node;
+
first_param = (*params)[0];
- if (fncode == BUILT_IN_NONE
- || !speculation_safe_value_resolve_params (loc, function, params))
+ if (!speculation_safe_value_resolve_params (loc, function, params))
return error_mark_node;
first_param isn't used in that conditional, can't you just move its assinment
afterwards?
--
Nathan Sidwell