diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-29 13:29:08 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-29 13:29:08 +0000 |
commit | 294b942d56cb4d7f0f03ccf70294e48b90710e31 (patch) | |
tree | 11c0c448c05a05a2157e938de8190ca731911a8b /gcc/ada/exp_disp.ads | |
parent | cfd7609b9effe843b82c81122d175c0474a4dc2a (diff) | |
download | gcc-294b942d56cb4d7f0f03ccf70294e48b90710e31.tar.gz |
2009-04-29 Javier Miranda <miranda@adacore.com>
* sem_ch3.adb (Analyze_Object_Declaration): Disable error message
associated with dyamically tagged expressions if the expression
initializing a tagged type corresponds with a non default CPP
constructor.
(OK_For_Limited_Init): CPP constructor calls are OK for initialization
of limited type objects.
* sem_ch5.adb (Analyze_Assignment): Improve the error message reported
when a CPP constructor is called in an assignment. Disable also the
error message associated with dyamically tagged expressions if the
exporession initializing a tagged type corresponds with a non default
CPP constructor.
* sem_prag.adb (Analyze_Pragma): Remove code disabling the use of
non-default C++ constructors.
* sem_util.ads, sem_util.adb (Is_CPP_Constructor_Call): New subprogram.
* exp_tss.ads, exp_tss.adb (Base_Init_Proc): Add support for
non-default constructors.
(Init_Proc): Add support for non-default constructors.
* exp_disp.adb (Set_Default_Constructor): Removed.
(Set_CPP_Constructors): Code based in removed Set_Default_Constructor
but extending its functionality to handle non-default constructors.
* exp_aggr.adb (Build_Record_Aggr_Code): Add support for non-default
constructors. Minor code cleanup removing unrequired label and goto
statement.
* exp_ch3.adb (Build_Initialization_Call): Add support for non-default
constructors.
(Build_Init_Statements): Add support for non-default constructors.
(Expand_N_Object_Declaration): Add support for non-default constructors.
(Freeze_Record_Type): Replace call to Set_Default_Constructor by call
to Set_CPP_Constructors.
* exp_ch5.adb (Expand_N_Assignment_Statement): Add support for
non-default constructors.
Required to handle its use in build-in-place statements.
* gnat_rm.texi (CPP_Constructor): Document new extended use of this
pragma for non-default C++ constructors and the new compiler support
that allows the use of these constructors in record components, limited
aggregates, and extended return statements.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146966 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/exp_disp.ads')
-rw-r--r-- | gcc/ada/exp_disp.ads | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/ada/exp_disp.ads b/gcc/ada/exp_disp.ads index ed866695246..c91798f2450 100644 --- a/gcc/ada/exp_disp.ads +++ b/gcc/ada/exp_disp.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2008, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -328,10 +328,13 @@ package Exp_Disp is -- Class case check that no pragma CPP_Virtual is missing and that the -- DT_Position are coherent - procedure Set_Default_Constructor (Typ : Entity_Id); - -- Typ is a CPP_Class type. Create the Init procedure of that type to - -- be the default constructor (i.e. the function returning this type, - -- having a pragma CPP_Constructor and no parameter) + procedure Set_CPP_Constructors (Typ : Entity_Id); + -- Typ is a CPP_Class type. Create the Init procedures of that type + -- required to handle its default and non-default constructors. The + -- functions to which pragma CPP_Constructor is applied in the sources + -- are functions returning this type, and having an implicit access to the + -- target object in its first argument; such implicit argument is explicit + -- in the IP procedures built here. procedure Set_DTC_Entity_Value (Tagged_Type : Entity_Id; |