Commit Graph

161741 Commits

Author SHA1 Message Date
François Dumont
538a7cd055 stl_tree.h (_Rb_tree_impl(_Node_allocator&&)): New.
2018-05-27  François Dumont  <fdumont@gcc.gnu.org>

	* include/bits/stl_tree.h (_Rb_tree_impl(_Node_allocator&&)): New.
	(_Rb_tree(const allocator_type&)): Use latter.
	* include/bits/stl_map.h (map(const allocator_type&)): Likewise.
	(map(initializer_list<value_type>, const allocator_type&)): Likewise.
	(map(_InputIterator, _InputIterator, const allocator_type&)): Likewise.
	* include/bits/stl_multimap.h
	(multimap(const allocator_type&)): Likewise.
	(multimap(initializer_list<value_type>, const allocator_type&)):
	Likewise.
	(multimap(_InputIterator, _InputIterator, const allocator_type&)):
	Likewise.
	* include/bits/stl_set.h (set(const allocator_type&)): Likewise.
	(set(initializer_list<value_type>, const allocator_type&)): Likewise.
	(set(_InputIterator, _InputIterator, const allocator_type&)): Likewise.
	* include/bits/stl_multiset.h
	(multiset(const allocator_type&)): Likewise.
	(multiset(initializer_list<value_type>, const allocator_type&)):
	Likewise.
	(multiset(_InputIterator, _InputIterator, const allocator_type&)):
	Likewise.

From-SVN: r260806
2018-05-27 17:06:40 +00:00
Monk Chiang
8889fbe542 [NDS32] Optimize movmem and setmem operations.
gcc/
	* config/nds32/nds32-intrinsic.md (unaligned_storedi): Modify patterns
	implementation.
	(unaligned_store_dw): Ditto.
	* config/nds32/nds32-memory-manipulation.c
	(nds32_expand_movmemsi_loop_known_size): Refactoring implementation.
	(nds32_gen_dup_4_byte_to_word_value): Rename to ...
	(nds32_gen_dup_4_byte_to_word_value_aux): ... this.
	(emit_setmem_word_loop): Rename to ...
	(emit_setmem_doubleword_loop): ... this.
	(nds32_gen_dup_4_byte_to_word_value): New function.
	(nds32_gen_dup_8_byte_to_double_word_value): New function.
	(nds32_expand_setmem_loop): Refine implementation.
	(nds32_expand_setmem_loop_v3m): Ditto.
	* config/nds32/nds32-multiple.md (unaligned_store_update_base_dw): New
	pattern.

Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com>

From-SVN: r260805
2018-05-27 16:18:24 +00:00
Chung-Ju Wu
0be3bad705 [NDS32] Implement bswapsi2 and bswaphi2 patterns.
gcc/
	* config/nds32/nds32.md (bswapsi2, bswaphi2): New patterns.

From-SVN: r260804
2018-05-27 06:52:48 +00:00
Chung-Ju Wu
54c537e66c [NDS32] new attribute no_prologue and new option -mret-in-naked-func.
gcc/
	* config/nds32/nds32.c (nds32_attribute_table): Add "no_prologue".
	(nds32_init_machine_status): Initialize machine->attr_naked_p and
	machine->attr_no_prologue_p.
	(nds32_compute_stack_frame): Check "naked" and "no_prologue" attributes.
	(nds32_naked_function_p): Handle "naked" and "no_prologue" attributes.
	(nds32_expand_epilogue): Consider attr_naked_p.
	(nds32_expand_epilogue_v3pop): Likewise.
	(nds32_can_use_return_insn): Likewise.
	* config/nds32/nds32.h (machine_function): Add attr_naked_p and
	attr_no_prologue_p fields.
	* config/nds32/nds32.opt (mret-in-naked-func): New option.

