aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/exp_ch6.adb
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2017-01-13 11:01:38 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2017-01-13 11:01:38 +0100
commit66340e0e9a029aa5cbba0e63f66e5319c1286ce4 (patch)
tree12f33f495cd3ec7d0d45593615bbbfd492d8805c /gcc/ada/exp_ch6.adb
parent27bb79414764b83bf6c7208d6081afd01f98869f (diff)
downloadgcc-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.adb13
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;
--------------------------