Possible bug in gimplify.c:mostly_copy_tree_r with SAVE_EXPR
Richard Kenner
kenner@vlsi1.ultra.nyu.edu
Fri Sep 24 00:12:00 GMT 2004
Although it's correct that a SAVE_EXPR can be shared, I don't believe its
contents can. If we have an expression both in the SAVE_EXPR and someplace
else, they must be unique copies. I'm running into a SIGSEGV on a small Ada
test case where a COND_EXPR is set to VOID_TYPE but then when it sees it
inside a non-VOID SAVE_EXPR, it gets confused.
So I think it shouldn't copy a SAVE_EXPR, but should not clear *walk_subtree.
Unfortunately, just doing that doesn't fix the problem, so I'm a little
confused. The test case is two tiny Ada files:
identifiers.ads is:
package Identifiers is
type ID_Type (<>) is private;
function Create (S : String) return ID_Type;
function Create (I : Integer) return ID_Type;
private
type Disc is ( Str, Int );
type ID_Type (D : Disc) is
record
case D is
when Str => S : String (1..80);
when Int => I : Integer;
end case;
end record;
end Identifiers;
and test_ids.adb is
with Identifiers; use Identifiers;
procedure Test_IDs is
X : ID_Type := Create ("Francisco");
Y : ID_Type := Create (12);
Z : ID_Type := X;
begin
null;
end Test_IDs;
More information about the Gcc
mailing list