From-SVN: r260803
2018-05-27 06:46:43 +00:00
GCC Administrator
4cdb54eaae Daily bump.
From-SVN: r260801
2018-05-27 00:16:27 +00:00
Jakub Jelinek
70d22cdd77 re PR target/85918 (Conversions to/from [unsigned] long long are not vectorized for AVX512DQ target)
PR target/85918
	* config/i386/i386.md (fixunssuffix, floatunssuffix): New code
	attributes.
	* config/i386/sse.md
	(<floatsuffix>float<sseintvecmodelower><mode>2<mask_name><round_name>):
	Rename to ...
	(float<floatunssuffix><sseintvecmodelower><mode>2<mask_name><round_name>):
	... this.
	(<floatsuffix>float<sselongvecmodelower><mode>2<mask_name><round_name>):
	Rename to ...
	(float<floatunssuffix><sselongvecmodelower><mode>2<mask_name><round_name>):
	... this.
	(*<floatsuffix>floatv2div2sf2): Rename to ...
	(*float<floatunssuffix>v2div2sf2): ... this.
	(<floatsuffix>floatv2div2sf2_mask): Rename to ...
	(float<floatunssuffix>v2div2sf2_mask): ... this.
	(*<floatsuffix>floatv2div2sf2_mask_1): Rename to ...
	(*float<floatunssuffix>v2div2sf2_mask_1): ... this.
	(<fixsuffix>fix_truncv8dfv8si2<mask_name><round_saeonly_name>): Rename
	to ...
	(fix<fixunssuffix>_truncv8dfv8si2<mask_name><round_saeonly_name>):
	... this.
	(<fixsuffix>fix_trunc<mode><sseintvecmodelower>2<mask_name><round_saeonly_name>):
	Rename to ...
	(fix<fixunssuffix>_trunc<mode><sseintvecmodelower>2<mask_name><round_saeonly_name>):
	... this.
	(<fixsuffix>fix_trunc<mode><sselongvecmodelower>2<mask_name><round_saeonly_name>):
	Rename to ...
	(fix<fixunssuffix>_trunc<mode><sselongvecmodelower>2<mask_name><round_saeonly_name>):
	... this.
	(<fixsuffix>fix_truncv2sfv2di2<mask_name>): Rename to ...
	(fix<fixunssuffix>_truncv2sfv2di2<mask_name>): ... this.
	(vec_pack_ufix_trunc_<mode>): Use gen_fixuns_truncv8dfv8si2 instead of
	gen_ufix_truncv8dfv8si2.
	* config/i386/i386-builtin.def (__builtin_ia32_cvttpd2uqq256_mask,
	__builtin_ia32_cvttpd2uqq128_mask, __builtin_ia32_cvttps2uqq256_mask,
	__builtin_ia32_cvttps2uqq128_mask, __builtin_ia32_cvtuqq2ps256_mask,
	__builtin_ia32_cvtuqq2ps128_mask, __builtin_ia32_cvtuqq2pd256_mask,
	__builtin_ia32_cvtuqq2pd128_mask, __builtin_ia32_cvttpd2udq512_mask,
	__builtin_ia32_cvtuqq2ps512_mask, __builtin_ia32_cvtuqq2pd512_mask,
	__builtin_ia32_cvttps2uqq512_mask, __builtin_ia32_cvttpd2uqq512_mask):
	Use fixuns instead ufix or floatuns instead ufloat in CODE_FOR_ names.

	* gcc.target/i386/avx512dq-pr85918.c: New test.

From-SVN: r260797
2018-05-27 00:04:50 +02:00
Jerry DeLisle
80c820d8c7 Fix PR number in last commit.
From-SVN: r260796
2018-05-26 18:28:02 +00:00
Jerry DeLisle
8cb19ee36a re PR target/89506 (ICE: in decompose, at rtl.h:2266 with -Og -g)
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 18:22:18 +00:00
Jerry DeLisle
b61da1ebfb Fix changelog.
From-SVN: r260794
2018-05-26 17:32:00 +00:00
Jerry DeLisle
3c2ce89364 re PR fortran/85840 (Memory leak in write.c)
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
2018-05-26 17:30:52 +00:00
H.J. Lu
cf3a2c1ac3 Don't check ifunc_resolver on error
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
2018-05-26 04:35:31 -07:00
Jakub Jelinek
4428498341 re PR bootstrap/85921 (/gcc/c-family/c-warn.c fails to build)
PR bootstrap/85921
	* c-warn.c (diagnose_mismatched_attributes): Remove unnecessary
	noinline variable to workaround broken kernel headers.

