http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50558

             Bug #: 50558
           Summary: Illegal program not detected (record component with no
                    supplied value) and invalid access to atomic variable
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: eu...@debian.org


Created attachment 25374
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=25374
File that triggers the bug

The following invalid program (component 'Reserved' does not have default
value) compiles with no error (gcc 4.6.1 and 4.7.0 (snapshot) on Debian):

package Pkg is
   type Byte is mod 2**8;
   type Reserved_24 is mod 2**24;

   type Data_Record is
      record
         Data : Byte;
         Reserved : Reserved_24;
      end record;

   for Data_Record use
      record
         Data at 0 range 0 .. 7;
         Reserved at 0 range 8 .. 31;
      end record;

   for Data_Record'Size use 32;
   for Data_Record'Alignment use 4;
end Pkg;

package Pkg.Reg is
   Data_Register : Data_Record;
   pragma Atomic (Data_Register);
end Pkg.Reg;

with Pkg.Reg;
procedure Test is
begin
   Pkg.Reg.Data_Register := (
      Data => 255,
      others => <> -- expected error: no value supplied for component
"Reserved"
   );
end Test;

gnat gives expected error message if definition of Data_Register moved to Pkg.
Representation clause for Data_Record and pragma Atomic is not required to
trigger this bug, but with them strange assembler code generated at leas on
x86_64 and cortex-m3:

_ada_test:
        movl    $0, pkg__reg__data_register(%rip)
        movb    $-1, pkg__reg__data_register(%rip)
        ret

_ada_test:
        ldr     r3, .L2
        movs    r2, #0
        str     r2, [r3, #0]
        movs    r2, #255
        strb    r2, [r3, #0]
        bx      lr

Note that atomic variable is accessed twice. I'm not yet sure if this bug can
be reproduced by a valid program.

Reply via email to