Re: [PATCH v7 3/3] c: implement defer

Joseph Myers <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
On Wed, 8 Jul 2026, navi wrote:

> From: "navi" <[email protected]>
> 
> based on the technical specification 25755[1] as an extension
> 
> _Defer is provided as a keyword if gnu extensions are enabled, and
> stddefer.h provided a macro for the 'defer' spelling
> 
> deferred statements execute at the end of the scope they're added on,
> similar to the cleanup attribute, and they have much of the same
> constraints as statement expressions, with added limitation that no
> local jump shall jump over a defer statement, nor shall return, break,
> and continue, jump out of one
> 
> 1: https://open-std.org/JTC1/SC22/WG14/www/docs/n3734.pdf

That's a pretty old version.  Does this implementation correspond to the 
current version N3928?  (In particular, the change (made in v5; the 
version you reference is v4, and the current version is v6) that it's 
guaranteed that leaving execution of the scope of a defer by a noreturn 
function call, such as longjmp or exit, or a signal, does not execute the 
deferred block, when previously it was implementation-defined whether this 
happens.  Note that the description of Example 3 hasn't been properly 
updated for that; to be corrected in the ballot draft.)

Since we allow mixed-language code to throw exceptions (e.g. C++) across C 
code built with -fexceptions, it would be a good idea also to have test 
coverage for how this feature interacts with exceptions.  And I think the 
GCC manual should document how the feature interacts with relevant GNU 
extensions (the cleanup attribute - you already have a test using that - 
and throwing exceptions across C code, at least).

-- 
Joseph S. Myers
[email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.