From-SVN: r260790
2018-05-26 08:40:50 +02:00
GCC Administrator
95795b3a57 Daily bump.
From-SVN: r260789
2018-05-26 00:16:48 +00:00
Jim Wilson
d0ebdd9fce RISC-V: Add interrupt attribute support.
gcc/
	* config/riscv/riscv-protos.h (riscv_epilogue_uses): New.
	* config/riscv/riscv.c (struct machine_function): Add
	interrupt_handler_p and attribute_checked_p fields.
	(riscv_attribute_table): Add interrupt.
	(riscv_interrupt_type_p): New.
	(riscv_save_reg_p): Save extra regs for interrupt handler.
	(riscv_use_save_libcall): Return false  for interrupt handler.
	(riscv_first_stack_step): Add forward declaration.
	(riscv_compute_frame_info): New local interrupt_save_t1.  Set it
	for interrupt handler with large frame.  Use it for saved reg list.
	(riscv_expand_prologue): Move flag_stack_usage_info support to
	eliminate duplication.
	(riscv_expand_epilogue): Generate mret for interrupt handler.
	(riscv_epilogue_uses): New.
	(riscv_can_use_return_insn): Return false for interrupt handler.
	(riscv_function_ok_for_sibcall): Likewise.
	(riscv_set_current_function): Add interrupt handler support.
	* config/riscv/riscv.h (EPILOGUE_USES): Call riscv_epilogue_uses.
	* config/riscv/riscv.md (UNSPECV_MRET): New.
	(GP_REGNUM): New.
	(riscv_frflags, riscv_fsflags): Use tab after opcode.
	(riscv_mret): New.
	* doc/extend.texi (RISC-V Function Attributes) <interrupt>: New.

	gcc/testsuite/
	* gcc.target/riscv/interrupt-1.c: New.
	* gcc.target/riscv/interrupt-2.c: New.
	* gcc.target/riscv/interrupt-3.c: New.
	* gcc.target/riscv/interrupt-4.c: New.
	* gcc.target/riscv/interrupt-5.c: New.

From-SVN: r260785
2018-05-25 15:29:17 -07:00
Steven G. Kargl
c0e8f02b27 re PR fortran/85786 (Segfault in associated intrinsic)
2018-05-25  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85786
	* gfortran.dg/pr85786.f90: New test.

From-SVN: r260783
2018-05-25 21:57:24 +00:00
Jason Merrill
d9338471b9 PR c++/85815 - reference to member of enclosing template.
* 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 17:03:07 -04:00
Paul Koning
99dcfb5fc1 Fix test case failures for pdp11 target.
* gcc.c-torture/compile/20151204.c: Skip if pdp11.
	* gcc.c-torture/compile/pr55921.c: Ditto.
	* gcc.c-torture/compile/pr60655-1.c: Ditto.
	* gcc.c-torture/compile/vector-align-1.c: Add max alignment if pdp11.

From-SVN: r260781
2018-05-25 16:59:28 -04:00
Jason Merrill
3983063e76 CWG 616, 1213 - value category of subobject references.
* tree.c (lvalue_kind): Fix handling of ARRAY_REF of pointer.

From-SVN: r260780
2018-05-25 16:55:32 -04:00
Bill Schmidt
9d502741aa re PR tree-optimization/85712 (ICE in all_phi_incrs_profitable_1 at gcc/gimple-ssa-strength-reduction.c:3479)
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 19:12:16 +00:00
Rasmus Villemoes
1afe3e77e8 * inclhack.def (vxworks_iolib_include_unistd): New fix.
From-SVN: r260763
2018-05-25 10:51:58 -06:00
Jason Merrill
f22ed1ed2a PR c++/80485 - inline function non-zero address.
* symtab.c (nonzero_address): Check DECL_COMDAT.

From-SVN: r260762
2018-05-25 12:44:55 -04:00
François Dumont
18b119378a re PR libstdc++/85768 (FreeBSD bootstrap fails due to undefined reference to 'backtrace')
2018-05-25  François Dumont  <fdumont@gcc.gnu.org>

	PR libstdc++/85768
	* src/c++11/debug.cc: Remove backtrace usage.

From-SVN: r260761
2018-05-25 16:40:55 +00:00
Uros Bizjak
fc47a2fd42 re PR rtl-optimization/83628 (performance regression when accessing arrays on alpha)
PR target/83628
	* config/alpha/alpha.md (ashlsi3): New insn pattern.
	(*ashlsi_se): Rename from *ashldi_se.  Define as sign
	extension of SImode operation.  Use const123_operand predicate.
	(*saddsi_1): Remove.
	(*saddl_se_1): Ditto.
	(*ssubsi_1): Ditto.
	(*ssubl_se_1): Ditto.
	* config/alpha/predicates.md (const123_operand): New predicate.
	* config/alpha/constraints.md (P): Use IN_RANGE.

