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

--- Comment #4 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to H.J. Lu from comment #3)

> 
> Hasn't the return value of callee, bar_bool, been promoted already?

Try this if the callee's return value is unpromoted.

diff --git a/gcc/config/bpf/bpf.cc b/gcc/config/bpf/bpf.cc
index 4773d789d8e..6f41a9e843c 100644
--- a/gcc/config/bpf/bpf.cc
+++ b/gcc/config/bpf/bpf.cc
@@ -299,13 +299,14 @@ bpf_file_end (void)
 static rtx
 bpf_function_value (const_tree ret_type,
                    const_tree fntype_or_decl,
-                   bool outgoing ATTRIBUTE_UNUSED)
+                   bool outgoing)
 {
   enum machine_mode mode;
   int unsignedp;

   mode = TYPE_MODE (ret_type);
-  if (INTEGRAL_TYPE_P (ret_type))
+  /* NB: Treat the callee's return value as unpromoted.  */
+  if (outgoing && INTEGRAL_TYPE_P (ret_type))
     mode = promote_function_mode (ret_type, mode, &unsignedp,
                                  fntype_or_decl, 1);

Reply via email to