[Dwarf-discuss] Encoding variant records: request for clarification.

Paul Hilfinger hilfingr
Sat Aug 19 10:05:19 GMT 2006

Evidently, I did not make the source of my confusion sufficiently clear.
Again, the type in question is

     type R (N : Integer) is record
        Data : String (1 .. N);
        case N is
        when 0 =>
            Name : String (1 .. N);
        when 1..20 =>
            Id, Port : Integer;
        when others =>
        end case;
     end record;

Both responders said essentially the same thing, viz.,

> I think the answer to this question is covered by the example type REC2 
> presented in D.2.2. See Figure 53 on p197 in particular. The key point, 
> I think, is that there is only one entity named N and the other uses of 
> N are references to it.

Yes, I saw that section, and it's nice as far as it goes.  However, my
issue was with the treatment of N in "case N is" part.  The Dwarf 3 
standard says (5.6.9, pg. 79):

    If the variant part has a discriminant, the discriminant is represented
    by a separate debugging information entry which is a ->>CHILD OF THE 
    VARIANT PART ENTRY.<<- ... The variant part entry will have a 
    DW_AT_discr attribute whose value is a reference to the member entry
    for the discriminant.

So field N would be a child of the variant_part representing 

   case N is ... end case

But N is ALREADY a child of the structure_type (or whatever) that represents

    type R (N: Integer) is record ... end record;

So what gives?

Thanks for your help.

Paul Hilfinger

More information about the Dwarf-discuss mailing list