https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67106

Jan Hubicka <hubicka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |joseph at codesourcery dot com
          Component|debug                       |c

--- Comment #2 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Here start_struct set TYPE_PACKED in:
start_struct (loc=8576, code=RECORD_TYPE, name=0x7ffff6beeaf0,
enclosing_struct_parse_info=0x7fffffffe848) at ../../gcc/c/c-decl.c:7218
7218    *enclosing_struct_parse_info = struct_parse_info;
(gdb) l
7213      }
7214  
7215    C_TYPE_BEING_DEFINED (ref) = 1;
7216    TYPE_PACKED (ref) = flag_pack_struct;
7217  
7218    *enclosing_struct_parse_info = struct_parse_info;
7219    struct_parse_info = XNEW (struct c_struct_parse_info);
7220    struct_parse_info->struct_types.create (0);
7221    struct_parse_info->fields.create (0);
7222    struct_parse_info->typedefs_seen.create (0);
(
normally the TYPE_PACKED is copied to variants in finish_record_layout but in
this testcase the structure is never finished:
typedef struct S S;

struct S
{
  struct
  {
    S *s;
  };
  int a;
};

 <record_type 0x7ffff6bdb1f8 S packed type_0 VOID
    align 8 symtab -155260016 alias set -1 canonical type 0x7ffff6bdb1f8
    pointer_to_this <pointer_type 0x7ffff6bdb5e8> chain <type_decl
0x7ffff6afbd10 D.1755>>
 <record_type 0x7ffff6bdb2a0 S VOID
    align 8 symtab -155260096 alias set -1 canonical type 0x7ffff6bdb1f8
    pointer_to_this <pointer_type 0x7ffff6bdb540> chain <type_decl
0x7ffff6afbd10 D.1755>>

I see three options
 1) make start_struct to copy the flag to variants
 2) drop verify_type checking for incomplette structures as TYPE_PACKED on
these is irrelevant
 3) make C FE to set the flag only on functions being completed somewhere in
finish_struct.

I would preffer 1 or 3. Joseph, what would be best?

Reply via email to