On 5/13/25 10:30 AM, Iain Sandoe wrote:
In some cases, a function might be declared as FUNCTION_NEEDS_BODY_BLOCK
but all the content is contained within that block.  However, poplevel
is currently assuming that such cases would always contain subblocks.

In the case that we do have a body block, but there are no subblocks
then st the outer brace marker on the body block.  This situation occurs
for at least coroutine lambda ramp functions and empty CTORs.

I think CTOR should be lowercase; this is about class constructors, not GCC CONSTRUCTORs.

OK with that tweak.

gcc/cp/ChangeLog:

        * decl.cc (poplevel): Set BLOCK_OUTER_CURLY_BRACE_P on the
        body block for functions with no subblocks.

Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
---
  gcc/cp/decl.cc | 8 +++-----
  1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc
index 03e8c98d4b6..a9ef28bfd80 100644
--- a/gcc/cp/decl.cc
+++ b/gcc/cp/decl.cc
@@ -846,11 +846,9 @@ poplevel (int keep, int reverse, int functionbody)
        DECL_INITIAL (current_function_decl) = block ? block : subblocks;
        if (subblocks)
        {
-         if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
-           {
-             if (BLOCK_SUBBLOCKS (subblocks))
-               BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
-           }
+         if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl)
+             && BLOCK_SUBBLOCKS (subblocks))
+           BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
          else
            BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
        }

Reply via email to