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.
2020-04-27 Jakub Jelinek <jakub@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.
+2020-04-27 Jakub Jelinek <jakub@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.
+
2020-04-23 Marek Polacek <polacek@redhat.com>
PR c++/94733
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;
if (targetm.have_speculation_safe_value (true))
+2020-04-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/94755
+ * c-c++-common/pr94755.c: New test.
+
2020-04-27 Felix Yang <felix.yang@huawei.com>
PR tree-optimization/94784
--- /dev/null
+/* PR c/94755 */
+/* { dg-do compile } */
+
+extern void foo (void);
+
+void
+bar (double x)
+{
+ if (x == __builtin_speculation_safe_value ()) /* { dg-error "too few arguments to function" } */
+ foo ();
+}