Patch for bugs 772 and 17913

Mark Mitchell mark@codesourcery.com
Wed Mar 30 19:41:00 GMT 2005


Joseph S. Myers wrote:
> This patch addresses bugs 772 and 17913 by disallowing jumps into
> statement expressions for C. 

Great.

> Jumps out of statement expressions are
> however allowed and the semantics are documented, along with the
> evaluation order rule that the evaluation of a statement expression
> doesn't overlap with the evaluation of other parts of the surrounding
> expression (as with an inline function call and as discussed at
> <http://gcc.gnu.org/ml/gcc/2003-07/msg01461.html>).

Yes, I think those are desirable semantics.  Personally, I'd be happy to 
disallow jumps out of statement expressions, but I can't really justify 
that, at least in C.  In C++, destructor semantics may make jumps out of 
statement-expressions more problematic -- but, then again, they may not.

I certainly have no objection to applying this patch to the 4.0 branch.

> * Jumping into statement expressions via computed goto is undefined at
>   runtime not compile time, but it can lead to the same ICE as in bug
>   17913 when optimizing; for example, compile the following with -O.
> 
>   void f(void) { void *p = &&a; 1 ? 1 : ({ a : 1; 1; }); goto *p; }
> 
> In order to avoid an ICE in such cases I think a patch such as that at
> <http://gcc.gnu.org/ml/gcc-patches/2004-11/msg00130.html> is still
> needed.

Given that we're disallowing jumps inward, does it make sense to make 
all labels in statement expressions implicitly local?  I suppose that it 
might still be possible to get the ICE by storing the address of the 
label in some variable, and then using a computed goto later.

The langhooks part of Gabor's patch is fine.  Given Roger's comment that 
  he's happy with the middle-end changes, the patch is OK for 4.0 and 
mainline, modulo Joseph's comments about formatting, etc.  Gabor, would 
you please revise accordingly?

Thanks,

-- 
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
(916) 791-8304



More information about the Gcc-patches mailing list