From 2d6aa71558f460ef00af8420e81e01f46d95da84 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Thu, 21 Apr 2016 10:50:36 +0200 Subject: [PATCH] [multiple changes] 2016-04-21 Hristian Kirtchev * sem_ch5.adb: Minor reformatting. 2016-04-21 Eric Botcazou * exp_ch2.adb (Expand_Current_Value): Make an appropriate character literal if the entity is of a character type. 2016-04-21 Arnaud Charlet * exp_aggr.adb (Backend_Processing_Possible): Return False when generating C and aggregate contains function calls. 2016-04-21 Tristan Gingold * krunch.adb (Krunch): Only partially krunch children of Interfaces that aren't known. 2016-04-21 Ed Schonberg * sem_prag.adb (Make_Inline): Handle properly the instantiation of a generic subpprogram that carries an Inline aspect. Place inline info on the anonymous subprogram that is constructed in the wrapper package. (Analyze_Pragma, case Pure): Do not check placement if pragma appears within an instantiation, which can be nested at any level. * sem_ch12.adb (Analyze_Instance_And_Renamings): Do not copy Freeze node from anonymous subprogram to its visible renaming. The freeze node will be constructed if the subprogram carries delayed aspects. (Set_Global): Preserve dimension information if present (from code reading). 2016-04-21 Vasiliy Fofanov * gnatlink.adb: Change wording of the warning message on problematic filenames to be more neutral. Add a new substring "patch" introduced on Windows 10. From-SVN: r235313 --- gcc/ada/ChangeLog | 40 ++++++++++++++++++++++++++++++++++++++++ gcc/ada/exp_aggr.adb | 16 ++++++++++++---- gcc/ada/gnatlink.adb | 20 +++++++++----------- gcc/ada/krunch.adb | 20 ++++++++++++++++++-- gcc/ada/sem_ch12.adb | 29 ++++++++++++++++++++++++++--- gcc/ada/sem_ch5.adb | 8 +++++--- gcc/ada/sem_prag.adb | 33 +++++++++++++++++++++++++-------- 7 files changed, 135 insertions(+), 31 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 0203415..f52d8e3 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,43 @@ +2016-04-21 Hristian Kirtchev + + * sem_ch5.adb: Minor reformatting. + +2016-04-21 Eric Botcazou + + * exp_ch2.adb (Expand_Current_Value): Make an appropriate + character literal if the entity is of a character type. + +2016-04-21 Arnaud Charlet + + * exp_aggr.adb (Backend_Processing_Possible): Return False + when generating C and aggregate contains function calls. + +2016-04-21 Tristan Gingold + + * krunch.adb (Krunch): Only partially krunch children of + Interfaces that aren't known. + +2016-04-21 Ed Schonberg + + * sem_prag.adb (Make_Inline): Handle properly the instantiation + of a generic subpprogram that carries an Inline aspect. Place + inline info on the anonymous subprogram that is constructed in + the wrapper package. + (Analyze_Pragma, case Pure): Do not check placement if pragma + appears within an instantiation, which can be nested at any level. + * sem_ch12.adb (Analyze_Instance_And_Renamings): Do not copy Freeze + node from anonymous subprogram to its visible renaming. The + freeze node will be constructed if the subprogram carries + delayed aspects. + (Set_Global): Preserve dimension information if present (from + code reading). + +2016-04-21 Vasiliy Fofanov + + * gnatlink.adb: Change wording of the warning message on + problematic filenames to be more neutral. Add a new substring + "patch" introduced on Windows 10. + 2016-04-21 Philippe Gil * tracebak.c (__gnat_backtrace): handle bad RIP values (win64 only) diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index a99b6ce..20932d3 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -547,14 +547,16 @@ package body Exp_Aggr is -- 11. When generating C code, N must be part of a N_Object_Declaration + -- 12. When generating C code, N must not include function calls + function Backend_Processing_Possible (N : Node_Id) return Boolean is Typ : constant Entity_Id := Etype (N); -- Typ is the correct constrained array subtype of the aggregate function Component_Check (N : Node_Id; Index : Node_Id) return Boolean; -- This routine checks components of aggregate N, enforcing checks - -- 1, 7, 8, and 9. In the multi-dimensional case, these checks are - -- performed on subaggregates. The Index value is the current index + -- 1, 7, 8, 9, 11 and 12. In the multi-dimensional case, these checks + -- are performed on subaggregates. The Index value is the current index -- being checked in the multi-dimensional case. --------------------- @@ -573,7 +575,7 @@ package body Exp_Aggr is -- Checks 11: (part of an object declaration) - if Generate_C_Code + if Modify_Tree_For_C and then Nkind (Parent (N)) /= N_Object_Declaration and then (Nkind (Parent (N)) /= N_Qualified_Expression @@ -613,6 +615,12 @@ package body Exp_Aggr is return False; end if; + -- Checks 12: (no function call) + + if Modify_Tree_For_C and then Nkind (Expr) = N_Function_Call then + return False; + end if; + -- Recursion to following indexes for multiple dimension case if Present (Next_Index (Index)) @@ -4106,7 +4114,7 @@ package body Exp_Aggr is Analyze_And_Resolve (N, Typ); end if; - -- Is Static_Eaboration_Desired has been specified, diagnose aggregates + -- If Static_Eaboration_Desired has been specified, diagnose aggregates -- that will still require initialization code. if (Ekind (Current_Scope) = E_Package diff --git a/gcc/ada/gnatlink.adb b/gcc/ada/gnatlink.adb index 67b07b2..a46580a 100644 --- a/gcc/ada/gnatlink.adb +++ b/gcc/ada/gnatlink.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1996-2015, Free Software Foundation, Inc. -- +-- Copyright (C) 1996-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- -- @@ -1680,10 +1680,10 @@ begin -- Special warnings for worrisome file names on windows - -- Windows-7 will not allow an executable file whose name contains any - -- of the substrings "install", "setup", or "update" to load without - -- special administration privileges. This rather incredible behavior - -- is Microsoft's idea of a useful security precaution. + -- Recent versions of Windows by default cause privilege escalation if an + -- executable file name contains substrings "install", "setup", "update" + -- or "patch". A console application will typically fail to load as a + -- result, so we should warn the user. Bad_File_Names_On_Windows : declare FN : String := Output_File_Name.all; @@ -1696,13 +1696,10 @@ begin for J in 1 .. FN'Length - (S'Length - 1) loop if FN (J .. J + (S'Length - 1)) = S then Error_Msg - ("warning: possible problem with executable name """ - & Output_File_Name.all & '"'); + ("warning: executable file name """ & Output_File_Name.all + & """ contains substring """ & S & '"'); Error_Msg - ("file name contains substring """ & S & '"'); - Error_Msg - ("admin privileges may be required on Windows 7 " - & "to load this file"); + ("admin privileges may be required to run this file"); end if; end loop; end Check_File_Name; @@ -1723,6 +1720,7 @@ begin Check_File_Name ("install"); Check_File_Name ("setup"); Check_File_Name ("update"); + Check_File_Name ("patch"); end if; end Bad_File_Names_On_Windows; diff --git a/gcc/ada/krunch.adb b/gcc/ada/krunch.adb index 79f9de1..6c3b785 100644 --- a/gcc/ada/krunch.adb +++ b/gcc/ada/krunch.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2014, 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- -- @@ -95,7 +95,23 @@ begin Startloc := 3; Buffer (2 .. Len - 9) := Buffer (11 .. Len); Curlen := Len - 9; - Krlen := 8; + + -- Only fully krunch historical units. For new units, simply use + -- the 'i-' prefix instead of 'interfaces-'. Packages Interfaces.C + -- and Interfaces.Cobol are already in the right form. Package + -- Interfaces.Definitions is krunched for backward compatibility. + + if (Curlen > 3 and then Buffer (3 .. 4) = "c-") + or else (Curlen > 3 and then Buffer (3 .. 4) = "c_") + or else (Curlen = 13 and then Buffer (3 .. 13) = "definitions") + or else (Curlen = 9 and then Buffer (3 .. 9) = "fortran") + or else (Curlen = 16 and then Buffer (3 .. 16) = "packed_decimal") + or else (Curlen > 9 and then Buffer (3 .. 9) = "vxworks") + then + Krlen := 8; + else + Krlen := Maxlen; + end if; -- For the renamings in the obsolescent section, we also force krunching -- to 8 characters, but no other special processing is required here. diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 5f77f57..1d4d5c0 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2015, 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- -- @@ -4947,9 +4947,13 @@ package body Sem_Ch12 is Set_Cunit_Entity (Current_Sem_Unit, Pack_Id); end if; - -- The instance is not a freezing point for the new subprogram + -- The instance is not a freezing point for the new subprogram. + -- The anonymous subprogram may have a freeze node, created for + -- some delayed aspects. This freeze node must not be inherited + -- by the visible subprogram entity. - Set_Is_Frozen (Act_Decl_Id, False); + Set_Is_Frozen (Act_Decl_Id, False); + Set_Freeze_Node (Act_Decl_Id, Empty); if Nkind (Defining_Entity (N)) = N_Defining_Operator_Symbol then Valid_Operator_Definition (Act_Decl_Id); @@ -7690,6 +7694,18 @@ package body Sem_Ch12 is end if; end if; + -- Propagate dimensions if present, so that they are reflected in the + -- instance. + + if Nkind (N) in N_Has_Etype + and then (Nkind (N) in N_Op or else Is_Entity_Name (N)) + and then Present (Etype (N)) + and then Is_Floating_Point_Type (Etype (N)) + and then Has_Dimension_System (Etype (N)) + then + Copy_Dimensions (N, New_N); + end if; + return New_N; end Copy_Generic_Node; @@ -14140,6 +14156,13 @@ package body Sem_Ch12 is Set_Etype (N2, Full_View (Typ)); end if; end if; + + if Is_Floating_Point_Type (Typ) + and then Has_Dimension_System (Typ) + then + Copy_Dimensions (N2, N); + end if; + end Set_Global_Type; ------------------ diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index 138da4d..9b4d589 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -2201,9 +2201,11 @@ package body Sem_Ch5 is Error_Msg_N ("variable container expected", N); end if; - -- It could be a function, which - -- Is_Dependent_Component_Of_Mutable_Object doesn't like, - -- so check that it's a component. + -- Detect a case where the iterator denotes a component + -- of a mutable object which depends on a discriminant. + -- Note that the iterator may denote a function call in + -- qualified form, in which case this check should not + -- be performed. if Nkind (Orig_Iter_Name) = N_Selected_Component and then Ekind_In diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index c538caf..4d1b2b1b 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2015, 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- -- @@ -8610,9 +8610,16 @@ package body Sem_Prag is -- Processing for procedure, operator or function. If subprogram -- is aliased (as for an instance) indicate that the renamed -- entity (if declared in the same unit) is inlined. + -- If this is the anonymous subprogram created for a subprogram + -- instance, the inlining applies to it directly. Otherwise we + -- retrieve it as the alias of the visible subprogram instance. if Is_Subprogram (Subp) then - Inner_Subp := Ultimate_Alias (Inner_Subp); + if Is_Wrapper_Package (Scope (Subp)) then + Inner_Subp := Subp; + else + Inner_Subp := Ultimate_Alias (Inner_Subp); + end if; if In_Same_Source_Unit (Subp, Inner_Subp) then Set_Inline_Flags (Inner_Subp); @@ -8624,18 +8631,20 @@ package body Sem_Prag is then Set_Inline_Flags (Corresponding_Body (Decl)); - elsif Is_Generic_Instance (Subp) then - + elsif Is_Generic_Instance (Subp) + and then Comes_From_Source (Subp) + then -- Indicate that the body needs to be created for -- inlining subsequent calls. The instantiation node -- follows the declaration of the wrapper package - -- created for it. + -- created for it. The subprogram that requires the + -- body is the anonymous one in the wrapper package. if Scope (Subp) /= Standard_Standard and then Need_Subprogram_Instance_Body - (Next (Unit_Declaration_Node (Scope (Alias (Subp)))), - Subp) + (Next (Unit_Declaration_Node + (Scope (Alias (Subp)))), Subp) then null; end if; @@ -19397,7 +19406,15 @@ package body Sem_Prag is begin Check_Ada_83_Warning; - Check_Valid_Library_Unit_Pragma; + + -- If the pragma comes from a subprogram instantiation, nothing to + -- check, this can happen at any level of nesting. + + if Is_Wrapper_Package (Current_Scope) then + return; + else + Check_Valid_Library_Unit_Pragma; + end if; if Nkind (N) = N_Null_Statement then return; -- 2.7.4