http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50300
Bug #: 50300 Summary: Error message incomplete and points to the wrong place. "premature usage of incomplete type" Classification: Unclassified Product: gcc Version: 4.5.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: ada AssignedTo: unassig...@gcc.gnu.org ReportedBy: gary...@comcast.net Using the current GNAT GPL from AdaCore GNAT GPL 2011 (20110419) Copyright 1996-2011, Free Software Foundation, Inc. lapwarmer-171: gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/gnat/libexec/gcc/i686-pc-linux-gnu/4.5.3/lto-wrapper Target: i686-pc-linux-gnu Configured with: ../src/configure --prefix=/usr/gnat --with-libelf=/ter.a/gnatmail/release-gpl/build-ter/libmpfr/install --with-mpc=/ter.a/gnatmail/release-gpl/build-ter/libmpfr/install --with-gmp=/ter.a/gnatmail/release-gpl/build-ter/libmpfr/install --with-mpfr=/ter.a/gnatmail/release-gpl/build-ter/libmpfr/install --build=i686-pc-linux-gnu --enable-languages=c,ada,c++ --disable-nls --without-libiconv-prefix --disable-libmudflap --disable-libstdcxx-pch --disable-libada --enable-checking=release --enable-__cxa_atexit --enable-threads=posix --with-bugurl=URL:mailto:rep...@adacore.com --with-build-time-tools=/ter.a/gnatmail/release-gpl/build-ter/obj Thread model: posix gcc version 4.5.3 20110419 for GNAT GPL 2011 (20110419) (GCC) lapwarmer-172: gcc -c -gnata -gnatE -fstack-check -gnatef -gnatf -gnatm50 \ -gnatn -gnato -gnatU -gnatwa -gnatwe -gnatwi -gnatwj \ -gnatwK -gnatwl -Wuninitialized -gnatVa \ -pass-exit-codes -O -g -gnatA -x ada proc.adb proc.adb:15:09: error: premature usage of incomplete private type "P2" defined at line 8 The actual error is that the completion of P2 is trying to use the also-incomplete P1 as a field and it is the incompleteness of P1 that is a problem. It would also be much better to point to line 10. The test program is quite small. with Text_Io; procedure Proc is package X is type P1 is private; package Y is type P2 is private; private type P2 is record Z : P1; -- Actual error is use of P1 before completed. end record; end Y; Q : Y.P2; private type P1 is new Integer; end X; begin Text_Io.Put_Line ("Hello"); end Proc;