Age | Commit message (Collapse) | Author | Files | Lines |
|
2018-12-03 Gary Dismukes <dismukes@adacore.com>
gcc/ada/
* exp_ch3.adb, libgnarl/s-taasde.adb, libgnarl/s-taenca.adb,
libgnarl/s-tarest.adb, libgnarl/s-tasini.adb,
libgnarl/s-taskin.ads, libgnarl/s-tasren.adb,
libgnarl/s-tassta.adb, libgnarl/s-tasuti.adb: Spelling fixes and
minor reformatting.
From-SVN: r266756
|
|
This prevents either a crash or an assertion failure in gigi on an array
with dynamic subtype that is wrongly flagged as static by the front-end
because of a recent improvement made in the handling of nested
aggregates.
The patch reuses the existing Static_Array_Aggregate predicate instead
of fixing the problematic test, pluging a few loopholes in the process.
The predicate is conservatively correct but should be good enough in
practice.
2018-12-03 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_aggr.adb (Convert_To_Positional): Use
Static_Array_Aggregate to decide whether to set
Compile_Time_Known_Aggregate on an already flat aggregate.
(Expand_Array_Aggregate): Remove test on
Compile_Time_Known_Aggregate that turns out to be dead and
simplify.
(Is_Static_Component): New predicate extracted from...
(Static_Array_Aggregate): ...here. Test neither Is_Tagged_Type
nor Is_Controlled for the type, but test whether the component
type has discriminants. Use the Is_Static_Component predicate
consistently for the positional and named cases.
gcc/testsuite/
* gnat.dg/array32.adb, gnat.dg/array32.ads: New testcase.
From-SVN: r266755
|
|
This fixes an assertion failure in gigi triggered by the instantiation
of a generic package, in a visible part of another package, done on a
private type whose full view is a type derived from a scalar or an
access type.
The problem is that the front-end creates and inserts two different
freeze nodes in the expanded tree for the partial and the full views of
the private subtype created by the instantiation, which is not correct:
partial and full views of a given (sub)type must point to the same
freeze node, if any.
The patch also adds an assertion checking this property in the front-end
so as to catch the inconsistency higher in the chain.
2018-12-03 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* freeze.adb (Freeze_Entity): Do not freeze the partial view of
a private subtype if its base type is also private with delayed
freeze before the full type declaration of the base type has
been seen.
* sem_ch7.adb (Preserve_Full_Attributes): Add assertion on
freeze node.
gcc/testsuite/
* gnat.dg/generic_inst2.adb, gnat.dg/generic_inst2.ads,
gnat.dg/generic_inst2_c.ads: New testcase.
From-SVN: r266754
|
|
The change reverts the test deciding whether an initialization procedure
can be inherited from parent to derived type to the original
implementation, which allowed inheriting a null procedure.
This prevents the creation of another null initialization procedure for
the derived type, which in turn can avoid an artificial overloading
which can wreak havoc in the analysis of private declarations of a
package.
2018-12-03 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_ch3.adb (Build_Record_Init_Proc): Inherit an
initialization procedure if it is present, even if it is null.
gcc/testsuite/
* gnat.dg/overload2.adb, gnat.dg/overload2_p.adb,
gnat.dg/overload2_p.ads, gnat.dg/overload2_q.adb,
gnat.dg/overload2_q.ads: New testcase.
From-SVN: r266753
|
|
This patch resolves the issue where the ATC Level of a task's first
Entry_Call slot corresponds to a task not currently making an entry
call. Consequently, the first slot is never used to record an entry
call. To resolve this, the ATC Level of a such a task is now one less
than the first index of the Entry_Call array (and as result, the ATC
level corresponding to a completed task is now two less than the first
index of this array).
To aid the maintainability of code using ATC levels new constants are
introduced to represent key ATC nesting levels and comments are
introduce for the ATC level definitions.
As a result of this change, the GNAT Extended Ravenscar Profile now
works with the full runtime. The restricted runtime had assumed that the
first Entry_Call slot would be the only slot used for entry calls and
would only initialise this slot (and
System.Tasking.Protected_Objects.Single_Entry was coded this way).
However, Extended Ravenscar uses the native implementation of
System.Tasking.Protected_Objects where this assumption doesn't hold
until the implementation of this patch. Aside from enabling an extra
nested level, this is main functional change of this patch.
The following should compile and execute quietly:
gprbuild -q main.adb
./main
-- main.adb
pragma Profile (GNAT_Extended_Ravenscar);
pragma Partition_Elaboration_Policy (Sequential);
with Tasks;
with GNAT.OS_Lib;
with Ada.Synchronous_Task_Control;
procedure Main is
pragma Priority (30);
begin
Ada.Synchronous_Task_Control.Suspend_Until_True (Tasks.A_SO);
Ada.Synchronous_Task_Control.Suspend_Until_True (Tasks.B_SO);
GNAT.OS_Lib.OS_Exit (0);
end Main;
-- tasks.ads
with Ada.Synchronous_Task_Control;
package Tasks is
A_SO : Ada.Synchronous_Task_Control.Suspension_Object;
B_SO : Ada.Synchronous_Task_Control.Suspension_Object;
task A with Priority => 25;
task B with Priority => 20;
end Tasks;
-- tasks.adb
with Obj;
package body Tasks is
task body A is
begin
for J in 1 .. 5 loop
Obj.PO.Wait;
end loop;
Ada.Synchronous_Task_Control.Set_True (Tasks.A_SO);
end A;
task body B is
begin
for J in 1 .. 5 loop
Obj.PO.Put;
end loop;
Ada.Synchronous_Task_Control.Set_True (Tasks.B_SO);
end B;
end Tasks;
-- obj.ads
package Obj is
protected type PT is
pragma Priority (30);
entry Put;
entry Wait;
private
Wait_Ready : Boolean := False;
Put_Ready : Boolean := True;
end PT;
PO : PT;
end Obj;
-- obj.adb
package body Obj is
protected body PT is
entry Put when Put_Ready is
begin
Wait_Ready := True;
Put_Ready := False;
end Put;
entry Wait when Wait_Ready is
begin
Wait_Ready := False;
Put_Ready := True;
end Wait;
end PT;
end Obj;
2018-12-03 Patrick Bernardi <bernardi@adacore.com>
gcc/ada/
* libgnarl/s-taskin.ads (ATC_Level_Base): Redefine to span from
-1 to Max_ATC_Nesting so that 0 represents no ATC nesting and -1
represented a completed task. To increase readability, new
constants are introduced to represent key ATC nesting levels.
Consequently, Level_No_Pending_Abort replaces
ATC_Level_Infinity. ATC_Level related definitions now
documented.
(Ada_Task_Control_Block): The default initialization of
components ATC_Nesting_Level and Pending_ATC_Level now use new
ATC_Level_Base constants. Comments improved
* libgnarl/s-taskin.adb (Initialize): Improve the initialisation
of the first element of the Entry_Calls array to facilitate
better maintenance.
* libgnarl/s-taasde.ads: Update comment.
* libgnarl/s-taasde.adb, libgnarl/s-taenca.adb,
libgnarl/s-tasren.adb, libgnarl/s-tassta.adb,
libgnarl/s-tasuti.ads, libgnarl/s-tasuti.adb: Use new
ATC_Level_Base constants.
* libgnarl/s-tarest.adb (Create_Restricted_Task): Improve the
initialisation of the first element of the task's Entry_Calls
array to facilitate better maintenance.
* libgnarl/s-tasini.ads (Locked_Abort_To_Level): Update
signature to accept ATC_Level_Base.
* libgnarl/s-tasini.adb (Locked_Abort_To_Level): Update
signature to accept ATC_Level_Base. Use new ATC_Level_Base
constants and only modify the aborting task's Entry_Calls array
if any entry call is happening.
* libgnarl/s-tposen.adb (Protected_Single_Entry_Call): Reference
the first element of the task's Entry_Calls array via 'First
attribute to facilitate better maintenance.
From-SVN: r266752
|
|
This fixes a couple of assertion failures when using -gnatde and -gnatdv
on a compiler built with assertions enabled. No functional changes.
2018-12-03 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* einfo.adb (Write_Entity_Info): Don't take Scope of Standard
package.
* sem_ch4.adb (Remove_Abstract_Operations): Add missing blank
lines to -gnatdv output.
* sem_type.adb (Write_Overloads): Take Entity of entity names
only.
From-SVN: r266751
|
|
2018-12-03 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* checks.adb, exp_aggr.adb, exp_attr.adb, exp_ch3.adb,
exp_util.adb, exp_util.ads, repinfo.adb, sem_attr.adb,
sem_ch3.adb, sem_res.adb, sem_util.adb: Minor reformatting.
From-SVN: r266750
|
|
2018-12-03 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch3.adb (Complete_Private_Subtype): Enhance comment.
From-SVN: r266749
|
|
Matching front-end bits to support Acc_Kernels, Acc_Parallel,
Acc_Loop and Acc_Data.
2018-12-03 Olivier Hainque <hainque@adacore.com>
gcc/ada/
* gcc-interface/lang.opt (fopenacc): New option for Ada.
* gcc-interface/misc.c (gnat_handle_option): Handle it.
* gcc-interface/trans.c (struct loop_info_d): Add OMP
attributes.
(Iterate_Acc_Clause_Arg, Acc_gnat_to_gnu): New functions,
helpers for OpenACC pragmas processing in Pragma_to_gnu.
(Acc_Var_to_gnu, Acc_Reduc_Var_to_gnu, Acc_Reduc_to_gnu):
Likewise.
(Acc_Size_Expr_to_gnu, Acc_Size_List_to_gnu): Likewise.
(Pragma_Acc_Data_to_gnu): Likewise.
(Pragma_to_gnu): Handle Pragma_Acc_Loop, Pragma_Acc_Data,
Pragma_Acc_Kernels and Pragma_Acc_Parallel.
(Acc_Loop_to_gnu, Regular_Loop_to_gnu): New functions. Helpers
for ...
(Loop_Statement_to_gnu): Rework to handle OpenACC loops.
From-SVN: r266748
|
|
Instead of 2 * LONG_TYPE_SIZE. POINTER_SIZE is believed to be the
correct base on more configurations than LONG_TYPE_SIZE and this
adjustment prevents the need for local patches to compensate on
configurations where the latter is inappropriate, for example
x86_64-mingw.
2018-12-03 Olivier Hainque <hainque@adacore.com>
gcc/ada/
* gcc-interface/targtyps.c (MALLOC_OBSERVABLE_ALIGNMENT): Set to
2 * POINTER_SIZE.
From-SVN: r266747
|
|
This patch fixes a constraint check on a dependent expression of an
if-expression, when the context if given by a slice or the 'Range of
an array. The constraint check is applied if the context is constrained,
but the corresponding flag was not set for the index subtype generated
for a slice (explicit or implicit).
Executing:
gprbuild -P test -q main
./main
Must yield:
raised CONSTRAINT_ERROR : foo.ads:13 range check failed
----
with Types;
generic
Buffer : in out Types.Buffer;
package Foo
is
function Get (Pos : Natural) return Integer;
private
function Get (Pos : Natural) return Integer
is (Buffer ((if Pos in Buffer'Range then Pos else Buffer'First)));
end Foo;
----
with Foo;
with Types;
with Usefoo;
procedure Main is
Z : Types.Buffer := (Natural'Last .. Natural'Last - 1 => 0);
R : Integer;
begin
Usefoo.Do_Something (Z, R);
end Main;
----
pragma SPARK_Mode (On);
pragma Profile (Ravenscar);
pragma Partition_Elaboration_Policy (Sequential);
----
project Test is
package Compiler is
for Default_Switches ("Ada") use ("-gnatws");
for Local_Configuration_Pragmas use "test.adc";
end Compiler;
end Test;
----
package Types
is
subtype Natural_Without_Last is Natural range 1 .. Natural'Last - 1;
type Buffer is array (Natural_Without_Last range <>) of Integer;
end Types;
----
with Foo;
package body Usefoo
is
procedure Do_Something (B : in out Types.Buffer;
R : out Integer)
is
package F is new Foo (B (B'First .. B'First + B'Length / 2 - 1));
begin
R := F.Get (B'First + B'Length / 2 - 1);
end Do_Something;
end Usefoo;
----
with Types;
package Usefoo
is
procedure Do_Something (B : in out Types.Buffer;
R : out Integer)
with Pre => B'First > 0;
end Usefoo;
2018-12-03 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_res.adb (Set_Slice_Subtype): The index type of a slice is
constrained.
From-SVN: r266746
|
|
declared in "Linux"))
2018-11-26 Matthias Klose <doko@ubuntu.com>
PR ada/88191
* libgnarl/s-linux__alpha.ads: Define SIGSYS.
From-SVN: r266459
|
|
gnattools build machinery uses just-build xgcc and xg++ as $(CC) and
$(CXX) in native builds. However, if C and C++ languages are not
enabled, it won't find them. So, enable C and C++ if Ada is enabled.
Most of the time, this is probably no big deal: C is always enabled
anyway, and C++ is already enabled for bootstraps.
We need not enable those for cross builds, however. At first I just
took the logic from gnattools/configure, but found it to be lacking:
it would use the just-built tools even in cross-back settings, whose
tools just built for the host would not run on the build machine. So
I've narrowed down the test to rely on autoconf-detected cross-ness
(build->host only), but also to ensure that host matches build, and
that target matches host.
I've considered sourcing ada/config-lang.in from within
gnattools/configure, and testing lang_requires as set by it, so as to
avoid a duplication of tests that ought to remain in sync, but decided
it would be too fragile, as ada/config-lang.in does not expect srcdir
to refer to gnattools.
for gcc/ada/ChangeLog
PR ada/81878
* gcc-interface/config-lang.in (lang_requires): Set to "c c++"
when gnattools wants it.
for gnattools/ChangeLog
PR ada/81878
* configure.ac (default_gnattools_target): Do not mistake
just-built host tools as native in cross-back toolchains.
* configure: Rebuilt.
From-SVN: r266290
|
|
From-SVN: r266266
|
|
From-SVN: r266265
|
|
passed on the command line in...
* gcc-interface/misc.c (gnat_init_gcc_eh): Do not override the switch
-fnon-call-exceptions passed on the command line in -gnatp mode.
From-SVN: r266176
|
|
The XOR operation applied to a boolean array whose component type has
the range True .. True raises constraint error. Previous to this patch,
the expansion of the operation could lead to uplevel references that
were not handled properly when unnesting is in effect.
2018-11-14 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_util.ads, exp_util.adb: Change the profile of
Silly_Boolean_Array_Xor_Test, adding a formal that can be a copy
of the right opersnd. This prevents unnesting anomalies when
that operand contains uplevel references.
* exp_ch4.adb (Expand_Boolean_Operation): Use this new profile.
* exp_pakd.adb (Expand_Packed_Boolean_Operator): Ditto.
From-SVN: r266137
|
|
Add the signal SIGSYS and mark the glibc reserved real-time signals
(32-34) as reserved rather than not maskable.
2018-11-14 Patrick Bernardi <bernardi@adacore.com>
gcc/ada/
* libgnarl/a-intnam__linux.ads: Add SIGSYS.
* libgnarl/s-linux__alpha.ads, libgnarl/s-linux__android.ads,
libgnarl/s-linux__hppa.ads, libgnarl/s-linux__mips.ads,
libgnarl/s-linux__riscv.ads, libgnarl/s-linux__sparc.ads,
libgnarl/s-linux__x32.ads: Rename SIGLTHRRES, SIGLTHRCAN and
SIGLTHRDBG to SIG32, SIG33 and SIG34 as their names are
implementation specific.
* libgnarl/s-osinte__linux.ads, libgnarl/s-linux.ads: Add
SIGSYS. Move SIG32, SIG33 and SIG34 from the unmasked list to
the reserved list.
gcc/testsuite/
* gnat.dg/rt_signals.adb: New testcase.
From-SVN: r266136
|
|
This change is aimed at fixing a fallout of bumping the default value of
the Max_Others_Replicate parameter of the Convert_To_Positional routine.
This parameter is responsible for taming the duplication of the
expression of an others choice in an array aggregate so that it doesn't
result in a code size explosion.
Unfortunately a fine-grained control based on the analysis of the
expression is not really possible because this analysis has not been
done yet by the time the decision is made in most cases, so the usual
syntactic ambiguities of the language come into play and make the
process a bit cumbersome. For example, it is not possible to
distinguish a simple reference to a static constant declared in another
unit from a call to a parameterless function.
Therefore the change errs on the side of caution and allows the
duplication only if the expression is unambiguously static and
sufficiently simple.
For the following three aggregates, the duplication must be blocked and
the elaboration of the aggregates must be done by means of a loop:
with Q; use Q;
procedure P is
A : Arr := (others => Get_Value);
B : Arr := (others => Get_Other_Value (0));
C : Arr := (others => Q.Get_Other_Value (1));
begin
null;
end;
package Q is
type Arr is array (1 .. 32) of Integer;
function Get_Value return Integer;
function Get_Other_Value (I : integer) return Integer;
end Q;
2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_aggr.adb (Is_Static_Element): New predicate extracted
from...
(Check_Static_Components): ...here. Call Is_Static_Element on
each element of the component association list, if any.
(Flatten): Duplicate the expression of an others choice only if
it is static or is an aggregate which can itself be flattened.
From-SVN: r266135
|
|
2018-11-14 Olivier Hainque <hainque@adacore.com>
gcc/ada/
* sigtramp-vxworks-target.inc: Fix stack checking test errors in
ACATS, now that GCC can emit CFI rules referring to sp in
absence of a frame pointer.
From-SVN: r266134
|
|
N_Quantified_Expression and N_Iterated_Component_Association are
unrelated nodes that cannot appear in the same context: the former can
appear wherever an expression node is acceptable whereas the latter can
appear only as an element of a component association list. So a test
combining both most likely contains a dead arm and this change removes a
couple of them.
No functional changes.
2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_aggr.adb (Check_Static_Components): Remove dead test.
(Flatten): Likewise. Move comment around.
From-SVN: r266133
|
|
This patch modifies the analysis (which is really expansion) of null
procedures to set the Ghost mode of the spec when the null procedure
acts as a completion. This ensures that all nodes and entities
generated by the expansion are marked as Ghost, and provide a proper
context for references to Ghost entities.
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_ch6.adb (Analyze_Null_Procedure): Capture Ghost and
SPARK-related global state at the start of the routine. Set the
Ghost mode of the completed spec if any. Restore the saved
Ghost and SPARK-related global state on exit from the routine.
gcc/testsuite/
* gnat.dg/ghost1.adb, gnat.dg/ghost1.ads: New testcase.
From-SVN: r266132
|
|
This adds a 4th information level for the -gnatR output, where relevant
compiler-generated types are listed in addition to the information
already output by -gnatR3.
For the following package P:
package P is
type Arr0 is array (Positive range <>) of Boolean;
type Rec (D1 : Positive; D2 : Boolean) is record
C1 : Integer;
C2 : Arr0 (1 .. D1);
case D2 is
when False =>
C3 : Character;
when True =>
C4 : String (1 .. 3);
C5 : Float;
end case;
end record;
type Arr1 is array (1 .. 8) of Rec (1, True);
end P;
the output generated by -gnatR4 must be:
Representation information for unit P (spec)
--------------------------------------------
for Arr0'Alignment use 1;
for Arr0'Component_Size use 8;
for Rec'Object_Size use 17179869344;
for Rec'Value_Size use (if (#2 != 0) then ((((#1 + 15) & -4) + 8) * 8)
else ((((#1 + 15) & -4) + 1) * 8) end);
for Rec'Alignment use 4;
for Rec use record
D1 at 0 range 0 .. 31;
D2 at 4 range 0 .. 7;
C1 at 8 range 0 .. 31;
C2 at 12 range 0 .. ((#1 * 8)) - 1;
C3 at ((#1 + 15) & -4) range 0 .. 7;
C4 at ((#1 + 15) & -4) range 0 .. 23;
C5 at (((#1 + 15) & -4) + 4) range 0 .. 31;
end record;
for Arr1'Size use 1536;
for Arr1'Alignment use 4;
for Arr1'Component_Size use 192;
for Tarr1c'Size use 192;
for Tarr1c'Alignment use 4;
for Tarr1c use record
D1 at 0 range 0 .. 31;
D2 at 4 range 0 .. 7;
C1 at 8 range 0 .. 31;
C2 at 12 range 0 .. 7;
C4 at 16 range 0 .. 23;
C5 at 20 range 0 .. 31;
end record;
2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* doc/gnat_ugn/building_executable_programs_with_gnat.rst
(-gnatR): Document new -gnatR4 level.
* gnat_ugn.texi: Regenerate.
* opt.ads (List_Representation_Info): Bump upper bound to 4.
* repinfo.adb: Add with clause for GNAT.HTable.
(Relevant_Entities_Size): New constant.
(Entity_Header_Num): New type.
(Entity_Hash): New function.
(Relevant_Entities): New set implemented with GNAT.HTable.
(List_Entities): Also list compiled-generated entities present
in the Relevant_Entities set. Consider that the Component_Type
of an array type is relevant.
(List_Rep_Info): Reset Relevant_Entities for each unit.
* switch-c.adb (Scan_Front_End_Switches): Add support for -gnatR4.
* switch-m.adb (Normalize_Compiler_Switches): Likewise
* usage.adb (Usage): Likewise.
From-SVN: r266131
|
|
The frontend crashes processing a tagged type that implements an
interface which has an equality primitive (that is, "=") and covers such
primitive by means of a renaming declaration.
2018-11-14 Javier Miranda <miranda@adacore.com>
gcc/ada/
* exp_disp.adb (Expand_Interface_Thunk): Extend handling of
renamings of the predefined equality primitive.
(Make_Secondary_DT): When calling Expand_Interface_Thunk() pass
it the primitive, instead of its Ultimate_Alias; required to
allow the called routine to identify renamings of the predefined
equality operation.
gcc/testsuite/
* gnat.dg/equal5.adb, gnat.dg/equal5.ads: New testcase.
From-SVN: r266130
|
|
This patch allows for aspect/pragma Suppress_Initialization to be an
acceptable form of missing initialization with respect to the semantics
of pragma Thread_Local_Storage.
------------
-- Source --
------------
-- gnat.adc
pragma Initialize_Scalars;
-- pack.ads
with System;
package Pack is
Addr : System.Address
with Thread_Local_Storage, Suppress_Initialization;
end Pack;
-----------------
-- Compilation --
-----------------
$ gcc -c pack.ads
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* freeze.adb (Check_Pragma_Thread_Local_Storage): New routine. A
variable with suppressed initialization has no initialization
for purposes of the pragma.
(Freeze_Object_Declaration): Remove variable
Has_Default_Initialization as it is no longer used. Use routine
Check_Pragma_Thread_Local_Storage to verify the semantics of
pragma Thread_Local_Storage.
From-SVN: r266129
|
|
If the context of an if-expression is constrained, its dependent
expressions must obey the constraints of the expected type. Prior to
this patch, this check was performed only for scalar types, by means of
an added conversion. This is now enforced on all types by means of a
qualified expression on each dependent expression.
Compiling ce.adb must yield:
ce.adb:33:21: warning: string length wrong for type "T" defined at line 5
ce.adb:33:21: warning: "Constraint_Error" will be raised at run time
ce.adb:37:39: warning: string length wrong for type "T" defined at line 5
ce.adb:37:39: warning: "Constraint_Error" will be raised at run time
ce.adb:38:39: warning: too few elements for type "T" defined at line 5
ce.adb:38:39: warning: "Constraint_Error" will be raised at run time
ce.adb:39:39: warning: too few elements for type "T" defined at line 5
ce.adb:39:39: warning: "Constraint_Error" will be raised at run time
----
with Text_IO;
procedure Ce is
package Aerodrome_Identifier is
subtype T is String (1 .. 4);
end;
package Flight_Identifier is
type T is
record
ADEP : Aerodrome_Identifier.T;
Counter : Positive;
end record;
end;
procedure Assign (X : Flight_Identifier.T) is
begin
Text_IO.Put_Line (X.ADEP); -- outputs the 4 zero bytes
end;
function Env_Aerodrome_Value return String is ("ABCD");
function Void return String is ("What?");
function Void2 return String is
begin
return "who knows";
end;
Here : Aerodrome_Identifier.T;
type Four is range 1 .. 4;
Nothing : String := "";
begin
Assign((ADEP =>
(if (Void'Length = 5)
then "" --!! This value should always raise Constraint_Error !!
else Env_Aerodrome_Value & "!"),
Counter=> 17));
Here := (if (Void'Length = 5) then "" else Env_Aerodrome_Value);
Here := (if (Void'Length = 5) then Nothing else Env_Aerodrome_Value);
Here := (if (Void'Length = 5) then Void2 (1..3) else Void2 & Void);
end;
----
2018-11-14 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_res.adb (Resolve_If_Expression): Verify that the subtypes
of all dependent expressions obey the constraints of the
expected type for the if-expression.
(Analyze_Expression): Only add qualificiation to the dependent
expressions when the context type is constrained. Small
adjustment to previous patch.
From-SVN: r266128
|
|
There is no point in validating 'Alignment or 'Size of an entity
declared in a generic unit after the back-end has been run, since such
an entity is not passed to the back-end, and this can even lead to an
assertion failure.
2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Don't
register a compile-time warning or error for 'Alignment or 'Size
of an entity declared in a generic unit.
gcc/testsuite/
* gnat.dg/compile_time_error1.adb,
gnat.dg/compile_time_error1.ads,
gnat.dg/compile_time_error1_pkg.ads: New testcase.
From-SVN: r266127
|
|
This patch fixes an issue whereby a complicated set of generic formal
packages in conjunction with use_clauses may cause a crash during
visibility checking due to a homonym being out of scope during the
checking stage.
2018-11-14 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_ch8.adb (Use_One_Package): Add test for out-of-scope
homonyms.
gcc/testsuite/
* gnat.dg/generic_pkg.adb: New testcase.
From-SVN: r266126
|
|
This patch fixes a compiler abort on an object declaration whose
expression is an aggregate, when the type of the object is limited and
the declaration is followed by an address clause for the declared
object.
2018-11-14 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_ch3.adb: (Expand_N_Object_Declaration): If the expression
is a limited aggregate its resolution is delayed until the
object declaration is expanded.
* sem_ch3.adb: (Analyze_Object_Declaration): If the expression
is a limited aggregate and the declaration has a following
address clause indicate that resolution of the aggregate (which
must be built in place) must be delayed.
gcc/testsuite/
* gnat.dg/limited_aggr.adb, gnat.dg/limited_aggr.ads: New
testcase.
From-SVN: r266125
|
|
System'To_Address is supposed to be static when its parameter is static.
This patch fixes a bug in which it is considered nonstatic when used as
the initial value of a variable with the Thread_Local_Storage aspect, so
the compiler incorrectly gives an error when initializing such a
variable with System'To_Address (0).
2018-11-14 Bob Duff <duff@adacore.com>
gcc/ada/
* sem_attr.adb (To_Address): Simplify setting of
Is_Static_Expression. Remove second (unconditional) call to
Set_Is_Static_Expression -- surely it's not static if the
operand is not. Initialize Static on declaration. Do not try
to fold 'To_Address, even though it's static.
* exp_attr.adb (To_Address): Preserve Is_Static_Expression.
* sinfo.ads, sem_eval.ads, sem_eval.adb (Is_Static_Expression,
Is_OK_Static_Expression, Raises_Constraint_Error): Simplify
documentation. There was too much repetition and redundancy.
From-SVN: r266124
|
|
This patch recognizes additional object declarations whose defining
identifier is known statically to be valid. This allows additional
optimizations to be performed by the front-end.
Executing:
gcc -c -gnatDG p.ads
On the following sources:
----
with G;
With Q;
package P is
Val : constant Positive := Q.Config_Value ("Size");
package My_G is new G (Val);
end P;
----
generic
Num : Natural := 0;
package G is
Multi : constant Boolean := Num > 0;
type Info is array (True .. Multi) of Integer;
type Arr is array (Natural range <>) of Boolean;
type Rec (D : Natural) is record
C : character;
I : Info;
E : Arr (0 .. D);
end record;
end G;
----
package Q is
function Config_Value (S : String) return Integer;
end Q;
----
Must yield (note that variable Multi has been statically optimized to
true):
----
with g;
with q;
p_E : short_integer := 0;
package p is
p__R2s : constant integer := q.q__config_value ("Size");
[constraint_error when
not (p__R2s >= 1)
"range check failed"]
p__val : constant positive := p__R2s;
package p__my_g is
p__my_g__num : constant natural := p__val;
package p__my_g__g renames p__my_g;
package p__my_g__gGH renames p__my_g__g;
p__my_g__multi : constant boolean := true;
type p__my_g__info is array (true .. p__my_g__multi) of integer;
type p__my_g__arr is array (0 .. 16#7FFF_FFFF# range <>) of
boolean;
type p__my_g__rec (d : natural) is record
c : character;
i : p__my_g__info;
e : p__my_g__arr (0 .. d);
end record;
[type p__my_g__TinfoB is array (true .. p__my_g__multi range <>) of
integer]
freeze p__my_g__TinfoB [
procedure p__my_g__TinfoBIP (_init : in out p__my_g__TinfoB) is
begin
null;
return;
end p__my_g__TinfoBIP;
]
freeze p__my_g__info []
freeze p__my_g__arr [
procedure p__my_g__arrIP (_init : in out p__my_g__arr) is
begin
null;
return;
end p__my_g__arrIP;
]
freeze p__my_g__rec [
procedure p__my_g__recIP (_init : in out p__my_g__rec; d :
natural) is
begin
_init.d := d;
null;
return;
end p__my_g__recIP;
]
end p__my_g;
package my_g is new g (p__val);
end p;
freeze_generic info
[subtype TinfoD1 is boolean range true .. multi]
freeze_generic TinfoD1
[type TinfoB is array (true .. multi range <>) of integer]
freeze_generic TinfoB
freeze_generic arr
freeze_generic rec
----
2018-11-14 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch3.adb (Analyze_Object_Declaration): Use the
Actual_Subtype to preserve information about a constant
initialized with a non-static entity that is known to be valid,
when the type of the entity has a narrower range than that of
the nominal subtype of the constant.
* checks.adb (Determine_Range): If the expression is a constant
entity that is known-valid and has a defined Actual_Subtype, use
it to determine the actual bounds of the value, to enable
additional optimizations.
From-SVN: r266123
|
|
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* back_end.adb, checks.adb, exp_ch3.adb, exp_ch4.adb,
exp_ch7.adb, exp_disp.adb, exp_unst.adb, exp_util.adb,
freeze.adb, sem_ch13.adb, sem_ch6.adb, sem_ch7.adb,
sem_prag.adb, sem_spark.adb, sem_util.adb: Minor reformatting.
From-SVN: r266122
|
|
The following patch corrects the search for the equality function to
handle cases where the equality could be a renaming of another routine.
No simple reproducer possible because this requires PolyORB.
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_ch4.adb (Find_Aliased_Equality): New routine.
(Find_Equality): Reimplemented.
(Is_Equality): New routine.
From-SVN: r266121
|
|
This patch modifies the way analysis determine whether an assignment is
an ignored Ghost assignment. This is now achieved by preanalyzing a copy
of the left hand side in order to account for potential code generated
by the left hand side itself.
No small reproducer possible.
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* ghost.adb (Ghost_Entity): New routine.
(Mark_And_Set_Ghost_Assignment): Reimplemented.
* sem_ch5.adb (Analyze_Assignment): Assess whether the target of
the assignment is an ignored Ghost entity before analyzing the
left hand side.
* sem_ch8.adb (Find_Direct_Name): Update the subprogram
signature. Do not generate markers and references when they are
not desired.
(Nvis_Messages): Do not execute when errors are not desired.
(Undefined): Do not emit errors when they are not desired.
* sem_ch8.ads (Find_Direct_Name): Update the subprogram
signature and comment on usage.
* sem_util.adb (Ultimate_Prefix): New routine.
* sem_util.ads (Ultimate_Prefix): New routine.
From-SVN: r266120
|
|
This patch fixes an issue whereby the freezing of a nested package
containing an enumerated type declaration would cause visibility errors
on literals of such type when a use_all_type_clause for it appears
within the same declarative region.
2018-11-14 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_ch7.adb (Uninstall_Declarations): Add conditional to avoid
uninstalling potential visibility during freezing on enumeration
literals.
gcc/testsuite/
* gnat.dg/enum5.adb: New testcase.
From-SVN: r266119
|
|
2018-11-14 Jerome Lambourg <lambourg@adacore.com>
gcc/ada/
* env.c: Do not include crt_externs.h on iOS, as it does not
exist there. This is also true for the iPhone Simulator SDK.
From-SVN: r266118
|
|
The declarations in the package body may have created blocks with nested
subprograms. Such a block must be transformed into a procedure followed
by a call to it, so that unnesting can handle uplevel references within
these nested subprograms (typically generated subprograms to handle
finalization actions).
2018-11-14 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_ch7.adb (Check_Unnesting_In_Declarations): New procedure
to transform blocks that appear in the declarative part of a
package body into subprograms if they contain generated
subprograms (such as finalization routines). Needed to generate
the proper upward references in unnesting mode.
From-SVN: r266117
|
|
If the given Delta of an ordinariy fixed-point type is not a machine
number and there is no specified 'Small for the type, the compiler
chooses the actual bounds of the type using the nearest model numbers
that include the given bounds, but it is free to exclude those bounds if
a size clause restricts the number of bits to use for the type. This
patch fixes an error in the case where the bounds of the type can be
chosen to be larger than the bounds specified in the type declaration:
prior to this patch the lower bounds could be chosen to be one delta
smaller that the given bound, when that given bound was smaller than the
nearest machine number,
Compiling rep2.adb must yield:
rep2.adb:7:24:
warning: value not in range of type "Test_Type" defined at line 4
rep2.adb:7:24:
warning: "Constraint_Error" will be raised at run time
----
with Ada.Text_IO; use Ada.Text_IO;
procedure Rep2 is
type Test_Type is delta 0.1 range 0.1 .. 100.0 with Size => 16;
subtype Next_Type is Test_Type range 0.1 .. 100.0;
Item : Test_Type := 0.0; -- Why is this allowed?
Next : Next_Type with Address => Item'Address;
begin
Put_Line (Item'Img & " - " & Item'Valid'Img); -- Returns "0.0 - TRUE"
Put_Line (Next'Img & " - " & Next'Valid'Img); -- Returns "0.0 - FALSE"
end Rep2;
2018-11-14 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* freeze.adb (Freeze_Fixed_Point_Type): If the given low bound
of the type is less than the nearest model number, do not expand
the range of the type to include the model number below the
bound. Similar adjustment if the upper bound is larger than the
nearest model number.
From-SVN: r266116
|
|
This patch suppresses the generation of raise statements in the context
of build-in-place and elaboration checks for primitives of tagged types
when exceptions cannot be used.
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* checks.adb (Install_Primitive_Elaboration_Check): Do not
create the check when exceptions cannot be used.
* exp_ch6.adb (Expand_N_Extended_Return_Statement): Do not raise
Program_Errror when exceptions cannot be used. Analyze the
generated code with all checks suppressed.
* exp_ch7.adb (Build_Finalizer): Remove the declaration of
Exceptions_OK.
(Make_Deep_Array_Body): Remove the declaration of Exceptions_OK.
(Make_Deep_Record_Body): Remove the declaration of
Exceptions_OK.
(Process_Transients_In_Scope): Remove the declaration of
Exceptions_OK.
* exp_util.adb (Exceptions_In_Finalization_OK): Renamed to
Exceptions_OK.
* exp_util.ads (Exceptions_In_Finalization_OK): Renamed to
Exceptions_OK.
gcc/testsuite/
* gnat.dg/bip_exception.adb, gnat.dg/bip_exception.ads,
gnat.dg/bip_exception_pkg.ads: New testcase.
From-SVN: r266115
|
|
This patch corrects the retrieval of the equality function when it is
inherited from a parent tagged type.
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_ch4.adb (Expand_N_Op_Eq): Remove duplicated code and use
routine Find_Equality instead.
(Find_Equality): New routine.
gcc/testsuite/
* gnat.dg/equal4.adb, gnat.dg/equal4.ads,
gnat.dg/equal4_controlled_filter.ads,
gnat.dg/equal4_full_selector_filter.ads,
gnat.dg/equal4_smart_pointers.ads: New testcase.
From-SVN: r266114
|
|
In the Global contract there can be only entire objects, which are
represented either as N_Identifier or N_Expanded_Name. The test for
record components was dead. Now removed. Semantics unaffected.
2018-11-14 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* sem_util.adb (First_From_Global_List): Do not expect
N_Selected_Component in the Global contract; simplify assertion
with Nam_In.
From-SVN: r266113
|
|
Both in the GNAT frontend and in the GNATprove backend we have
several checks related to generic actuals of mode IN that rely on the
Corresponding_Generic_Association flag. However, this flag was only set
for actuals with explicit expressions from the generic instance and unset
for actuals with implicit expressions from the generic unit.
For example, the code from the added testcase was wrongly rejected with
a message that Y (which is an actual with a default expression) cannot
appear in the Initializes contract. Now this code is accepted.
2018-11-14 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* sem_ch12.adb (Instantiate_Object): Set
Corresponding_Generic_Association on generic actuals with
default expression.
* sinfo.ads (Corresponding_Generic_Association): Update comment.
gcc/testsuite/
* gnat.dg/generic_actuals.adb: New testcase.
From-SVN: r266112
|
|
The following patch ensures that loops generated for aggregates as part
of ignored Ghost assignments are correctly eliminated from the generated
code.
------------
-- Source --
------------
-- pack.ads
package Pack is
type addr4k is new Integer range 0 .. 100 with Size => 32;
type Four_KB_Page_Property is record
Is_Scrubbed : Boolean := False;
end record with Ghost;
type Four_KB_Page_Array is
array (addr4k range <>) of Four_KB_Page_Property with Ghost;
type Base_Memory is tagged record
Four_KB_Pages : Four_KB_Page_Array (addr4k) :=
(others => (Is_Scrubbed => False));
end record with Ghost;
subtype Memory is Base_Memory with Ghost;
Global_Memory : Memory with Ghost;
procedure Assign;
end Pack;
-- pack.adb
package body Pack is
procedure Assign is
begin
Global_Memory.Four_KB_Pages := (others => (Is_Scrubbed => True));
end Assign;
end Pack;
----------------------------
-- Compilation and output --
----------------------------
$ gcc -c -gnatDG pack.adb
$ grep -c "loop" pack.adb.dg
0
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_ch4.adb (Expand_Concatenate): Use the proper routine to
set the need for debug info.
* exp_dbug.adb (Build_Subprogram_Instance_Renamings): Use the
proper routine to set the need for debug info.
* exp_prag.adb (Expand_Pragma_Initial_Condition): Use the proper
routine to set the need for debug info.
* exp_util.adb (Build_DIC_Procedure_Declaration): Use the proper
routine to set the need for debug info.
(Build_Invariant_Procedure_Declaration): Use the proper routine
to set the need for debug info.
* ghost.adb (Record_Ignored_Ghost_Node): Add statements as a
whole class to the list of top level ignored Ghost nodes.
* sem_util.adb (Set_Debug_Info_Needed): Do not generate debug
info for an ignored Ghost entity.
From-SVN: r266111
|
|
I believe Cancel_Special_Output is easier to read and thus preferred;
otherwise, it wouldn't be introduced, so let's use it where possible.
2018-11-14 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* bindgen.adb, exp_cg.adb, repinfo.adb, sprint.adb: Minor reuse
Cancel_Special_Output where possible.
From-SVN: r266110
|
|
When acting as an adjective, it is "library-level something"; when
acting as a noun, it is "something at the library level".
2018-11-14 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* exp_dbug.ads, sem_util.ads: Minor fixes in comments.
From-SVN: r266109
|
|
2018-11-14 Arnaud Charlet <charlet@adacore.com>
gcc/ada/
* adabkend.adb (Scan_Back_End_Switches): Handle -gx switches
explicitly.
From-SVN: r266108
|
|
platforms where...
* gcc-interface/misc.c (gnat_init_gcc_eh): Set -fnon-call-exceptions
for the runtime on platforms where System.Machine_Overflow is true.
From-SVN: r266057
|
|
* fe.h (Suppress_Checks): Declare.
* gcc-interface/misc.c (gnat_init_gcc_eh): Set -fnon-call-exceptions
only if checks are not suppressed and -faggressive-loop-optimizations
only if they are.
* gcc-interface/trans.c (struct loop_info_d): Remove has_checks and
warned_aggressive_loop_optimizations fields.
(gigi): Do not clear warn_aggressive_loop_optimizations here.
(Raise_Error_to_gnu): Do not set has_checks.
(gnat_to_gnu) <N_Indexed_Component>: Remove support for aggressive
loop optimizations.
From-SVN: r265921
|
|
* gcc-interface/decl.c (components_to_record): Remove obsolete kludge.
* gcc-interface/utils.c (make_packable_type): Set TYPE_PACKED on the
new type but do not take into account the setting on the old type for
the new fields. Rename a local variable.
(finish_record_type): Clear DECL_BIT_FIELD_TYPE on a variant part at
offset 0, if any.
(create_field_decl): Tweak comment.
From-SVN: r265917
|
|
SSO attributes of both types.
* gcc-interface/utils.c (unchecked_convert): Use local variables for
the biased and reverse SSO attributes of both types.
Further extend the processing of integral types in the presence of
reverse SSO to all scalar types.
From-SVN: r265381
|