This patch modifies the analysis of aspect/pragma Volatile to correct accept
the annotation when it applies to single protected and single task types, and
SPARK_Mode On is in effect.
------------
-- Source --
------------
-- pack.ads
package Pack with SPARK_Mode is
protected PO_Aspect with Volatile is end; -- OK
protected PO_Pragma is end;
pragma Volatile (PO_Pragma); -- OK
task TO_Aspect with Volatile; -- OK
task TO_Pragma;
pragma Volatile (TO_Pragma); -- OK
end Pack;
----------------------------
-- Compilation and output --
----------------------------
$ gcc -c pack.ads
$ gcc -c pack.ads -gnatd.F
cannot generate code for file pack.ads (package spec)
2018-05-28 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_prag.adb (Process_Atomic_Independent_Shared_Volatile): Include
the declarations of single concurrent types because they fall in the
category of full type and object declarations.
From-SVN: r260820
This changes the output of -gnatR for extensions of tagged record types to
avoid displaying the internal _Parent component, which overlaps with other
components and is thus more confusing than helpful.
For the following hierarchy:
type R1 is tagged record
I : Integer;
end record;
type R2 is new R1 with record
C : Character;
end record;
the output -gnatR must now be:
for R1'Object_Size use 128;
for R1'Value_Size use 96;
for R1'Alignment use 8;
for R1 use record
_Tag at 0 range 0 .. 63;
I at 8 range 0 .. 31;
end record;
for R2'Object_Size use 192;
for R2'Value_Size use 136;
for R2'Alignment use 8;
for R2 use record
_Tag at 0 range 0 .. 63;
I at 8 range 0 .. 31;
C at 16 range 0 .. 7;
end record;
2018-05-28 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* repinfo.adb (Compute_Max_Length): Skip _Parent component.
(List_Record_Layout): Likewise.
From-SVN: r260819
This patch adds a warning to a function call that appears within a
postcondition for said function. This may mean an omission of an attribute
reference 'Result, and may lead to an infinite loop on a call to that function.
Compiling post_error.ads must yield:
post_error.ads:3:11:
warning: postcondition does not mention function result
post_error.ads:3:19:
warning: call to "Foo" within its postcondition will lead
to infinite recursion
----
package Post_Error is
function Foo (A : out Integer) return Integer
with Post => Foo (A) /= 0;
pragma Import (C, Foo);
end Post_Error;
2018-05-28 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_util.adb (Is_Function_Result): Add a warning if a postcondition
includes a call to function to which it applies. This may mean an
omission of an attribute reference 'Result, in particular if the
function is pqrameterless.
From-SVN: r260818
This patch fixes an issue whereby the compiler misidentified a package name
containing the name of a standard runtime package as said package - leading to
and improper error message prompting the user to "With" a package already in
scope.
2018-05-28 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_ch8.adb (Find_Expanded_Name): Add extra guard to make sure the
misresolved package name is not a case of mistaken identity.
gcc/testsuite/
* gnat.dg/warn15-core-main.adb, gnat.dg/warn15-core.ads,
gnat.dg/warn15-interfaces.ads, gnat.dg/warn15.ads: New testcase.
From-SVN: r260817
Some static bounds of types are not recognized and evaluated as such in the
semantic analysis phase of the frontend, which leads to incomplete information
in GNATprove. Fix that in the GNATprove mode only, as this is not needed when
full expansion is used.
There is no impact on compilation.
2018-05-28 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_res.adb (Resolve_Range): Re-resolve the low bound of a range in
GNATprove mode, as the order of resolution (low then high) means that
all the information is not available when resolving the low bound the
first time.
From-SVN: r260816
This steamlines a bit the implementation. No functional changes.
2018-05-28 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* repinfo.adb (List_Array_Info): Start with an explicit blank line and
end with the linker section, if any.
(List_Entities): Do not output the linker section for record types,
array types and variables.
(Print_Expr): Factor out common processing for unary operators and
special values. Adjust and reorder the various cases.
(List_Object_Info): End with the linker section, if any.
(List_Record_Info): Likewise.
(List_Type_Info): Do not start with a blank line.
From-SVN: r260815
2018-05-27 Steven G. Kargl <kargl@gcc.gnu.org>
* decl.c (match_data_constant): Fortran 2018 allows pointer
initialization in a data statement.
2018-05-27 Steven G. Kargl <kargl@gcc.gnu.org>
* gfortran.dg/data_stmt_pointer.f90: new test.
From-SVN: r260808
2018-05-26 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/89506
* io/write.c (write_integer): Initialise the fnode format to
FMT_NONE, used for list directed write.
(BUF_STACK_SZ): Bump default buffer size up to avoid allocs on
small stuff.
From-SVN: r260795
2018-05-26 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/85840
* io/write.c (write_float_0): Use separate local variable for
the float string length.
From-SVN: r260793
Since ifunc_resolver isn't set when an error is detected, we should
lookup ifunc attribute in this case.
PR target/85900
PR target/85345
* varasm.c (assemble_alias): Lookup ifunc attribute on error.
From-SVN: r260792
* search.c (lookup_base): Use currently_open_class.
(lookup_member): Use it regardless of -fconcepts.
* parser.c (cp_parser_postfix_dot_deref_expression): Check it.
From-SVN: r260782
2018-05-25 Bill Schmidt <wschmidt@linux.ibm.com>
PR tree-optimization/85712
* gimple-ssa-strength-reduction.c (replace_one_candidate): Skip if
this candidate has already been replaced in-situ by a copy.
From-SVN: r260772
2018-05-25 Richard Biener <rguenther@suse.de>
* tree-ssa-alias.h (refs_may_alias_p): Add tbaa_p bool parameter,
defaulted to true.
(ref_maybe_used_by_stmt_p): Likewise.
(stmt_may_clobber_ref_p): Likewise.
(stmt_may_clobber_ref_p_1): Likewise.
* tree-ssa-alias.c (refs_may_alias_p): Add tbaa_p bool parameter
and pass it along.
(ref_maybe_used_by_stmt_p): Likewise.
(stmt_may_clobber_ref_p): Likewise.
(stmt_may_clobber_ref_p_1): Likewise.
* tree-vect-data-refs.c (vect_slp_analyze_node_dependences): Use
the alias oracle to disambiguate DRs with stmts DR analysis
couldn't handle.
(vect_analyze_data_refs): Do not give up on not analyzable
DRs for BB vectorization. Remove code truncating the dataref
vector.
From-SVN: r260757
PR target/85832
* config/i386/sse.md (<avx512>_eq<mode>3<mask_scalar_merge_name>_1):
Add (=Yk,v,C) variant using vptestm insn. Use TARGET_AVX512BW
in test instead of TARGET_AVX512F for VI12_AVX512VL iterator.
* gcc.target/i386/avx512f-pr85832.c: New test.
* gcc.target/i386/avx512vl-pr85832.c: New test.
* gcc.target/i386/avx512bw-pr85832.c: New test.
* gcc.target/i386/avx512vlbw-pr85832.c: New test.
From-SVN: r260756
2018-05-25 Richard Biener <rguenther@suse.de>
* tree-vect-data-refs.c (vect_find_stmt_data_reference): New
function, combining stmt data ref gathering and fatal analysis
parts.
(vect_analyze_data_refs): Remove now redudnant code and simplify.
* tree-vect-loop.c (vect_get_datarefs_in_loop): Factor out from
vect_analyze_loop_2 and use vect_find_stmt_data_reference.
* tree-vect-slp.c (vect_slp_bb): Use vect_find_stmt_data_reference.
* tree-vectorizer.h (vect_find_stmt_data_reference): Declare.
From-SVN: r260754
PR tree-optimization/85720
* tree-loop-distribution.c (break_alias_scc_partitions): Don't merge
SCC if all partitions are builtins.
(version_loop_by_alias_check): New parameter. Generate cancelable
runtime alias check if all partitions are builtins.
(distribute_loop): Update call to above function.
gcc/testsuite
* gcc.dg/tree-ssa/pr85720.c: New test.
* gcc.target/i386/avx256-unaligned-store-2.c: Disable loop pattern
distribution.
From-SVN: r260753
2018-05-25 Martin Liska <mliska@suse.cz>
PR testsuite/85911
* gcc.dg/tree-prof/update-loopch.c: Do not scan
for 'Removing basic block'.
From-SVN: r260748
* tree-outof-ssa.c (tree-ssa.h, tree-dfa.h): Include header files.
(create_default_def, for_all_parms): Moved from tree-ssa-coalesce.c.
(parm_default_def_partition_arg): Ditto.
(set_parm_default_def_partition): Ditto.
(get_parm_default_def_partitions): Ditto and make it static.
(get_undefined_value_partitions): Ditto and make it static.
(remove_ssa_form): Refactor call to init_var_map here.
* tree-ssa-coalesce.c (build_ssa_conflict_graph): Support live range
computation for loop region.
(coalesce_partitions, compute_optimized_partition_bases): Ditto.
(register_default_def): Delete.
(for_all_parms, create_default_def): Move to tree-outof-ssa.c.
(parm_default_def_partition_arg): Ditto.
(set_parm_default_def_partition): Ditto.
(get_parm_default_def_partitions): Ditto and make it static.
(get_undefined_value_partitions): Ditto and make it static.
(coalesce_with_default, coalesce_with_default): Update comment.
(create_coalesce_list_for_region): New func factored out from
create_outofssa_var_map.
(populate_coalesce_list_for_outofssa): New func factored out from
create_outofssa_var_map and coalesce_ssa_name.
(create_outofssa_var_map): Delete.
(coalesce_ssa_name): Refactor to support live range computation.
* tree-ssa-coalesce.h (coalesce_ssa_name): Change decl.
(get_parm_default_def_partitions): Delete.
(get_undefined_value_partitions): Ditto.
* tree-ssa-live.c (init_var_map, delete_var_map): Support live range
computation for loop region.
(new_tree_live_info, loe_visit_block): Ditto.
(live_worklist, set_var_live_on_entry): Ditto.
(calculate_live_on_exit, verify_live_on_entry): Ditto.
* tree-ssa-live.h (struct _var_map): New fields.
(init_var_map): Change decl.
(region_contains_p): New.
From-SVN: r260747
2018-05-25 Richard Biener <rguenther@suse.de>
PR c++/85912
* tree-dump.c (dequeue_and_dump): Remove access to removed
operand 2 of a SWITCH_EXPR.
From-SVN: r260744
Once it is sure that the result will be infinity, stop computation and return
the result. This ensure that the function call duration is bounded. Before that
change on some cases the computation was taking more than a few seconds.
2018-05-25 Nicolas Roche <roche@adacore.com>
gcc/ada/
* libgnat/s-valrea.adb (Scan_Real): Abort computation once it is sure
that the result will be either -infinite or +infinite.
From-SVN: r260743
This patch removes the restriction introduced recently that limited the size
of the secondary stack to 2GB. The size of the secondary stack is now limited
to half of the size of the memory address space for the target.
2018-05-25 Patrick Bernardi <bernardi@adacore.com>
gcc/ada/
* libgnat/s-parame.ads, libgnat/s-parame__vxworks.ads,
libgnat/s-parame__ae653.ads, libgnat/s-parame__hpux.ads (Size_Type):
Expand range of type to match the address space of the target.
(Task_Storage_Size): Remove unused type.
gcc/testsuite/
* gnat.dg/sec_stack1.adb: New testcase.
From-SVN: r260742
This patch fixes a spurious error in a fixed-point operand of a multiplying
operator M when the operand is an adding operation and the context imposes
a different fixed-point type to the result of M.
2018-05-25 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_res.adb (Set_Mixed_Mode_Operand): If the operand is an expression
of a fixed point type and the parent is a multiplying operation,
resolve the operand with its own type because the context will impose a
resulting type on the result of the multiplication by means of
approriate conversion.
gcc/testsuite/
* gnat.dg/fixedpnt4.adb: New testcase.
From-SVN: r260741
This patch modifies the expansion of default-initialized array objects when
pragma Initialize_Scalars or Normalize_Scalars is in effect to suppress the
generation of checks on the constructed in-place aggregate. The aggregate
intentionally contains invalid values which may not necessarily fit the
constraints of a particular component type. Check suppression ensures that
no spurious checks are generated, and that the effects of the pragmas are
carried out.
------------
-- Source --
------------
-- gnat.adc
pragma Initialize_Scalars;
-- init_scalar.adb
with Ada.Text_IO; use Ada.Text_IO;
procedure Init_Scalar is
type Fixed is delta 0.25 range -12.0 .. 1270.0;
type Fixed_Array is array (1 .. 1) of Fixed;
begin
begin
declare
Obj : Fixed;
pragma Unreferenced (Obj);
begin null; end;
exception
when others => Put_Line ("ERROR: Fixed raised exception");
end;
begin
declare
Obj : Fixed_Array;
pragma Unreferenced (Obj);
begin null; end;
exception
when others => Put_Line ("ERROR: Fixed_Array raised exception");
end;
end Init_Scalar;
-----------------
-- Compilation --
-----------------
$ gnatmake -q init_scalar.adb
$ ./init_scalar
2018-05-25 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_ch3.adb (Default_Initialize_Object): Ensure that the analysis of
the in-place initialization aggregate created for pragmas
Initialize_Scalars or Normalize_Scalars is performed with checks
suppressed.
From-SVN: r260740
The compiler rejects the use of a membership test when the left operand
is a class-wide interface type object and the right operand is not a
class-wide type.
2018-05-25 Javier Miranda <miranda@adacore.com>
gcc/ada/
* sem_res.adb (Resolve_Membership_Op): Allow the use of the membership
test when the left operand is a class-wide interface and the right
operand is not a class-wide type.
* exp_ch4.adb (Tagged_Membership): Adding support for interface as the
left operand.
gcc/testsuite/
* gnat.dg/interface7.adb: New testcase.
From-SVN: r260738
2018-05-25 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_aggr.adb (Flatten): A quantified expression cannot be duplicated
in an others clause to prevent visibility issues with the generated
loop variable.
(Component_OK_For_Backend): Return false for a quantified expression.
(Check_Static_Component): Ditto.
From-SVN: r260737
This patch reimplements the secondary stack allocation logic to eliminate an
issue which causes the memory index to overflow while the stack itself uses
very little memory, thus causing a spurious Storage_Error.
The issue in details:
The total amount of memory that the secondary stack can accomodate is dictated
by System.Parameters.Size_Type which is really an Integer, giving roughly 2 GB
of storage.
The secondary stack is comprised of multiple frames which logically form a
contiguous array of memory. Each frame maintans a range over which it operates,
where
Low bound = Previous frame's high bound + 1
High bound = Previous frame's high bound + Frame size
The allocation logic starts by first checking whether the current top frame
(which may not be the "last" frame in the secondary stack) has enough memory to
fit an object. If it does, then that frame is used. If it does not, the logic
then examines the subsequent frames, while carrying out the following actions:
* If the frame is too small to fit the object, it is deleted
* If the frame is big enough to fit the object, it is used
If all the frames were too small (and thus deleted), a new frame is added which
is big enough to fit the object.
Due to an issue with the deletion logic, the last frame would never be deleted.
Since any new frame's range is based on the previous frame's range, the new
range would keep growing, even though the secondary stack may have very few
frames in use. Eventually this growth overflows the memory index type.
The overflow of the memory index type happens only when the secondary stack
is full, and thus signals a Storage_Error. Due to the spurious growth of the
ranges, the overflow happens much faster and results in a bogus stack depleton.
The issue manifests only when each new memory request to the secondary stack is
slightly bigger than the previous memory request, thus prompring the secondary
stack to delete all its frames, and create a new one.
2018-05-25 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* libgnat/s-secsta.adb (SS_Allocate): Reimplemented.
(SS_Allocate_Dynamic): New routine. The allocation logic is now split
into three distring cases rather than in one loop which attempts to
handle all three cases. This rewrite eliminates an issue where the last
frame of the stack cannot be freed, thus causing the memory range of a
new frame to approach the overflow point of the memory index type.
Since the overflow is logically treated as a
too-much-memory-on-the-stack scenario, it causes a bogus Storage_Error.
(SS_Allocate_Static): New routine. The routine factorizes the static
secondary stack-related code from the former SS_Allocate.
gcc/testsuite/
* gnat.dg/sec_stack2.adb: New testcase.
From-SVN: r260736