From-SVN: r260760
2018-05-25 15:56:16 +02:00
Richard Biener
27312bf214 tree-ssa-alias.h (refs_may_alias_p): Add tbaa_p bool parameter, defaulted to true.
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
2018-05-25 13:08:28 +00:00
Jakub Jelinek
b55f342bdd re PR target/85832 ([AVX512] possible shorter code when comparing with vector of zeros)
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 14:36:03 +02:00
Richard Biener
8e846c6670 tree-vect-data-refs.c (vect_find_stmt_data_reference): New function, combining stmt data ref gathering and fatal analysis parts.
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
2018-05-25 11:11:12 +00:00
Bin Cheng
1623d9f346 re PR tree-optimization/85720 (bad codegen for looped assignment of primitives at -O2)
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 11:09:42 +00:00
Martin Liska
cd3b2b6248 Fix a test-case (PR testsuite/85911).
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
2018-05-25 10:39:35 +00:00
Bin Cheng
e3bfa3775a tree-outof-ssa.c (tree-ssa.h, tree-dfa.h): Include header files.
* 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 10:35:44 +00:00
Bin Cheng
34f7080eb0 * tree-ssa-live.h (live_merge_and_clear): Delete.
From-SVN: r260746
2018-05-25 10:33:14 +00:00
Richard Biener
bcf253d51e re PR c++/85912 (-fdump-lang-raw ICE on valid code)
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
2018-05-25 09:40:38 +00:00
Nicolas Roche
529e1a3f52 [Ada] Improve performance of conversion from String to Long_Float
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
2018-05-25 09:05:34 +00:00
Patrick Bernardi
38806cd3da [Ada] Remove 2GB secondary stack limit for 64-bit processors
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
2018-05-25 09:05:28 +00:00
Ed Schonberg
17dd35f448 [Ada] Spurious error on fixed-point operation whose operands are expressions
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
2018-05-25 09:05:21 +00:00
Hristian Kirtchev
bf5899e71e [Ada] Spurious range check with Initialize_Scalars
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
2018-05-25 09:05:15 +00:00
Arnaud Charlet
f70b01165e [Ada] Remove "constant" attribute on Osint.Unknown_Attributes
2018-05-25  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* exp_aggr.adb (Convert_To_Positional): Bump default for
	Max_Others_Replicate to 32. Update comments.
	* osint.ads (Unknown_Attributes): No longer pretend this is a constant.
	(No_File_Info_Cache): Initialize separately.
	* osint.adb (No_File_Info_Cache): Update initializer.

From-SVN: r260739
2018-05-25 09:05:10 +00:00
Javier Miranda
25409c3c63 [Ada] Membership test of class-wide interface
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 09:05:04 +00:00
Ed Schonberg
1f6237e3dd [Ada] Fix expansion of quantified expressions as part of "others" associations
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
2018-05-25 09:04:59 +00:00
Hristian Kirtchev
25eadeeaa2 [Ada] Spurious secondary stack depletion
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
2018-05-25 09:04:53 +00:00
Sergey Rybin
bd42db1f3a [Ada] Document the '-U' option for gnatelim
2018-05-25  Sergey Rybin  <rybin@adacore.com>

gcc/ada/

	* doc/gnat_ugn/gnat_and_program_execution.rst: Add description of '-U'
	option for gnatelim.

From-SVN: r260735
2018-05-25 09:04:47 +00:00
Ed Schonberg
6459a31f98 [Ada] Crash on classwide precondition on subprogram with stub
This patch allows the compiler to handle properly a classwide precondition
on a primitive operation whose body is a stub and a separate subunit.

Executing:

   gnatmake -gnata -q check
   ./check

must yield:

   precondition violated

----
with Text_IO;
with Msg_Data_Block_Decoder; use Msg_Data_Block_Decoder;
procedure Check is
   Thing : T_Msg_Data_Block_Decoder;
   Value : Integer;
begin
   begin
      Value := Get_Long_Term_Corrections (Thing);
   exception
      when others => Text_IO.Put_Line ("precondition violated");
   end;
