diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2017-01-13 11:01:38 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2017-01-13 11:01:38 +0100 |
commit | 66340e0e9a029aa5cbba0e63f66e5319c1286ce4 (patch) | |
tree | 12f33f495cd3ec7d0d45593615bbbfd492d8805c /gcc/ada/exp_ch6.adb | |
parent | 27bb79414764b83bf6c7208d6081afd01f98869f (diff) | |
download | gcc-66340e0e9a029aa5cbba0e63f66e5319c1286ce4.zip gcc-66340e0e9a029aa5cbba0e63f66e5319c1286ce4.tar.gz gcc-66340e0e9a029aa5cbba0e63f66e5319c1286ce4.tar.bz2 |
[multiple changes]
2017-01-13 Tristan Gingold <gingold@adacore.com>
* s-mmap.adb, s-mmap.ads (Open_Read_No_Exception): New function.
(Open_Read): Re-implement using Open_Read_No_Exception.
(Open_Write): Raise exception in case of error.
* s-mmosin-mingw.adb (Open_Common): Do not raise exception.
* s-mmosin-unix.adb (Open_Read, Open_Write): Do not
reaise exception.
* s-mmosin-mingw.ads, s-mmosin-unix.ads (Open_Read): Adjust comment.
2017-01-13 Yannick Moy <moy@adacore.com>
* checks.adb: Code cleanup.
2017-01-13 Yannick Moy <moy@adacore.com>
* freeze.adb (Check_Inherited_Conditions): Use analyzed pragma
expression instead of unanalyzed aspect expression for checking
the validity of inheriting an operation. Also copy the expression
being passing it to Build_Class_Wide_Expression, as this call
modifies its argument.
* sem_util.ads Fix comment to reference correct function name
New_Copy_Tree.
2017-01-13 Javier Miranda <miranda@adacore.com>
* sem_res.adb (Resolve_Generalized_Indexing): Compiling in ASIS mode,
when we propagate information about the indexes back to the original
indexing mode and the prefix of the index is a function call, do not
remove any parameter from such call.
2017-01-13 Gary Dismukes <dismukes@adacore.com>
* exp_ch6.ads (Needs_BIP_Finalization_Master): Update comment.
* exp_ch6.adb (Needs_BIP_Finalization_Master): Return True for
a build-in-place function whose result type is tagged.
2017-01-13 Yannick Moy <moy@adacore.com>
* sem_ch8.adb (Analyze_Subprogram_Renaming.Build_Class_Wide_Wrapper):
Do not generate a wrapper when the only candidate is a class-wide
subprogram.
(Analyze_Subprogram_Renaming): Do not freeze the renaming or renamed
inside a generic context.
From-SVN: r244399
Diffstat (limited to 'gcc/ada/exp_ch6.adb')
-rw-r--r-- | gcc/ada/exp_ch6.adb | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index 77b8ad2..04122e3 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -8378,9 +8378,20 @@ package body Exp_Ch6 is pragma Assert (Is_Build_In_Place_Function (Func_Id)); Func_Typ : constant Entity_Id := Underlying_Type (Etype (Func_Id)); begin + -- A formal giving the finalization master is needed for build-in-place + -- functions whose result type needs finalization or is a tagged type. + -- Tagged primitive build-in-place functions need such a formal because + -- they can be called by a dispatching call, and extensions may require + -- finalization even if the root type doesn't. This means they're also + -- needed for tagged nonprimitive build-in-place functions with tagged + -- results, since such functions can be called via access-to-function + -- types, and those can be used to call primitives, so masters have to + -- be passed to all such build-in-place functions, primitive or not. + return not Restriction_Active (No_Finalization) - and then Needs_Finalization (Func_Typ); + and then (Needs_Finalization (Func_Typ) + or else Is_Tagged_Type (Func_Typ)); end Needs_BIP_Finalization_Master; -------------------------- |