Package: gnat-4.6 Version: 4.6.1-5 Severity: normal Tags: upstream Forwarded: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50558
I reported this bug to the gcc bugzilla. 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. -- System Information: Debian Release: wheezy/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 3.0.0-1-amd64 (SMP w/2 CPU cores) Locale: LANG=uk_UA.UTF-8, LC_CTYPE=uk_UA.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages gnat-4.6 depends on: ii gcc-4.6 4.6.1-13 ii gnat-4.6-base 4.6.1-5 ii libc6 2.13-21 ii libc6-dev 2.13-21 ii libgcc1 1:4.6.1-13 ii libgmp10 2:5.0.2+dfsg-1 ii libgnat-4.6 4.6.1-5 ii libgnatprj4.6 4.6.1-5 ii libgnatvsn4.6 4.6.1-5 ii libmpc2 0.9-3 ii libmpfr4 3.0.1-6 ii multiarch-support 2.13-21 ii zlib1g 1:1.2.3.4.dfsg-3 gnat-4.6 recommends no packages. Versions of packages gnat-4.6 suggests: pn ada-reference-manual <none> pn gnat-4.6-doc <none> pn gnat-4.6-sjlj <none> -- no debconf information
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;
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; Data_Register : Data_Record; pragma Atomic (Data_Register); end Pkg; with Pkg; procedure Test is begin Pkg.Data_Register := ( Data => 255, others => <> -- expected error: no value supplied for component "Reserved" ); end Test;