end Check;
----
package Msg_Data_Block_Decoder is
   pragma Preelaborate;
   type T_Msg_Data_Block_Decoder is Tagged Limited null record;

   type T_Msg_Data_Block_Decoder_Class_Access is
       access all T_Msg_Data_Block_Decoder'Class;

   function Get_Decoded_Data (This : in T_Msg_Data_Block_Decoder)
      return Integer;

   function Get_Long_Term_Corrections
     (This : in T_Msg_Data_Block_Decoder) return Integer  with
       Pre'
        Class => Get_Decoded_Data (T_Msg_Data_Block_Decoder'Class (This)) = 2;

end Msg_Data_Block_Decoder;
----
package body Msg_Data_Block_Decoder is

   function Get_Long_Term_Corrections (This : in T_Msg_Data_Block_Decoder)
   return Integer is separate;

   function Get_Decoded_Data (This : in T_Msg_Data_Block_Decoder)
     return Integer is
   begin
     return 0;
   end Get_Decoded_Data;

end Msg_Data_Block_Decoder;
----
separate (Msg_Data_Block_Decoder)
function Get_Long_Term_Corrections (This : in T_Msg_Data_Block_Decoder)
   return Integer is
begin
  return 0;
end Get_Long_Term_Corrections;

2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Do not create
	Class_Wide_Clone_Body when analyzing a subprogram_body_stub: the clone
	is created when the proper body of the stub is analyzed.
	* sem_util.adb (ZBuild_Class_Wide_Clone_Body): If the subprogram body
	is the proper body of a subunit, the cloned body must be inserted in
	the declarative list that contains the stub.

From-SVN: r260734
2018-05-25 09:04:42 +00:00
Justin Squirek
320fbd1ebe [Ada] Fix for freezing of expression functions
2018-05-25  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* exp_ch6.adb (Expand_Simple_Function_Return): Add guard in check to
	generate code for 6.5(8-10) so that we don't get an assertion error
	when dealing with an incomplete return type.

From-SVN: r260733
2018-05-25 09:04:37 +00:00
Arnaud Charlet
29192f7b77 [Ada] Strip too long expressions in debug routines
2018-05-25  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* pprint.adb (Expression_Name): Strip too long expressions to avoid
	carrying very large strings.

From-SVN: r260732
2018-05-25 09:04:32 +00:00
Patrick Bernardi
733a4a3dbc [Ada] Disable the creation of the main task secondary stack by the binder
Users can now specify that the binder should not create a secondary stack for
the main (environment) task through the binder switch -Q0. This is useful for
ZFP runtime users who allocate secondary stacks for their application
themselves.

2018-05-25  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

	* switch-b.adb (Scan_Binder_Switches): binder switch -Q accepts Natural
	numbers.

From-SVN: r260731
2018-05-25 09:04:27 +00:00
Doug Rupp
8ad3525a59 [Ada] Implement stack unwinding for Linux on AArch64
2018-05-25  Doug Rupp  <rupp@adacore.com>

gcc/ada/

	* tracebak.c (aarch64-linux): Implement.

From-SVN: r260730
2018-05-25 09:04:20 +00:00
Justin Squirek
f9a0fd0b3f [Ada] Minor reformatting
2018-05-25  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* sem_ch8.adb: Minor reformatting.

From-SVN: r260729
2018-05-25 09:04:15 +00:00
Piotr Trojanek
308ac7f401 [Ada] Fix convention for iteration with multiple loop variables
Refactoring based on suggestions from GNAT frontend developers.  Semantics
unaffected.

2018-05-25  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_util.adb (Iterate_Call_Parameters): Fix code convention and
	assertions.

From-SVN: r260728
2018-05-25 09:04:09 +00:00
Hristian Kirtchev
9ea43db62e [Ada] Minor reformatting
2018-05-25  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* einfo.adb, einfo.ads, exp_ch3.adb, exp_ch8.adb, exp_unst.adb,
	pprint.adb, sem_ch12.adb, sem_ch3.adb, sem_prag.adb, sem_util.adb:
	Minor reformatting.

From-SVN: r260727
2018-05-25 09:04:04 +00:00
Ed Schonberg
41610f1511 [Ada] Strengthen checks for instantiation with interface types
2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch12.adb (Instance_Exists): New function, subsidiary of
	Validate_Derived_Type_Instance, to verify that all interfaces
	implemented by the formal type are also implemented by the actual. The
	verification is complicated when an interface of the formal is declared
	in a generic unit and the actual is declared in an instance of it.
	There is currently no mechanism to relate an interface declared within
	a generic to the corresponding interface in an instance, so we must
	traverse the list of interfaces of the actual, looking for a name
	match, and verifying that that interface is declared in an instance.

From-SVN: r260726
2018-05-25 09:03:59 +00:00
Piotr Trojanek
9da8032d4b [Ada] Rewrite Iterate_Call_Parameters in more assertive style
The formal and actual parameters in a subprogram call must match each other.
This is now checked with assertion (so that we can detect possible mistakes),
while the production builds have less work to do. Semantics unchanged.

2018-05-25  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_util.adb (Iterate_Call_Parameters): Rewrite with extra
	assertions; replace function versions of Next_Formal/Next_Actual with
	their procedural versions (which are more concise).

From-SVN: r260725
2018-05-25 09:03:54 +00:00