Compiling test.adb results in

  test.adb:7:04: instantiation error at foo.adb:10
  test.adb:7:04: "S_Two" is not visible
  test.adb:7:04: instantiation error at foo.adb:10
  test.adb:7:04: non-visible declaration at xy-z.ads:4
  test.adb:7:04: instantiation error at foo.adb:10
  test.adb:7:04: non-visible declaration at s_x-z.ads:6

even though S_Two should be perfectly visible.
Uncommenting the indicated line in foo.adb "fixes" the problem.
This error occurs with various versions of gnat and gcc.
Anyhow:
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v
--enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr
--with-gxx-include-dir=/usr/include/c++/4.0.2 --enable-shared
--with-system-zlib --libexecdir=/usr/lib --enable-nls
--without-included-gettext --enable-threads=posix --program-suffix=-4.0
--enable-__cxa_atexit --enable-libstdcxx-allocator=mt --enable-clocale=gnu
--enable-libstdcxx-debug --enable-java-gc=boehm --enable-java-awt=gtk
--enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre
--enable-mpfr --disable-werror --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9)

command line: gcc-4.0 -c test.adb

And here the files:

--------------- x.ads

package X is

  type XX is new Integer;

  procedure One(N: in out XX);

end X;

--------------- x.adb

package body X is

  procedure One(N: in out XX) is
  begin
    N := 1;
  end One;

end X;

--------------- x-z.ads

package X.Z is

  procedure Two(N: in out XX);

end X.Z;

--------------- x-z.adb

package body X.Z is

  procedure Two(N: in out XX) is
  begin
    N := 2;
  end Two;

end X.Z;

--------------- s_x.ads

with X;
use X;

package S_X is

  subtype XX is X.XX;

  procedure S_One(N: in out XX) renames One;

end S_X;

--------------- s_x-z.ads

with X.Z;
use X.Z;

package S_X.Z is

  procedure S_Two(N: in out XX) renames Two;

end S_X.Z;

--------------- xy.ads

generic

  type Number is private;

  with procedure S_One(N: in out Number) is <>;

package XY is

  procedure One(N: in out Number) renames S_One;

end XY;

--------------- xy-z.ads

generic

  with procedure S_Two(N: in out Number) is <>;

package XY.Z is

  procedure Two(N: in out Number) renames S_Two;

end XY.Z;

--------------- foo.ads

generic

  M: in Integer;

package Foo is

  procedure Three(K: in out Integer);

end Foo;

--------------- foo.adb

with S_X, S_X.Z, XY, XY.Z;
use S_X, S_X.Z;

package body Foo is
--  use S_X.Z;  -- uncommenting this "fixes" the problem

  package Numbers is new XY (Number => XX);
  use Numbers;
  package Numbers_Z is new Numbers.Z;

  procedure Three(K: in out Integer) is
  begin
    K := 3;
  end Three;

end Foo;

--------------- test.adb

with Ada.Text_IO;
use Ada.Text_IO;
with Foo;

procedure Test is

   package F is new Foo (M => 10);

begin

   Put("hi");

end Test;


-- 
           Summary: visibility problem with generic child package
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: koch at math dot utexas dot edu
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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

Reply via email to