diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2015-11-18 11:03:44 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2015-11-18 11:03:44 +0100 |
commit | 5904016a5c1d7df58877678583a3f65ebecc052d (patch) | |
tree | 51c383861941a122ba6296c8658ad90d4501fb03 | |
parent | 287aa0ed9267e7afe6d9350a6b5b95f271db28ce (diff) | |
download | gcc-5904016a5c1d7df58877678583a3f65ebecc052d.zip gcc-5904016a5c1d7df58877678583a3f65ebecc052d.tar.gz gcc-5904016a5c1d7df58877678583a3f65ebecc052d.tar.bz2 |
[multiple changes]
2015-11-18 Hristian Kirtchev <kirtchev@adacore.com>
* sem_util.adb (Has_Full_Default_Initialization):
Perform the test for the presence of pragma
Default_Initial_Condition prior to the specialized type
checks. Add a missing case where the lack of a pragma argument
yields full default initialization.
2015-11-18 Hristian Kirtchev <kirtchev@adacore.com>
* sem_res.adb (Resolve_Entity_Name): Do not check
for elaboration issues when a variable appears as the name of
an object renaming declaration as this constitutes an aliasing,
not a read.
2015-11-18 Ed Schonberg <schonberg@adacore.com>
* checks.adb (Overlap_Check): An actual that is an aggregate
cannot overlap with another actual, and no check should be
generated for it.
* targparm.ads: Fix typos.
2015-11-18 Pascal Obry <obry@adacore.com>
* adaint.c: Routine __gnat_killprocesstree only implemented on
Linux and Windows.
2015-11-18 Pascal Obry <obry@adacore.com>
* g-ctrl_c.adb: Minor style fixes.
From-SVN: r230523
-rw-r--r-- | gcc/ada/ChangeLog | 31 | ||||
-rw-r--r-- | gcc/ada/adaint.c | 8 | ||||
-rw-r--r-- | gcc/ada/checks.adb | 14 | ||||
-rw-r--r-- | gcc/ada/g-ctrl_c.adb | 10 | ||||
-rw-r--r-- | gcc/ada/sem_res.adb | 8 | ||||
-rw-r--r-- | gcc/ada/sem_util.adb | 46 | ||||
-rw-r--r-- | gcc/ada/targparm.ads | 4 |
7 files changed, 99 insertions, 22 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f330589..0d3923a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,34 @@ +2015-11-18 Hristian Kirtchev <kirtchev@adacore.com> + + * sem_util.adb (Has_Full_Default_Initialization): + Perform the test for the presence of pragma + Default_Initial_Condition prior to the specialized type + checks. Add a missing case where the lack of a pragma argument + yields full default initialization. + +2015-11-18 Hristian Kirtchev <kirtchev@adacore.com> + + * sem_res.adb (Resolve_Entity_Name): Do not check + for elaboration issues when a variable appears as the name of + an object renaming declaration as this constitutes an aliasing, + not a read. + +2015-11-18 Ed Schonberg <schonberg@adacore.com> + + * checks.adb (Overlap_Check): An actual that is an aggregate + cannot overlap with another actual, and no check should be + generated for it. + * targparm.ads: Fix typos. + +2015-11-18 Pascal Obry <obry@adacore.com> + + * adaint.c: Routine __gnat_killprocesstree only implemented on + Linux and Windows. + +2015-11-18 Pascal Obry <obry@adacore.com> + + * g-ctrl_c.adb: Minor style fixes. + 2015-11-18 Pascal Obry <obry@adacore.com> * adaint.c, s-os_lib.adb, s-os_lib.ads (Kill_Process_Tree): New. diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index 4f162e9..5a0bdd9 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -3259,7 +3259,11 @@ void __gnat_killprocesstree (int pid, int sig_num) /* kill process */ __gnat_kill (pid, sig_num, 1); -#else + +#elif defined (__vxworks) + /* not implemented */ + +#elif defined (__linux__) DIR *dir; struct dirent *d; @@ -3308,6 +3312,8 @@ void __gnat_killprocesstree (int pid, int sig_num) /* kill process */ __gnat_kill (pid, sig_num, 1); +#else + __gnat_kill (pid, sig_num, 1); #endif /* Note on Solaris it is possible to read /proc/<PID>/status. The 5th and 6th words are the pid and the 7th and 8th the ppid. diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index b5086cc..64dcf57 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -2359,9 +2359,19 @@ package body Checks is -- Ensure that the actual is an object that is not passed by value. -- Elementary types are always passed by value, therefore actuals of - -- such types cannot lead to aliasing. + -- such types cannot lead to aliasing. An aggregate is an object in + -- Ada 2012, but an actual that is an aggregate cannot overlap with + -- another actual. - if Is_Object_Reference (Original_Actual (Actual_1)) + if Nkind (Original_Actual (Actual_1)) = N_Aggregate + or else + (Nkind (Original_Actual (Actual_1)) = N_Qualified_Expression + and then Nkind (Expression (Original_Actual (Actual_1))) = + N_Aggregate) + then + null; + + elsif Is_Object_Reference (Original_Actual (Actual_1)) and then not Is_Elementary_Type (Etype (Original_Actual (Actual_1))) then Actual_2 := Next_Actual (Actual_1); diff --git a/gcc/ada/g-ctrl_c.adb b/gcc/ada/g-ctrl_c.adb index e832920..edd7dc6 100644 --- a/gcc/ada/g-ctrl_c.adb +++ b/gcc/ada/g-ctrl_c.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002-2010, AdaCore -- +-- Copyright (C) 2002-2015, AdaCore -- -- -- -- 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- -- @@ -39,11 +39,19 @@ package body GNAT.Ctrl_C is procedure C_Handler; pragma Convention (C, C_Handler); + --------------- + -- C_Handler -- + --------------- + procedure C_Handler is begin Ada_Handler.all; end C_Handler; + --------------------- + -- Install_Handler -- + --------------------- + procedure Install_Handler (Handler : Handler_Type) is procedure Internal (Handler : C_Handler_Type); pragma Import (C, Internal, "__gnat_install_int_handler"); diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index f6d71ce..0e2d1c7 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -7231,9 +7231,13 @@ package body Sem_Res is & "(SPARK RM 7.1.3(12))", N); end if; - -- Check possible elaboration issues with respect to variables + -- Check for possible elaboration issues with respect to reads of + -- variables. The act of renaming the variable is not considered a + -- read as it simply establishes an alias. - if Ekind (E) = E_Variable then + if Ekind (E) = E_Variable + and then Nkind (Par) /= N_Object_Renaming_Declaration + then Check_Elab_Call (N); end if; end if; diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 435f03b..036cc0c 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -8852,9 +8852,41 @@ package body Sem_Util is ------------------------------------- function Has_Full_Default_Initialization (Typ : Entity_Id) return Boolean is + Arg : Node_Id; Comp : Entity_Id; + Prag : Node_Id; begin + -- A private type and its full view is fully default initialized when it + -- is subject to pragma Default_Initial_Condition without an argument or + -- with a non-null argument. Since any type may act as the full view of + -- a private type, this check must be performed prior to the specialized + -- tests below. + + if Has_Default_Init_Cond (Typ) + or else Has_Inherited_Default_Init_Cond (Typ) + then + Prag := Get_Pragma (Typ, Pragma_Default_Initial_Condition); + + -- Pragma Default_Initial_Condition must be present if one of the + -- related entity flags is set. + + pragma Assert (Present (Prag)); + Arg := First (Pragma_Argument_Associations (Prag)); + + -- A non-null argument guarantees full default initialization + + if Present (Arg) then + return Nkind (Arg) /= N_Null; + + -- Otherwise the missing argument defaults the pragma to "True" which + -- is considered a non-null argument (see above). + + else + return True; + end if; + end if; + -- A scalar type is fully default initialized if it is subject to aspect -- Default_Value. @@ -8911,20 +8943,6 @@ package body Sem_Util is elsif Is_Task_Type (Typ) then return True; - end if; - - -- A private type and by extension its full view is fully default - -- initialized if it is subject to pragma Default_Initial_Condition - -- with a non-null argument or inherits the pragma from a parent type. - -- Since any type can act as the full view of a private type, this check - -- is separated from the circuitry above. - - if Has_Default_Init_Cond (Typ) - or else Has_Inherited_Default_Init_Cond (Typ) - then - return - Nkind (First (Pragma_Argument_Associations (Get_Pragma - (Typ, Pragma_Default_Initial_Condition)))) /= N_Null; -- Otherwise the type is not fully default initialized diff --git a/gcc/ada/targparm.ads b/gcc/ada/targparm.ads index 21780d1..ed24ea7 100644 --- a/gcc/ada/targparm.ads +++ b/gcc/ada/targparm.ads @@ -53,7 +53,7 @@ -- 1. Configuration pragmas, that must appear at the start of the file. -- Any such pragmas automatically apply to any unit compiled in the -- presence of this system file. Only a limited set of such pragmas --- may appear as documented in the corresponding section below, +-- may appear as documented in the corresponding section below. -- 2. Target parameters. These are boolean constants that are defined -- in the private part of the package giving fixed information @@ -107,7 +107,7 @@ package Targparm is -- If a pragma Detect_Blocking appears, then the flag Opt.Detect_Blocking -- is set to True. - -- if a pragma Suppress_Exception_Locations appears, then the flag + -- If a pragma Suppress_Exception_Locations appears, then the flag -- Opt.Exception_Locations_Suppressed is set to True. -- If a pragma Profile with a valid profile argument appears, then |