aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog40
-rw-r--r--gcc/ada/exp_aggr.adb16
-rw-r--r--gcc/ada/gnatlink.adb20
-rw-r--r--gcc/ada/krunch.adb20
-rw-r--r--gcc/ada/sem_ch12.adb29
-rw-r--r--gcc/ada/sem_ch5.adb8
-rw-r--r--gcc/ada/sem_prag.adb33
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 <kirtchev@adacore.com>
+
+ * sem_ch5.adb: Minor reformatting.
+
+2016-04-21 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_ch2.adb (Expand_Current_Value): Make an appropriate
+ character literal if the entity is of a character type.
+
+2016-04-21 Arnaud Charlet <charlet@adacore.com>
+
+ * exp_aggr.adb (Backend_Processing_Possible): Return False
+ when generating C and aggregate contains function calls.
+
+2016-04-21 Tristan Gingold <gingold@adacore.com>
+
+ * krunch.adb (Krunch): Only partially krunch children of
+ Interfaces that aren't known.
+
+2016-04-21 Ed Schonberg <schonberg@adacore.com>
+
+ * 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 <fofanov@adacore.com>
+
+ * 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 <gil@adacore.com>
* 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 5f77f571..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;