This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Tested on i686-linux, committed on trunk
A generic subprogram may be imported, in which case it does not have a body.
The consistency check on generic units in the context of the current compilation
must omit imported generics, because their body will be provided elsewhere.
Importing generic subprograms provides a limited form of instance sharing.
The following must compile and execute quietly:
gcc -c convert.c
gnatmake import_generic -largs convert.o
import_generic
generic
type Source (<>) is limited private;
type Target (<>) is limited private;
function gf1 (S : Source) return Target;
pragma Import (C, gf1, "convert");
int convert (int x) { return x * x * x;}
with Gf1;
with Text_IO; use Text_IO;
procedure Import_Generic is
function Cube is new gf1 (Integer, Integer);
type Int is new Integer;
function Cube2 is new fg1 (Int. Int);
begin
if Cube (3) /= 27 then
raise Program_Error;
end if;
if Cube2 (3) /= 27 then
raise Program_Error;
end if;
end;
2008-03-26 Ed Schonberg <schonberg@adacore.com>
* sem_ch10.adb (Analyze_Compilation_Unit): if a unit in the context is
a generic subprogram that is imported, do not attempt to compile
non-existent body.
* sem_ch12.adb (Instantiate_Subprogram_Body): if the generic is
imported, do not generate a raise_program_error for the non-existent
body.
(Pre_Analyze_Actuals): If an error is detected during pre-analysis,
perform minimal name resolution on the generic to avoid spurious
warnings.
(Find_Actual_Type): the designated type of the actual in a child unit
may be declared in a parent unit without being an actual.
Attachment:
difs
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |