https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118430

--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This patch fixes the error message but not the missed optimization/reason why
it is rejected:
```
diff --git a/gcc/tree-tailcall.cc b/gcc/tree-tailcall.cc
index d6d7eb4b47c..8e9fa0cca9f 100644
--- a/gcc/tree-tailcall.cc
+++ b/gcc/tree-tailcall.cc
@@ -833,7 +833,7 @@ find_tail_calls (basic_block bb, struct tailcall **ret,
bool only_musttail,
       && (ret_var != ass_var
          && !(is_empty_type (TREE_TYPE (ret_var)) && !ass_var)))
     {
-      maybe_error_musttail (call, _("call uses return slot"));
+      maybe_error_musttail (call, _("call and return value are different"));
       return;
     }
```

I am still trying to figure out the place to get the range. 

To get the range from the call is simple as:
```
  tree callee = gimple_call_fndecl (call);
  if (callee
      && useless_type_conversion_p (TREE_TYPE (TREE_TYPE (callee)), type))
    {
      value_range val;
      if (ipa_return_value_range (val, callee)
          && val.singleton_p ())
        {
          ....
        }
    }

```
But I don't see where the place to put this.

Reply via email to