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

           Summary: GNAT 4.6.[01] crashes on
                    terminal_interface-curses-menus.adb from ncruses 5.9
           Product: gcc
           Version: 4.6.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: vorfeed.ca...@gmail.com


This is Linux (I've tried both i686 and x86-64). GCC was compiled with the
following options:

/localbuild/src/sysnative-pregcc-4.6.1/gcc-4.6.1/configure
--with-gmp=/localbuild/install/sysnative-pregcc-4.6.1/gmp-5.0.2
--with-mpfr=/localbuild/install/sysnative-pregcc-4.6.1/mpfr-3.0.1
--with-mpc=/localbuild/install/sysnative-pregcc-4.6.1/mpc-0.9
--enable-symvers=gnu-versioned-namespace --enable-cloog-backend=isl
--enable-threads --enable-tls --enable-languages=ada,c,c++ --prefix=/sysnative
--build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=i686-pc-linux-gnu

I'm not sure what command line was issued to call the GCC but from ncurses 5.9
compilation log:

gnatmake -P/localbuild/src/sysnative-prencurses-5.9/Ada95/src/library.gpr
-XBUILD_DIR=`cd ..;pwd` -XSOURCE_DIR=`cd ..;pwd` -XSOURCE_DIR2=`cd
/localbuild/src/sysnative-prencurses-5.9/Ada95/src;pwd` -XLIB_NAME=AdaCurses
-XSONAME=libAdaCurses.so.1 -XLIB_KIND=static
gcc -c -g -O2 -gnatafno -gnatVa -gnatwa -I- -gnatA
/localbuild/build/sysnative-prencurses-5.9/narrowc/Ada95/src/terminal_interface-curses-trace.adb
gcc -c -g -O2 -gnatafno -gnatVa -gnatwa -I- -gnatA
/localbuild/src/sysnative-prencurses-5.9/Ada95/src/terminal_interface-curses-text_io-fixed_io.adb
gcc -c -g -O2 -gnatafno -gnatVa -gnatwa -I- -gnatA
/localbuild/src/sysnative-prencurses-5.9/Ada95/src/terminal_interface-curses-termcap.adb
gcc -c -g -O2 -gnatafno -gnatVa -gnatwa -I- -gnatA
/localbuild/src/sysnative-prencurses-5.9/Ada95/src/terminal_interface-curses-forms-field_types-alpha.adb
gcc -c -g -O2 -gnatafno -gnatVa -gnatwa -I- -gnatA
/localbuild/src/sysnative-prencurses-5.9/Ada95/src/terminal_interface-curses-text_io-integer_io.adb
gcc -c -g -O2 -gnatafno -gnatVa -gnatwa -I- -gnatA
/localbuild/src/sysnative-prencurses-5.9/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.adb
gcc -c -g -O2 -gnatafno -gnatVa -gnatwa -I- -gnatA
/localbuild/src/sysnative-prencurses-5.9/Ada95/src/terminal_interface-curses-text_io-enumeration_io.adb
gcc -c -g -O2 -gnatafno -gnatVa -gnatwa -I- -gnatA
/localbuild/src/sysnative-prencurses-5.9/Ada95/src/terminal_interface-curses-menus.adb

raised STORAGE_ERROR : stack overflow (or erroneous memory access)

The following patch to terminal_interface-curses-menus.adb fixes the problem:

--- Ada95/src/terminal_interface-curses-menus.adb
+++ Ada95/src/terminal_interface-curses-menus.adb
@@ -101,7 +101,2 @@
-      type Name_String is new char_array (0 .. Name'Length);
-      type Name_String_Ptr is access Name_String;
-      pragma Controlled (Name_String_Ptr);
-
-      type Desc_String is new char_array (0 .. Description'Length);
-      type Desc_String_Ptr is access Desc_String;
-      pragma Controlled (Desc_String_Ptr);
+      type String_Ptr is access all char_array;
+      pragma Controlled (String_Ptr);
@@ -109,2 +104,2 @@
-      Name_Str : constant Name_String_Ptr := new Name_String;
-      Desc_Str : constant Desc_String_Ptr := new Desc_String;
+      Name_Str : constant String_Ptr := new char_array(0 .. Name'Length);
+      Desc_Str : constant String_Ptr := new char_array(0 ..
Description'Length);

But this is not a proper solution: original core looks correct to me.

ncurses source was pulled from
ftp://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz and configured in the
following way:

/localbuild/src/sysnative-prencurses-5.9/configure --prefix=/sysnative
--includedir=/sysnative/include --with-ada-sharedlib --with-shared
--disable-termcap --enable-symlinks --with-rcs-ids --enable-const
--enable-sp-funcs --enable-colorfgbg --enable-ext-mouse --enable-reentrant
--enable-interop --with-pthread --enable-pthreads-eintr --enable-weak-symbols
--build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=i686-pc-linux-gnu

P.S. I'm not an Ada guru - I just wanted to rebuild packages for our local
linux flavor using GCC 4.6 and NCurses 5.9...

Reply via email to