http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48835
--- Comment #48 from Mikael Pettersson <mikpe at it dot uu.se> 2011-12-08 09:25:55 UTC --- (In reply to comment #47) > (In reply to comment #42) > > -O2 -W -Wall -gnatpg -nostdinc a-assert.adb -o a-assert.o > > +===========================GNAT BUG DETECTED==============================+ > > | 4.7.0 20111203 (experimental) (m68k-unknown-linux) GCC error: | > > | in fp_size_to_prec, at ada/gcc-interface/misc.c:781 | > > This is caused by the float changes in r177137 plus the enumerate_modes fix in > r177141 (without the latter it won't compile). I instrumented fp_prec_to_size and fp_size_to_prec to log who called them with what parameters and what they then computed, and saw something strange: fp_prec_to_size_(32, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/targtyps.c, 116): mode 27 prec 32 bitsize 32 fp_prec_to_size_(32, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/targtyps.c, 116): mode 27 prec 32 bitsize 32 fp_prec_to_size_(64, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/targtyps.c, 122): mode 27 prec 32 bitsize 32 fp_prec_to_size_(64, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/targtyps.c, 122): mode 28 prec 64 bitsize 64 fp_prec_to_size_(80, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/targtyps.c, 128): mode 27 prec 32 bitsize 32 fp_prec_to_size_(80, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/targtyps.c, 128): mode 28 prec 64 bitsize 64 fp_prec_to_size_(80, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/targtyps.c, 128): mode 29 prec 80 bitsize 96 fp_prec_to_size_(80, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/decl.c, 401): mode 27 prec 32 bitsize 32 fp_prec_to_size_(80, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/decl.c, 401): mode 28 prec 64 bitsize 64 fp_prec_to_size_(80, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/decl.c, 401): mode 29 prec 80 bitsize 96 gnat_to_gnu_entity: esize 80 max_esize 96 LONG_DOUBLE_TYPE_SIZE 80 fp_size_to_prec_(80, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/decl.c, 1842): mode 27 bitsize 32 prec 32 fp_size_to_prec_(80, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/decl.c, 1842): mode 28 bitsize 64 prec 64 fp_size_to_prec_(80, /tmp/gcc-4.7-r177137/gcc/ada/gcc-interface/decl.c, 1842): mode 29 bitsize 96 prec 80 +===========================GNAT BUG DETECTED==============================+ | 4.7.0 20110802 (experimental) (m68k-unknown-linux-gnu) GCC error: | | in fp_size_to_prec_, at ada/gcc-interface/misc.c:793 | That is, first ada maps precisions 32, 64, and 80 to bit sizes 32, 64, and 96, respectively. Then ada turns around and tries to map _bit_size_ 80 to a precision, but bit size 80 doesn't exist so fp_size_to_prec() asserts. Did something confuse precision with bit size somewhere?