From be42aa717c3018ccf1c7ce4267e02cfe9210cc1e Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Fri, 20 Jan 2017 15:49:28 +0100 Subject: [PATCH] [multiple changes] 2017-01-20 Hristian Kirtchev * exp_ch9.adb: minor style fixes in comments. * sem_ch9.adb (Analyze_Delay_Relative): in GNATprove mode a delay relative statement introduces an implicit dependency on Ada.Real_Time.Clock_Time. * sem_util.adb: Minor reformatting. 2017-01-20 Ed Schonberg * sem_ch13.adb (Analyze_Aspect_Specifications): Aspect Alignment must be treated as delayed aspect even if the expression is a literal, because the aspect affects the freezing and the elaboration of the object to which it applies. 2017-01-20 Tristan Gingold * s-osinte-vxworks.ads (Interrup_Range): New subtype. 2017-01-20 Ed Schonberg * lib-xref.adb (Generate_Reference): Do not warn about the presence of a pragma Unreferenced if the entity appears as the actual in a procedure call that does not come from source. 2017-01-20 Pascal Obry * expect.c, terminals.c: Fix some warnings about unused variables. * gsocket.h, adaint.c, adaint.h: Fix some more warnings in the C part of the runtime. 2017-01-20 Bob Duff * exp_attr.adb (Constrained): Apply an access check (check that the prefix is not null) when the prefix denotes an object of an access type; that is, when there is an implicit dereference. 2017-01-20 Gary Dismukes * s-rident.ads (constant Profile_Info): Remove No_Calendar from GNAT_Extended_Ravenscar restrictions. 2017-01-20 Tristan Gingold * s-maccod.ads: Add pragma No_Elaboration_Code_All From-SVN: r244718 --- gcc/ada/ChangeLog | 46 +++++++++++++++++++++ gcc/ada/adaint.h | 1 + gcc/ada/exp_attr.adb | 79 ++++++++++++++++++++---------------- gcc/ada/exp_ch9.adb | 14 +++---- gcc/ada/expect.c | 8 +++- gcc/ada/gsocket.h | 3 +- gcc/ada/lib-xref.adb | 8 ++++ gcc/ada/s-maccod.ads | 3 +- gcc/ada/s-osinte-vxworks.ads | 4 +- gcc/ada/s-rident.ads | 1 - gcc/ada/sem_ch13.adb | 5 ++- gcc/ada/sem_ch9.adb | 13 ++++++ gcc/ada/sem_util.adb | 76 +++++++++++++++++----------------- gcc/ada/terminals.c | 17 ++++---- 14 files changed, 185 insertions(+), 93 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 4db5a7d96e5..c6c5f920617 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,49 @@ +2017-01-20 Hristian Kirtchev + + * exp_ch9.adb: minor style fixes in comments. + * sem_ch9.adb (Analyze_Delay_Relative): in GNATprove mode a delay + relative statement introduces an implicit dependency on + Ada.Real_Time.Clock_Time. + * sem_util.adb: Minor reformatting. + +2017-01-20 Ed Schonberg + + * sem_ch13.adb (Analyze_Aspect_Specifications): Aspect Alignment + must be treated as delayed aspect even if the expression is + a literal, because the aspect affects the freezing and the + elaboration of the object to which it applies. + +2017-01-20 Tristan Gingold + + * s-osinte-vxworks.ads (Interrup_Range): New subtype. + +2017-01-20 Ed Schonberg + + * lib-xref.adb (Generate_Reference): Do not warn about the + presence of a pragma Unreferenced if the entity appears as the + actual in a procedure call that does not come from source. + +2017-01-20 Pascal Obry + + * expect.c, terminals.c: Fix some warnings about unused variables. + * gsocket.h, adaint.c, adaint.h: Fix some more warnings in the C part + of the runtime. + +2017-01-20 Bob Duff + + * exp_attr.adb (Constrained): Apply an access check (check that + the prefix is not null) when the prefix denotes an object of an + access type; that is, when there is an implicit dereference. + +2017-01-20 Gary Dismukes + + * s-rident.ads (constant Profile_Info): Remove + No_Calendar from GNAT_Extended_Ravenscar restrictions. + +2017-01-20 Tristan Gingold + + * s-maccod.ads: Add pragma No_Elaboration_Code_All + 2017-01-20 Hristian Kirtchev * ghost.adb (Mark_Ghost_Clause): New routine. diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h index 338b2ef70e0..232b5eb4371 100644 --- a/gcc/ada/adaint.h +++ b/gcc/ada/adaint.h @@ -108,6 +108,7 @@ typedef long OS_Time; #endif #define __int64 long long +GNAT_STRUCT_STAT; /* A lazy cache for the attributes of a file. On some systems, a single call to stat() will give all this information, so it is better than doing a system diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index c38db1eea75..72a7f53a4d1 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -2682,46 +2682,57 @@ package body Exp_Attr is Res := True; end if; end if; + else - -- If the prefix is not a variable or is aliased, then - -- definitely true; if it's a formal parameter without an - -- associated extra formal, then treat it as constrained. + -- For access type, apply access check as needed - -- Ada 2005 (AI-363): An aliased prefix must be known to be - -- constrained in order to set the attribute to True. + if Is_Access_Type (Ptyp) then + Apply_Access_Check (N); + end if; - elsif not Is_Variable (Pref) - or else Present (Formal_Ent) - or else (Ada_Version < Ada_2005 - and then Is_Aliased_View (Pref)) - or else (Ada_Version >= Ada_2005 - and then Is_Constrained_Aliased_View (Pref)) - then - Res := True; + -- If the prefix is not a variable or is aliased, then + -- definitely true; if it's a formal parameter without an + -- associated extra formal, then treat it as constrained. - -- Variable case, look at type to see if it is constrained. - -- Note that the one case where this is not accurate (the - -- procedure formal case), has been handled above. + -- Ada 2005 (AI-363): An aliased prefix must be known to be + -- constrained in order to set the attribute to True. - -- We use the Underlying_Type here (and below) in case the - -- type is private without discriminants, but the full type - -- has discriminants. This case is illegal, but we generate it - -- internally for passing to the Extra_Constrained parameter. + if not Is_Variable (Pref) + or else Present (Formal_Ent) + or else (Ada_Version < Ada_2005 + and then Is_Aliased_View (Pref)) + or else (Ada_Version >= Ada_2005 + and then Is_Constrained_Aliased_View (Pref)) + then + Res := True; - else - -- In Ada 2012, test for case of a limited tagged type, in - -- which case the attribute is always required to return - -- True. The underlying type is tested, to make sure we also - -- return True for cases where there is an unconstrained - -- object with an untagged limited partial view which has - -- defaulted discriminants (such objects always produce a - -- False in earlier versions of Ada). (Ada 2012: AI05-0214) - - Res := Is_Constrained (Underlying_Type (Etype (Ent))) - or else - (Ada_Version >= Ada_2012 - and then Is_Tagged_Type (Underlying_Type (Ptyp)) - and then Is_Limited_Type (Ptyp)); + -- Variable case, look at type to see if it is constrained. + -- Note that the one case where this is not accurate (the + -- procedure formal case), has been handled above. + + -- We use the Underlying_Type here (and below) in case the + -- type is private without discriminants, but the full type + -- has discriminants. This case is illegal, but we generate + -- it internally for passing to the Extra_Constrained + -- parameter. + + else + -- In Ada 2012, test for case of a limited tagged type, + -- in which case the attribute is always required to + -- return True. The underlying type is tested, to make + -- sure we also return True for cases where there is an + -- unconstrained object with an untagged limited partial + -- view which has defaulted discriminants (such objects + -- always produce a False in earlier versions of + -- Ada). (Ada 2012: AI05-0214) + + Res := + Is_Constrained (Underlying_Type (Etype (Ent))) + or else + (Ada_Version >= Ada_2012 + and then Is_Tagged_Type (Underlying_Type (Ptyp)) + and then Is_Limited_Type (Ptyp)); + end if; end if; Rewrite (N, New_Occurrence_Of (Boolean_Literals (Res), Loc)); diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index 9ea30eebe57..d2772caf1e0 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -4524,7 +4524,7 @@ package body Exp_Ch9 is -- If actual is an out parameter of a null-excluding -- access type, there is access check on entry, so set -- Suppress_Assignment_Checks on the generated statement - -- that assigns the actual to the parameter block + -- that assigns the actual to the parameter block. Set_Suppress_Assignment_Checks (Last (Stats)); end if; @@ -6817,7 +6817,7 @@ package body Exp_Ch9 is Insert_Before (N, Decl); Analyze (Decl); - -- Rewrite abortable part into a call to this procedure. + -- Rewrite abortable part into a call to this procedure Astats := New_List ( @@ -9030,7 +9030,7 @@ package body Exp_Ch9 is elsif Restriction_Active (No_Implicit_Heap_Allocations) then if not Discriminated_Size (Defining_Identifier (Priv)) then - -- Any object of the type will be non-static. + -- Any object of the type will be non-static Error_Msg_N ("component has non-static size??", Priv); Error_Msg_NE @@ -9039,7 +9039,7 @@ package body Exp_Ch9 is & "No_Implicit_Heap_Allocations??", Priv, Prot_Typ); else - -- Object will be non-static if discriminants are. + -- Object will be non-static if discriminants are Error_Msg_NE ("creation of protected object of type& with " @@ -9055,7 +9055,7 @@ package body Exp_Ch9 is then if not Discriminated_Size (Defining_Identifier (Priv)) then - -- Any object of the type will be non-static. + -- Any object of the type will be non-static Error_Msg_N ("component has non-static size??", Priv); Error_Msg_NE @@ -9064,7 +9064,7 @@ package body Exp_Ch9 is & "No_Implicit_Protected_Object_Allocations??", Priv, Prot_Typ); else - -- Object will be non-static if discriminants are. + -- Object will be non-static if discriminants are Error_Msg_NE ("creation of protected object of type& with " @@ -13769,7 +13769,7 @@ package body Exp_Ch9 is Expression (First (Pragma_Argument_Associations (Prio_Clause))); - -- Get_Rep_Item returns either priority pragma. + -- Get_Rep_Item returns either priority pragma if Pragma_Name (Prio_Clause) = Name_Priority then Prio_Type := RTE (RE_Any_Priority); diff --git a/gcc/ada/expect.c b/gcc/ada/expect.c index 4da70180b77..a19ec561199 100644 --- a/gcc/ada/expect.c +++ b/gcc/ada/expect.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 2001-2015, AdaCore * + * Copyright (C) 2001-2016, 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- * @@ -388,7 +388,9 @@ __gnat_expect_poll (int *fd, int max_fd = 0; int ready; int i; +#ifdef __hpux__ int received; +#endif *dead_process = 0; @@ -413,14 +415,18 @@ __gnat_expect_poll (int *fd, if (ready > 0) { +#ifdef __hpux__ received = 0; +#endif for (i = 0; i < num_fd; i++) { if (FD_ISSET (fd[i], &rset)) { is_set[i] = 1; +#ifdef __hpux__ received = 1; +#endif } else is_set[i] = 0; diff --git a/gcc/ada/gsocket.h b/gcc/ada/gsocket.h index a979d3a0c1d..b343b0942c6 100644 --- a/gcc/ada/gsocket.h +++ b/gcc/ada/gsocket.h @@ -6,7 +6,7 @@ * * * C Header File * * * - * Copyright (C) 2004-2015, Free Software Foundation, Inc. * + * Copyright (C) 2004-2016, 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- * @@ -201,6 +201,7 @@ #include #include #include +#include #endif #ifdef __ANDROID__ diff --git a/gcc/ada/lib-xref.adb b/gcc/ada/lib-xref.adb index 6c42d2b6fad..4d9fe6919e4 100644 --- a/gcc/ada/lib-xref.adb +++ b/gcc/ada/lib-xref.adb @@ -863,6 +863,14 @@ package body Lib.Xref is elsif Is_On_LHS (N) then null; + -- No warning if the reference is in a call that does not come + -- from source (e.g. a call to a controlled type primitive). + + elsif not Comes_From_Source (Parent (N)) + and then Nkind (Parent (N)) = N_Procedure_Call_Statement + then + null; + -- For entry formals, we want to place the warning message on the -- corresponding entity in the accept statement. The current scope -- is the body of the accept, so we find the formal whose name diff --git a/gcc/ada/s-maccod.ads b/gcc/ada/s-maccod.ads index a95e319cb98..353cb0586e8 100644 --- a/gcc/ada/s-maccod.ads +++ b/gcc/ada/s-maccod.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2016, 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- -- @@ -34,6 +34,7 @@ -- for full details. package System.Machine_Code is + pragma No_Elaboration_Code_All; pragma Pure; -- All identifiers in this unit are implementation defined diff --git a/gcc/ada/s-osinte-vxworks.ads b/gcc/ada/s-osinte-vxworks.ads index 0129b593b0f..10152343a61 100644 --- a/gcc/ada/s-osinte-vxworks.ads +++ b/gcc/ada/s-osinte-vxworks.ads @@ -7,7 +7,7 @@ -- S p e c -- -- -- -- Copyright (C) 1991-1994, Florida State University -- --- Copyright (C) 1995-2015, Free Software Foundation, Inc. -- +-- Copyright (C) 1995-2016, Free Software Foundation, Inc. -- -- -- -- GNARL 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- -- @@ -83,6 +83,8 @@ package System.OS_Interface is type HW_Interrupt is new int range 0 .. Max_HW_Interrupt; Max_Interrupt : constant := Max_HW_Interrupt; + subtype Interrupt_Range is Natural range 0 .. Max_HW_Interrupt; + -- For s-interr -- Signals common to Vxworks 5.x and 6.x diff --git a/gcc/ada/s-rident.ads b/gcc/ada/s-rident.ads index beb42f8fc56..3228bacaac6 100644 --- a/gcc/ada/s-rident.ads +++ b/gcc/ada/s-rident.ads @@ -567,7 +567,6 @@ package System.Rident is -- plus these additional restrictions: - No_Calendar => True, No_Implicit_Task_Allocations => True, No_Implicit_Protected_Object_Allocations => True, diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index c9832bef5e4..5e8822a4970 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -2044,9 +2044,12 @@ package body Sem_Ch13 is if A_Id in Boolean_Aspects and then No (Expr) then Delay_Required := False; - -- For non-Boolean aspects, don't delay if integer literal + -- For non-Boolean aspects, don't delay if integer literal, + -- unless the aspect is Alignment, which affects the + -- freezing of an initialized object. elsif A_Id not in Boolean_Aspects + and then A_Id /= Aspect_Alignment and then Present (Expr) and then Nkind (Expr) = N_Integer_Literal then diff --git a/gcc/ada/sem_ch9.adb b/gcc/ada/sem_ch9.adb index 97c9335c4f6..b26e2b4eabd 100644 --- a/gcc/ada/sem_ch9.adb +++ b/gcc/ada/sem_ch9.adb @@ -1162,6 +1162,19 @@ package body Sem_Ch9 is Check_Potentially_Blocking_Operation (N); Analyze_And_Resolve (E, Standard_Duration); Check_Restriction (No_Fixed_Point, E); + + -- In SPARK mode the relative delay statement introduces an implicit + -- dependency on the Ada.Real_Time.Clock_Time abstract state, so we must + -- force the loading of the Ada.Real_Time package. + + if GNATprove_Mode then + declare + Unused : Entity_Id; + + begin + Unused := RTE (RO_RT_Time); + end; + end if; end Analyze_Delay_Relative; ------------------------- diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index baf6f2c66fc..0e1a0c0a574 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -16151,9 +16151,9 @@ package body Sem_Util is -- NCT_Assoc -- --------------- - -- The hash table NCT_Assoc associates old entities in the table - -- with their corresponding new entities (i.e. the pairs of entries - -- presented in the original Map argument are Key-Element pairs). + -- The hash table NCT_Assoc associates old entities in the table with their + -- corresponding new entities (i.e. the pairs of entries presented in the + -- original Map argument are Key-Element pairs). package NCT_Assoc is new Simple_HTable ( Header_Num => NCT_Header_Num, @@ -16167,10 +16167,10 @@ package body Sem_Util is -- NCT_Itype_Assoc -- --------------------- - -- The hash table NCT_Itype_Assoc contains entries only for those - -- old nodes which have a non-empty Associated_Node_For_Itype set. - -- The key is the associated node, and the element is the new node - -- itself (NOT the associated node for the new node). + -- The hash table NCT_Itype_Assoc contains entries only for those old + -- nodes which have a non-empty Associated_Node_For_Itype set. The key + -- is the associated node, and the element is the new node itself (NOT + -- the associated node for the new node). package NCT_Itype_Assoc is new Simple_HTable ( Header_Num => NCT_Header_Num, @@ -16227,9 +16227,9 @@ package body Sem_Util is -- Called during first phase to visit all elements of an Elist procedure Visit_Field (F : Union_Id; N : Node_Id); - -- Visit a single field, recursing to call Visit_Node or Visit_List - -- if the field is a syntactic descendant of the current node (i.e. - -- its parent is Node N). + -- Visit a single field, recursing to call Visit_Node or Visit_List if + -- the field is a syntactic descendant of the current node (i.e. its + -- parent is Node N). procedure Visit_Itype (Old_Itype : Entity_Id); -- Called during first phase to visit subsidiary fields of a defining @@ -16286,6 +16286,7 @@ package body Sem_Util is procedure Build_NCT_Hash_Tables is Elmt : Elmt_Id; Ent : Entity_Id; + begin if NCT_Hash_Table_Setup then NCT_Assoc.Reset; @@ -16309,9 +16310,9 @@ package body Sem_Util is begin if Present (Anode) then - -- Enter a link between the associated node of the - -- old Itype and the new Itype, for updating later - -- when node is copied. + -- Enter a link between the associated node of the old + -- Itype and the new Itype, for updating later when node + -- is copied. NCT_Itype_Assoc.Set (Anode, Node (Elmt)); end if; @@ -16470,19 +16471,18 @@ package body Sem_Util is if Nkind (Old_E) = N_Parameter_Association and then Present (Next_Named_Actual (Old_E)) then - if First_Named_Actual (Old_Node) - = Explicit_Actual_Parameter (Old_E) + if First_Named_Actual (Old_Node) = + Explicit_Actual_Parameter (Old_E) then Set_First_Named_Actual (New_Node, Explicit_Actual_Parameter (New_E)); end if; - -- Now scan parameter list from the beginning,to locate + -- Now scan parameter list from the beginning, to locate -- next named actual, which can be out of order. Old_Next := First (Parameter_Associations (Old_Node)); New_Next := First (Parameter_Associations (New_Node)); - while Nkind (Old_Next) /= N_Parameter_Association or else Explicit_Actual_Parameter (Old_Next) /= Next_Named_Actual (Old_E) @@ -16728,8 +16728,8 @@ package body Sem_Util is -- Note: the exclusion of self-referential copies is just an -- optimization, since the search of the already copied list - -- would catch it, but it is a common case (Etype pointing - -- to itself for an Itype that is a base type). + -- would catch it, but it is a common case (Etype pointing to + -- itself for an Itype that is a base type). elsif Has_Extension (Node_Id (F)) and then Is_Itype (Entity_Id (F)) @@ -16785,8 +16785,8 @@ package body Sem_Util is New_Itype := New_Copy (Old_Itype); - -- The new Itype has all the attributes of the old one, and - -- we just copy the contents of the entity. However, the back-end + -- The new Itype has all the attributes of the old one, and we + -- just copy the contents of the entity. However, the back-end -- needs different names for debugging purposes, so we create a -- new internal name for it in all cases. @@ -16803,7 +16803,6 @@ package body Sem_Util is -- Case of hash tables used if NCT_Hash_Tables_Used then - Ent := NCT_Assoc.Get (Associated_Node_For_Itype (Old_Itype)); if Present (Ent) then @@ -16811,11 +16810,12 @@ package body Sem_Util is end if; Ent := NCT_Itype_Assoc.Get (Old_Itype); + if Present (Ent) then Set_Associated_Node_For_Itype (Ent, New_Itype); - -- If the hash table has no association for this Itype and - -- its associated node, enter one now. + -- If the hash table has no association for this Itype and its + -- associated node, enter one now. else NCT_Itype_Assoc.Set @@ -16872,7 +16872,7 @@ package body Sem_Util is -- If a record subtype is simply copied, the entity list will be -- shared. Thus cloned_Subtype must be set to indicate the sharing. - if Ekind_In (Old_Itype, E_Record_Subtype, E_Class_Wide_Subtype) then + if Ekind_In (Old_Itype, E_Class_Wide_Subtype, E_Record_Subtype) then Set_Cloned_Subtype (New_Itype, Old_Itype); end if; @@ -16889,14 +16889,14 @@ package body Sem_Util is elsif Is_Array_Type (Old_Itype) then if Present (First_Index (Old_Itype)) then - Visit_Field (Union_Id (List_Containing - (First_Index (Old_Itype))), - Old_Itype); + Visit_Field + (Union_Id (List_Containing (First_Index (Old_Itype))), + Old_Itype); end if; if Is_Packed (Old_Itype) then - Visit_Field (Union_Id (Packed_Array_Impl_Type (Old_Itype)), - Old_Itype); + Visit_Field + (Union_Id (Packed_Array_Impl_Type (Old_Itype)), Old_Itype); end if; end if; end Visit_Itype; @@ -16923,17 +16923,14 @@ package body Sem_Util is ---------------- procedure Visit_Node (N : Node_Or_Entity_Id) is - - -- Start of processing for Visit_Node - begin -- Handle case of an Itype, which must be copied if Has_Extension (N) and then Is_Itype (N) then -- Nothing to do if already in the list. This can happen with an - -- Itype entity that appears more than once in the tree. - -- Note that we do not want to visit descendants in this case. + -- Itype entity that appears more than once in the tree. Note that + -- we do not want to visit descendants in this case. -- Test for already in list when hash table is used @@ -17005,13 +17002,13 @@ package body Sem_Util is end; end if; - -- Hash table set up if required, now start phase one by visiting - -- top node (we will recursively visit the descendants). + -- Hash table set up if required, now start phase one by visiting top + -- node (we will recursively visit the descendants). Visit_Node (Source); - -- Now the second phase of the copy can start. First we process - -- all the mapped entities, copying their descendants. + -- Now the second phase of the copy can start. First we process all the + -- mapped entities, copying their descendants. if Present (Actual_Map) then declare @@ -17026,6 +17023,7 @@ package body Sem_Util is if Is_Itype (New_Itype) then Copy_Itype_With_Replacement (New_Itype); end if; + Next_Elmt (Elmt); end loop; end; diff --git a/gcc/ada/terminals.c b/gcc/ada/terminals.c index 675ac35c49a..35185c7c675 100644 --- a/gcc/ada/terminals.c +++ b/gcc/ada/terminals.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 2008-2015, AdaCore * + * Copyright (C) 2008-2016, 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- * @@ -1410,7 +1410,8 @@ __gnat_setup_child_communication #ifdef TIOCSCTTY /* make the tty the controlling terminal */ - status = ioctl (desc->slave_fd, TIOCSCTTY, 0); + if ((status = ioctl (desc->slave_fd, TIOCSCTTY, 0)) == -1) + return -1; #endif /* adjust tty settings */ @@ -1424,8 +1425,10 @@ __gnat_setup_child_communication if (desc->slave_fd > 2) close (desc->slave_fd); /* adjust process group settings */ - status = setpgid (pid, pid); - status = tcsetpgrp (0, pid); + if ((status = setpgid (pid, pid)) == -1) + return -1; + if ((status = tcsetpgrp (0, pid)) == -1) + return -1; /* launch the program */ execvp (new_argv[0], new_argv); @@ -1562,9 +1565,9 @@ pty_desc * __gnat_new_tty (void) { int status; - pty_desc* desc; - status = allocate_pty_desc (&desc); - child_setup_tty (desc->master_fd); + pty_desc* desc = NULL; + if ((status = allocate_pty_desc (&desc))) + child_setup_tty (desc->master_fd); return desc; } -- 2.30.2