https://gcc.gnu.org/g:e5cc71ed7588e256054d6935a7ce8427a03c25fd

commit e5cc71ed7588e256054d6935a7ce8427a03c25fd
Author: Alexandre Oliva <[email protected]>
Date:   Wed Apr 1 21:47:51 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