https://gcc.gnu.org/g:7d7cbf984e4a26d6b6f5098c7e4adb12a427eb4a

commit r16-8451-g7d7cbf984e4a26d6b6f5098c7e4adb12a427eb4a
Author: Alexandre Oliva <[email protected]>
Date:   Fri Apr 3 18:09:20 2026 -0300

    c++: coroutines: initialize refcount
    
    If the promise ctor throws, the EH cleanup will access refcount before
    it is initialized.  Initialize it to zero so that cleanups can take
    place.
    
    This seems very hard to hit on systems that ensure the stack starts
    out zero-initialized, but on VxWorks in kernel mode, this hits more
    often than not on various architectures.
    
    
    for  gcc/cp/ChangeLog
    
            * coroutines.cc (cp_coroutine_transform::build_ramp_function):
            Zero-initialize refcount.

Diff:
---
 gcc/cp/coroutines.cc | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc
index b884f8078e09..3de0d556a84a 100644
--- a/gcc/cp/coroutines.cc
+++ b/gcc/cp/coroutines.cc
@@ -5123,7 +5123,9 @@ cp_coroutine_transform::build_ramp_function ()
   tree coro_frame_refcount
     = coro_build_and_push_artificial_var_with_dve (loc, coro_frame_refcount_id,
                                                   short_unsigned_type_node,
-                                                  orig_fn_decl, NULL_TREE,
+                                                  orig_fn_decl,
+                                                  build_int_cst
+                                                  (short_unsigned_type_node, 
0),
                                                   deref_fp);
   /* Cleanup if both the ramp and the body have finished.  */
   tree cond

Reply via email to