Commit Graph

162043 Commits

Author SHA1 Message Date
Jozef Lawrynowicz
525213a53d msp430.md: Remove erroneous subreg expression from zero_extendqisi2 insn pattern.
* gcc/config/msp430/msp430.md: Remove erroneous subreg expression from
	zero_extendqisi2 insn pattern. Remove msp430x ISA restriction on
	zero_extend{q,h}isi2.

From-SVN: r260981
2018-05-30 17:26:03 -06:00
Rasmus Villemoes
bbdf026f43 * crtstuff.c: Remove declaration of _Jv_RegisterClasses.
From-SVN: r260980
2018-05-30 17:21:48 -06:00
Jonathan Wakely
d72a3672c5 PR c++/77777 improve location for diagnostic
Pass in the location of the invalid expression, not the next input
location (which might be a comma or closing parenthesis on a different
line).

gcc/cp:

	PR c++/77777
	* call.c (resolve_args): Use location of expression, not current input
	location.

gcc/testsuite:

	PR c++/77777
	* g++.dg/diagnostic/pr77777.C: New test.

From-SVN: r260979
2018-05-31 00:13:48 +01:00
David Pagan
b67b9225f7 re PR c/55976 (-Werror=return-type should error on returning a value from a void function)
2018-05-30  David Pagan  <dave.pagan@oracle.com>

	PR c/55976
	* c-decl.c (grokdeclarator): Update check for return type warnings.
	(start_function): Likewise.
	(finish_function): Likewise.
	* c-typeck.c (c_finish_return): Update check for return type warnings.
	Pass OPT_Wreturn_type to pedwarn when appropriate.

	PR c/55976
	* c-opts.c (c_common_post_options): Set default for warn_return_type
	for C++/C++ with ObjC extensions only. For C, makes it possible to
	differentiate between default (no option), -Wreturn-type, and
	-Wno-return-type.

	PR c/55976
	* gcc.dg/noncompile/pr55976-1.c: New test.
	* gcc.dg/noncompile/pr55976-2.c: New test.

From-SVN: r260978
2018-05-30 16:55:38 -06:00
Borislav Petkov
e91c9fe500 extend.texi: Document some architecture specific constraints and sort entries.
* doc/extend.texi: Document some architecture specific
	constraints and sort entries.

From-SVN: r260977
2018-05-30 16:49:25 -06:00
Martin Sebor
3ce4cdb2f7 PR middle-end/85369 - no -Wstringop-overflow for a strcpy / stpcpy call with a nonstring pointer when providing movstr pattern
gcc/ChangeLog:

	PR middle-end/85369
	* builtins.c (expand_builtin_stpcpy_1): New function.
	(expand_builtin_stpcpy): Call it, and call maybe_warn_nonstring_arg
	only if the former succeeds.

From-SVN: r260976
2018-05-30 16:24:43 -06:00
Jason Merrill
1ba9c854bb ChangeLog fix
From-SVN: r260974
2018-05-30 15:42:52 -04:00
Ville Voutilainen
752e7593b0 Do not warn about zero-as-null when NULL is used.
gcc/cp/

Do not warn about zero-as-null when NULL is used.
* call.c (conversion_null_warnings): Check for pointer
types converted from zero constants.
(convert_like_real): Add a warning sentinel at the end.
* tree.c (maybe_warn_zero_as_null_pointer_constant): Also
check null_node_p.

testsuite/

Do not warn about zero-as-null when NULL is used.
* g++.dg/warn/Wzero-as-null-pointer-constant-7.C: New.

From-SVN: r260973
2018-05-30 22:33:38 +03:00
Jason Merrill
298434c916 PR c++/85807 - ICE with call in template NSDMI.
* init.c (get_nsdmi): Use push_to/pop_from_top_level.
	* tree.c (bot_manip): Don't set_flags_from_callee in a template.

From-SVN: r260972
2018-05-30 15:31:11 -04:00
Sameera Deshpande
fbf5c1c64c patch to add support of ARMv8.4 in saphira
From-SVN: r260971
2018-05-31 00:10:03 +05:30
Jan Hubicka
e062dc8089 simple-object.h (simple_object_copy_lto_debug_sections): Add rename parameter.
* simple-object.h (simple_object_copy_lto_debug_sections): Add rename
	parameter.

From-SVN: r260970
2018-05-30 19:57:50 +02:00
Jason Merrill
5603790dbf PR c++/85873 - constant initializer_list array not in .rodata.
* tree.c (build_target_expr): Set TREE_READONLY.
	* call.c (set_up_extended_ref_temp): Set TREE_READONLY.

From-SVN: r260969
2018-05-30 13:33:06 -04:00
Jason Merrill
cd7fa7a74b Improve error recovery for structured binding in condition.
* parser.c (cp_parser_check_condition_declarator): Handle
	cp_error_declarator.

From-SVN: r260968
2018-05-30 13:32:54 -04:00
Jan Hubicka
d555daaf92 Remove accidental commit.
From-SVN: r260967
2018-05-30 17:10:03 +00:00
Jan Hubicka
da65152899 20111213-1_0.c: Fix template.
* gcc.dg/lto/20111213-1_0.c: Fix template.
	* gcc.dg/lto/20100603-1_0.c: Fix template.
	* gcc.dg/lto/20100603-2_0.c: Fix template.
	* gcc.dg/lto/20100603-3_0.c: Fix template.

From-SVN: r260966
2018-05-30 17:07:36 +00:00
Jan Hubicka
6dc1ee58c6 * doc/invoke.texi (-flinker-output): Document
From-SVN: r260965
2018-05-30 16:43:59 +00:00
Jan Hubicka
2a58bcf2da passes.c (ipa_write_summaries): Only modify statements if body is in memory.
* passes.c (ipa_write_summaries): Only modify statements if body
	is in memory.
	* cgraphunit.c (ipa_passes): Also produce intermeidate code when
	incrementally linking.
	(ipa_passes): Likewise.
	* lto-cgraph.c (lto_output_node): When incrementally linking do not
	pass down resolution info.
	* common.opt (flag_incremental_link): Update info.
	* gcc.c (plugin specs): Turn flinker-output=* to
	-plugin-opt=-linker-output-known
	* toplev.c (compile_file): Also cut compilation when doing incremental
	link.
	* flag-types. (enum lto_partition_model): Add
	LTO_LINKER_OUTPUT_NOLTOREL.
	(invoke.texi): Add -flinker-output docs.
	* ipa.c (symbol_table::remove_unreachable_nodes): Handle LTO incremental
	link same way as WPA; do not stream in dead initializers.

From-SVN: r260964
2018-05-30 16:43:11 +00:00
Jan Hubicka
5b42d19624 passes.c (ipa_write_summaries): Only modify statements if body is in memory.
* passes.c (ipa_write_summaries): Only modify statements if body
	is in memory.
	* cgraphunit.c (ipa_passes): Also produce intermeidate code when
	incrementally linking.
	(ipa_passes): Likewise.
	* lto-cgraph.c (lto_output_node): When incrementally linking do not
	pass down resolution info.
	* common.opt (flag_incremental_link): Update info.
	* gcc.c (plugin specs): Turn flinker-output=* to
	-plugin-opt=-linker-output-known
	* toplev.c (compile_file): Also cut compilation when doing incremental
	link.
	* flag-types. (enum lto_partition_model): Add
	LTO_LINKER_OUTPUT_NOLTOREL.
	(invoke.texi): Add -flinker-output docs.
	* ipa.c (symbol_table::remove_unreachable_nodes): Handle LTO incremental
	link same way as WPA; do not stream in dead initializers.

	* dwarf2out.c (dwarf2out_die_ref_for_decl,
	darf2out_register_external_decl): Support incremental link.

	* lang.opt (lto_linker_output): Add nolto-rel.
	* lto-lang.c (lto_post_options): Handle LTO_LINKER_OUTPUT_REL
	and LTO_LINKER_OUTPUT_NOLTOREL.
	(lto_init): Generate lto when doing incremental link.
	* lto.c (lto_precess_name): Add lto1-inclink.

	* testsuite/g++.dg/lto/20081109-1_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20081118_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20081119-1_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20081120-1_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20081120-2_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20081123_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20081204-1_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20081219_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20090302_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20090313_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20091002-2_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20091002-3_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20091026-1_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20100724-1_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20101010-4_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20101015-2_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/20110311-1_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/pr45621_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/pr48042_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/pr48354-1_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/pr54625-1_0.c: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/pr54625-2_0.c: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/lto/pr68811_0.C: Add -flinker-output=nolto-rel.
	* testsuite/g++.dg/torture/pr43760.C: New test. Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20081120-1_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20081120-2_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20081126_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20081204-1_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20081204-2_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20081212-1_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20081224_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20090116_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20090126-1_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20090126-2_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20090206-1_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20090219_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20091013-1_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20091014-1_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20091015-1_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20091016-1_0.c: Add -flinker-output=nolto-rel.
	* testsuite/gcc.dg/lto/20091020-1_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/20091020-2_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/20091027-1_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/20100426_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/20100430-1_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/20100603-1_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/20100603-2_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/20100603-3_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/20111213-1_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/pr45736_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/pr52634_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/pr54702_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/pr59323-2_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/pr59323_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/pr60820_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/pr81406_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gcc.dg/lto/pr83388_0.c: Add -flinker-output-nolto-rel.
	* testsuite/gfortran.dg/lto/20091016-1_0.f90: Add -flinker-output-nolto-rel.
	* testsuite/gfortran.dg/lto/20091028-1_0.f90: Add -flinker-output-nolto-rel.
	* testsuite/gfortran.dg/lto/20091028-2_0.f90: Add -flinker-output-nolto-rel.
	* testsuite/gfortran.dg/lto/pr46911_0.f: Add -flinker-output-nolto-rel.
	* testsuite/gfortran.dg/lto/pr47839_0.f90: Add -flinker-output-nolto-rel.

From-SVN: r260963
2018-05-30 16:42:41 +00:00
Jan Hubicka
6c363ddd67 * lto-opts.c (lto_write_options): Skip OPT_dumpdir, OPT_fresolution_.
From-SVN: r260962
2018-05-30 16:37:53 +00:00
Jan Hubicka
0df8dc6e18 lto-wrapper.c (debug_objcopy): Add rename parameter; pass it down to simple_object_copy_lto_debug_sections.
* lto-wrapper.c (debug_objcopy): Add rename parameter; pass
	it down to simple_object_copy_lto_debug_sections.
	(run_gcc): Determine incremental LTO link time and configure
	lto1 into non-wpa mode, disable renaming of debug sections.

From-SVN: r260961
2018-05-30 16:36:55 +00:00
Jan Hubicka
de54061dcc lto-plugin.c: (non_claimed_files): New static var.
* lto-plugin.c: (non_claimed_files): New static var.
	(linker_ouput_known): New static var.
	(all_symbols_read_handler): When user specifies linker output do not
	imply it; output warning when nonlto-rel mode is forced.
	(claim_file_header): Record number of nonclaimed files.
	(process_option): Remember if linker output is known

From-SVN: r260960
2018-05-30 16:34:54 +00:00
Kelvin Nilsen
3d63e711a8 extend.texi (PowerPC AltiVec Built-in Functions): Remove descriptions of various incorrectly documented functions.
gcc/ChangeLog:

2018-05-30  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* doc/extend.texi (PowerPC AltiVec Built-in Functions): Remove
	descriptions of various incorrectly documented functions.

From-SVN: r260959
2018-05-30 16:20:16 +00:00
Andre Vieira
04b21a0a1b Fixing ChangeLog entry for earlier commit.
From-SVN: r260958
2018-05-30 16:04:03 +00:00
Andre Vieira
0c8e76210a Reverting r260635
gcc
    2018-05-30  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	2018-05-24  Andre Vieira  <andre.simoesdiasvieira@arm.com>

        PR target/83009
	Revert:
        * config/aarch64/predicates.md (aarch64_mem_pair_lanes_operand): Make
        address check not strict.

    gcc/testsuite
    2018-05-30  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	2018-05-24  Andre Vieira  <andre.simoesdiasvieira@arm.com>
	Revert
        PR target/83009
        * gcc/target/aarch64/store_v2vec_lanes.c: Add extra tests.
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@260635 138bc75d-0d04-0410-961f-82ee72b054a4

From-SVN: r260957
2018-05-30 15:59:14 +00:00
Jan Hubicka
7ce4ce10cd simple-object.h (simple_object_copy_lto_debug_sections): Add rename parameter.
* simple-object.h (simple_object_copy_lto_debug_sections): Add rename
	parameter.
	* simple-object.c (handle_lto_debug_sections): Add rename parameter.
	(handle_lto_debug_sections_rename): New function.
	(handle_lto_debug_sections_norename): New function.
	(simple_object_copy_lto_debug_sections): Add rename parameter.

From-SVN: r260956
2018-05-30 15:26:26 +00:00
Richard Biener
74e0960e3e re PR tree-optimization/85964 (compile time hog w/ -O3 -ftracer -fno-guess-branch-probability)
2018-05-30  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/85964
	* tracer.c (better_p): Drop initialized count check, we only
	call the function with initialized counts now.
	(find_best_successor): Do find a best edge if one
	has uninitialized count.
	(find_best_predecessor): Likewise.  Do BB frequency check only
	if count is initialized.

From-SVN: r260954
2018-05-30 14:55:04 +00:00
Jackson Woodruff
d0b51297b0 [AArch64] Improve LDP/STP generation that requires a base register
This patch generalizes the formation of LDP/STP that require a base register.

In AArch64, LDP/STP instructions have different sized immediate offsets than
normal LDR/STR instructions. This part of the backend attempts to spot groups
of four LDR/STR instructions that can be turned into LDP/STP instructions by
using a base register.

Previously, we would only accept address pairs that were ordered in ascending
or descending order, and only strictly sequential loads/stores. In fact, the
instructions that we generate from this should be able to consider any order
of loads or stores (provided that they can be re-ordered). They should also be
able to accept non-sequential loads and stores provided that the two pairs of
addresses are amenable to pairing. The current code is also overly restrictive
on the range of addresses that are accepted, as LDP/STP instructions may take
negative offsets as well as positive ones.

This patch improves that by allowing us to accept all orders of loads/stores
that are valid, and extending the range that the LDP/STP addresses can reach. 

2017-05-30  Jackson Woodruff  <jackson.woodruff@arm.com>

	* config/aarch64/aarch64.c (aarch64_host_wide_int_compare): New.
	(aarch64_ldrstr_offset_compare): New.
	(aarch64_operands_adjust_ok_for_ldpstp): Update to consider all
	load/store orderings.
	(aarch64_gen_adjusted_ldpstp): Likewise.

	* gcc.target/aarch64/simd/ldp_stp_9: New.
	* gcc.target/aarch64/simd/ldp_stp_10: New.
	* gcc.target/aarch64/simd/ldp_stp_11: New.
	* gcc.target/aarch64/simd/ldp_stp_12: New.

From-SVN: r260952
2018-05-30 10:59:25 +00:00
Wilco Dijkstra
2eb2847ec5 [AArch64] Fix aarch64_ira_change_pseudo_allocno_class
A recent commit removing '*' from the md files caused a large regression in
h264ref.  It turns out aarch64_ira_change_pseudo_allocno_class is no longer
effective after the SVE changes, and the combination results in the regression.
This patch fixes it by explicitly checking for a subset of GENERAL_REGS and
FP_REGS.  Add a missing ? to aarch64_get_lane to fix a failure in the testsuite.

    gcc/
	* config/aarch64/aarch64.c (aarch64_ira_change_pseudo_allocno_class):
	Check for subset of GENERAL_REGS and FP_REGS.
	* config/aarch64/aarch64-simd.md (aarch64_get_lane): Increase cost of
	r=w alternative.

From-SVN: r260951
2018-05-30 10:31:21 +00:00
Piotr Trojanek
30522cdb14 [Ada] Update documentation of Sinfo.Package_Instantiation field
This was forgotten when renaming Get_Package_Instantiation_Node to
Get_Unit_Instantiation_Node.

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

gcc/ada/

	* einfo.ads (Package_Instantiation): Update comment after a routine
	that uses this field has been renamed.

From-SVN: r260950
2018-05-30 08:59:03 +00:00
Ed Schonberg
b23fa3d45f [Ada] Unnesting: always transform local Raise statements
2018-05-30  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_ch11.adb (Replace_Raise_By_Goto): The transfomation is legal even
	if the local raise statement includes a string expression. This
	expression might be picked up by an outer handler or discarded, but
	plays no role in this transformation.

From-SVN: r260949
2018-05-30 08:58:57 +00:00
Hristian Kirtchev
07fb1ef483 [Ada] Minor reformatting
2018-05-30  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* exp_aggr.adb, exp_unst.adb, freeze.adb, libgnat/a-direct.adb: Minor
	reformatting.

From-SVN: r260948
2018-05-30 08:58:51 +00:00
Ed Schonberg
e00ee732dd [Ada] Unnesting: handle the semantic of Procedure_To_Call field
2018-05-30  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_unst.adb (Visit_Node): Handle the semantic Procedure_To_Call
	field in relevant nodes: Allocate, Free, and return statements.

From-SVN: r260947
2018-05-30 08:58:46 +00:00
Ed Schonberg
392a7e19fd [Ada] Unnesting: skip unanalyzed Component_Assocation
2018-05-30  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_unst.adb (Visit_Node): Do not traverse a Component_Association
	that has not been analyzed, as will be the case for a nested aggregate
	that is expanded into individual assignments.

From-SVN: r260946
2018-05-30 08:58:40 +00:00
Justin Squirek
656d1fba78 [Ada] Implement pragma Max_Entry_Queue_Depth
This patch implements AI12-0164-1 for the aspect/pragma Max_Entry_Queue_Depth.
Previously, the GNAT specific pragma Max_Queue_Length fulfilled this role, but
was not named to match the standard and thus was insufficent.

------------
-- Source --
------------

--  pass.ads

with System;
package Pass is

   SOMETHING : constant Integer := 5;
   Variable : Boolean := False;

   protected type Protected_Example is

      entry A (Item : Integer)
         with Max_Entry_Queue_Depth => 2;            --  OK

      entry B (Item : Integer);
      pragma Max_Entry_Queue_Depth (SOMETHING);      --  OK

      entry C (Item : Integer);                      --  OK

      entry D (Item : Integer)
         with Max_Entry_Queue_Depth => 4;            --  OK

      entry D (Item : Integer; Item_B : Integer)
         with Max_Entry_Queue_Depth => Float'Digits; --  OK

      entry E (Item : Integer);
      pragma Max_Entry_Queue_Depth (SOMETHING * 2);  --  OK

      entry E (Item : Integer; Item_B : Integer);
      pragma Max_Entry_Queue_Depth (11);             --  OK

      entry F (Item : Integer; Item_B : Integer);
      pragma Pre (Variable = True);
      pragma Max_Entry_Queue_Depth (11);             --  OK

      entry G (Item : Integer; Item_B : Integer)
         with Pre => (Variable = True),
              Max_Entry_Queue_Depth => 11;           --  OK

   private
      Data : Boolean := True;
   end Protected_Example;

   Prot_Ex  : Protected_Example;

end Pass;

--  fail.ads

package Fail is

   --  Not near entry

   pragma Max_Entry_Queue_Depth (40);                                --  ERROR

   --  Task type

   task type Task_Example is

      entry Insert (Item : in Integer)
         with Max_Entry_Queue_Depth => 10;                           --  ERROR

      -- Entry family in task type

      entry A (Positive) (Item : in Integer)
         with Max_Entry_Queue_Depth => 10;                           --  ERROR

   end Task_Example;

   Task_Ex : Task_Example;

   --  Aspect applied to protected type

   protected type Protected_Failure_0
      with Max_Entry_Queue_Depth => 50 is                            --  ERROR

      entry A (Item : Integer);
   private
      Data : Integer := 0;
   end Protected_Failure_0;

   Protected_Failure_0_Ex : Protected_Failure_0;

   protected type Protected_Failure is
      pragma Max_Entry_Queue_Depth (10);                             --  ERROR

      --  Duplicates

      entry A (Item : Integer)
         with Max_Entry_Queue_Depth => 10;                           --  OK
      pragma Max_Entry_Queue_Depth (4);                              --  ERROR

      entry B (Item : Integer);
      pragma Max_Entry_Queue_Depth (40);                             --  OK
      pragma Max_Entry_Queue_Depth (4);                              --  ERROR

      entry C (Item : Integer)
         with Max_Entry_Queue_Depth => 10,                           --  OK
              Max_Entry_Queue_Depth => 40;                           --  ERROR

      -- Duplicates with the same value

      entry AA (Item : Integer)
         with Max_Entry_Queue_Depth => 10;                           --  OK
      pragma Max_Entry_Queue_Depth (10);                             --  ERROR

      entry BB (Item : Integer);
      pragma Max_Entry_Queue_Depth (40);                             --  OK
      pragma Max_Entry_Queue_Depth (40);                             --  ERROR

      entry CC (Item : Integer)
         with Max_Entry_Queue_Depth => 10,                           --  OK
              Max_Entry_Queue_Depth => 10;                           --  ERROR

      --  On subprogram

      procedure D (Item : Integer)
         with Max_Entry_Queue_Depth => 10;                           --  ERROR

      procedure E (Item : Integer);
      pragma Max_Entry_Queue_Depth (4);                              --  ERROR

      function F (Item : Integer) return Integer
         with Max_Entry_Queue_Depth => 10;                           --  ERROR

      function G (Item : Integer) return Integer;
      pragma Max_Entry_Queue_Depth (4);                              --  ERROR

      --  Bad parameters

      entry H (Item : Integer)
         with Max_Entry_Queue_Depth => 0;                            --  ERROR

      entry I (Item : Integer)
         with Max_Entry_Queue_Depth => -1;                           --  ERROR

      entry J (Item : Integer)
         with Max_Entry_Queue_Depth => 16#FFFF_FFFF_FFFF_FFFF_FFFF#; --  ERROR

      entry K (Item : Integer)
         with Max_Entry_Queue_Depth => False;                        --  ERROR

      entry L (Item : Integer)
         with Max_Entry_Queue_Depth => "JUNK";                       --  ERROR

      entry M (Item : Integer)
         with Max_Entry_Queue_Depth => 1.0;                          --  ERROR

      entry N (Item : Integer)
         with Max_Entry_Queue_Depth => Long_Integer'(3);             --  ERROR

      -- Entry family

      entry O (Boolean) (Item : Integer)
         with Max_Entry_Queue_Depth => 5;                            --  ERROR

   private
      Data : Integer := 0;
   end Protected_Failure;

   I : Positive := 1;

   Protected_Failure_Ex : Protected_Failure;

end Fail;

--  dtest.adb

with Ada.Text_IO; use Ada.Text_IO;

procedure Dtest is
   protected Prot is
      entry Wait;
        pragma Max_Entry_Queue_Depth (2);
      procedure Wakeup;
   private
      Barrier : Boolean := False;
   end Prot;

   protected body Prot is
      entry Wait when Barrier is
      begin
         null;
      end Wait;

      procedure Wakeup is
      begin
         Barrier := True;
      end Wakeup;
   end Prot;

   task type T;

   task body T is
   begin
      Put_Line ("Waiting...");
      Prot.Wait;
   exception
      when others =>
         Put_Line ("Got exception");
   end T;

   T1, T2 : T;
begin
   delay 0.1;

   Prot.Wait;
   Put_Line ("Done");
exception
   when others =>
      Put_Line ("Main got exception");
      Prot.Wakeup;
end Dtest;

----------------------------
-- Compilation and output --
----------------------------

& gcc -c -g -gnatDG pass.ads
& gcc -c -g fail.ads
& grep -c "(2, 5, 0, 4, 6, 10, 11, 11, 11)" pass.ads.dg
& gnatmake -g -q dtest
fail.ads:5:04: pragma "Max_Queue_Length" must apply to a protected entry
fail.ads:12:15: aspect "Max_Queue_Length" cannot apply to task entries
fail.ads:17:15: aspect "Max_Queue_Length" cannot apply to task entries
fail.ads:26:12: aspect "Max_Queue_Length" must apply to a protected entry
fail.ads:36:07: pragma "Max_Queue_Length" must apply to a protected entry
fail.ads:42:07: pragma "Max_Queue_Length" duplicates aspect declared at line 41
fail.ads:46:07: pragma "Max_Queue_Length" duplicates pragma declared at line 45
fail.ads:50:15: aspect "Max_Queue_Length" for "C" previously given at line 49
fail.ads:56:07: pragma "Max_Queue_Length" duplicates aspect declared at line 55
fail.ads:60:07: pragma "Max_Queue_Length" duplicates pragma declared at line 59
fail.ads:64:15: aspect "Max_Queue_Length" for "CC" previously given at line 63
fail.ads:69:15: aspect "Max_Queue_Length" must apply to a protected entry
fail.ads:72:07: pragma "Max_Queue_Length" must apply to a protected entry
fail.ads:75:15: aspect "Max_Queue_Length" must apply to a protected entry
fail.ads:78:07: pragma "Max_Queue_Length" must apply to a protected entry
fail.ads:83:35: entity for aspect "Max_Queue_Length" must be positive
fail.ads:86:35: entity for aspect "Max_Queue_Length" must be positive
fail.ads:89:35: entity for aspect "Max_Queue_Length" out of range of Integer
fail.ads:92:35: expected an integer type
fail.ads:92:35: found type "Standard.Boolean"
fail.ads:95:35: expected an integer type
fail.ads:95:35: found a string type
fail.ads:98:35: expected an integer type
fail.ads:98:35: found type universal real

2018-05-30  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* aspects.adb, aspects.ads: Register new aspect.
	* par-prag.adb (Prag): Register new pragma.
	* sem_ch13.adb (Analyze_Aspect_Specifications): Add processing for new
	aspect similar to Aspect_Max_Queue_Length.
	* sem_prag.adb, sem_prag.ads (Analyze_Pragma): Register new pragma and
	set it to use the same processing as Pragma_Max_Queue_Length.
	* snames.ads-tmpl: Move definition of Name_Max_Entry_Queue_Depth so
	that it can be processed as a pragma in addition to a restriction and
	add an entry for the pragma itself.

From-SVN: r260945
2018-05-30 08:58:33 +00:00
Ed Schonberg
d7db3f4f65 [Ada] Extend the applicability of Thread_Local_Storage to composite types
This patch allows the GNAT-specific Thread_Local_Storage to be applied
to variables of a composite type initiallized with an aggregate with
static components that requires no elaboration code.

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

gcc/ada/

	* freeze.adb (Freeze_Object_Declaration): A pragma Thread_Local_Storage
	is now legal on a variable of composite type initialized with an
	aggregate that is fully static and requires no elaboration code.
	* exp_aggr.adb (Convert_To_Positional): Recognize additional cases of
	nested aggregates that are compile-time static, so they can be used to
	initialize variables declared with Threqd_Local_Storage.
	* doc/gnat_rm/implementation_defined_pragmas.rst: Add documentation on
	Thread_Local_Storage.
	* gnat_rm.texi: Regenerate.

gcc/testsuite/

	* gnat.dg/tls1.adb, gnat.dg/tls1_pkg.ads: New testcase.

From-SVN: r260944
2018-05-30 08:58:27 +00:00
Yannick Moy
f2a3c2fa82 [Ada] Correctly ignore Assertion_Policy in modes CodePeer and GNATprove
In the modes for static analysis with CodePeer or formal verification with
GNATprove, the value of Assertion_Policy for a given policy is ignored if
it's not Disable, as CodePeer/GNATprove are meant to check assertions even
when not enabled at run time. This was not done consistently, which could
lead to spurious errors on policy mismatch on ghost code inside assertions.

There is no impact on compilation.

2018-05-30  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* sem_util.adb (Policy_In_Effect): Take into account CodePeer and
	GNATprove modes.

From-SVN: r260943
2018-05-30 08:58:17 +00:00
Justin Squirek
efa760f0ca [Ada] ACATS 4.1G - CXAG003 - Name_Case_Equivalence doesn't exist
Implement a missing portion of Ada 2005's AI05-0049-1 for subprogram
Ada.Directories.Name_Case_Equivalence so that user programs can account for
operating system differences in case sensitivity.

------------
-- Source --
------------

--  main.adb

with Ada.Directories; use Ada.Directories;
with Ada.Text_IO;     use Ada.Text_IO;
procedure Main is
begin

  --  Directory layout:
  --     /empty +-- Nothing...
  --
  --     /mutliplefiles +-- "TEST1.TXT"
  --                    |
  --                "test1.txt"
  --
  --     /singlefile +-- "test1.txt"
  --
  --     /noncasable +-- "!"
  --

  Put_Line (Name_Case_Equivalence ("./empty")'Image);
  Put_Line (Name_Case_Equivalence ("./multiplefiles")'Image);
  Put_Line (Name_Case_Equivalence ("./singlefile")'Image);
  Put_Line (Name_Case_Equivalence ("./multiplefiles/test1.txt")'Image);
  Put_Line (Name_Case_Equivalence ("./singlefile/test1.txt")'Image);
  Put_Line (Name_Case_Equivalence ("./noncaseable/!")'Image);
end;

----------------------------
-- Compilation and Output --
----------------------------

& gnatmake -q main.adb
& main
CASE_SENSITIVE
CASE_SENSITIVE
CASE_SENSITIVE
CASE_SENSITIVE
CASE_SENSITIVE
CASE_SENSITIVE

2018-05-30  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* libgnat/a-direct.adb, libgnat/a-direct.ads (Name_Case_Equivalence):
	Add implementation.
	(Start_Search): Modify to use Start_Search_Internal
	(Start_Search_Internal): Add to break out an extra flag for searching
	case insensative due to the potential for directories within the same
	OS to allow different casing schemes.
	* sysdep.c (__gnat_name_case_equivalence): Add as a default fallback
	for when the more precise solution fails.

From-SVN: r260942
2018-05-30 08:58:12 +00:00
Hristian Kirtchev
0c506265dd [Ada] Minor reformatting
2018-05-30  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* checks.adb, exp_ch5.adb, exp_ch7.adb, exp_unst.adb, sem_eval.adb:
	Minor reformatting.

From-SVN: r260941
2018-05-30 08:58:05 +00:00
Pascal Obry
42e508b45d [Ada] Add support for Define_Switch with a callback in GNAT.Command_Line
Add support for Define_Switch with a callback in GNAT.Command_Line.

The callback is called for every instance of the switch found on the
command line. This make it possible to have full control over the
switch value and chain multiple actions if needed.

2018-05-30  Pascal Obry  <obry@adacore.com>

gcc/ada/

	* libgnat/g-comlin.ads (Value_Callback, Define_Switch): New.
	* libgnat/g-comlin.adb: Add corresponding implementation.

From-SVN: r260940
2018-05-30 08:58:00 +00:00
Gary Dismukes
7cc6d416ae [Ada] Fix several typos
2018-05-30  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

	* sem_res.adb, sem_util.adb: Fix several typos.

From-SVN: r260939
2018-05-30 08:57:55 +00:00
Olivier Hainque
5e648d3021 [Ada] Craft .ctors/.dtors sections manually for VxWorks EH registration
Temporary change for experimental purposes. Further cleanups will
be needed if this sheme works as we hope.

2018-05-30  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

	* vx_crtbegin_attr.c (CTOR_ATTRIBUTE, DTOR_ATTRIBUTE): Empty.
	(eh_registration_ctors, eh_registration_tors): New static variables,
	forced in a .ctors/.dtors section, respectively, with priority.

From-SVN: r260938
2018-05-30 08:57:50 +00:00
Bob Duff
812e6118dc [Ada] Spell preanalysis, preanalyze correctly
2018-05-30  Bob Duff  <duff@adacore.com>

gcc/ada/

	* aspects.ads, contracts.adb, exp_util.adb, expander.adb, expander.ads,
	freeze.adb, inline.adb, lib-xref.adb, sem.ads, sem_aggr.adb,
	sem_attr.adb, sem_ch13.adb, sem_ch3.adb, sem_ch5.adb, sem_ch6.adb,
	sem_ch8.adb, sem_dim.adb, sem_elab.adb, sem_res.adb, sem_res.ads,
	sinfo.ads: Spell preanalysis, preanalyze correctly.

From-SVN: r260937
2018-05-30 08:57:44 +00:00
Bob Duff
83d849a825 [Ada] Minor comment rework in GNAT.Secondary_Stack_Info
2018-05-30  Bob Duff  <duff@adacore.com>

gcc/ada/

	* libgnat/g-sestin.ads: Rework documentation comments.

From-SVN: r260936
2018-05-30 08:57:38 +00:00
Piotr Trojanek
dc67cfeaec [Ada] Reuse Is_Rewrite_Substitution where possible
Use a high-level Is_Rewrite_Substitution instead of a low-level inequality,
with the intention to improve the code easier to read. Semantics unaffected,
so no test provided.

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

gcc/ada/

	* errout.adb, exp_aggr.adb, exp_ch7.adb, exp_util.adb, lib.adb,
	sem_ch13.adb, sem_ch4.adb, sem_res.adb, sem_util.adb
	(Has_Original_Node): Refactor to use Is_Rewrite_Substitution.

From-SVN: r260935
2018-05-30 08:57:33 +00:00
Piotr Trojanek
81c8f261d7 [Ada] Simplify conditions by removing always true conjuncts
Checking "Original_Node (N) /= N" is equivalent to "Is_Rewrite_Substitution
(N)", which is checked just two lines before. Trivial simplification,
semantics unaffected.

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

gcc/ada/

	* sem_prag.adb (Analyze_Pragma): Remove conjuncts that are always true.

From-SVN: r260934
2018-05-30 08:57:26 +00:00
Hristian Kirtchev
56a05ce083 [Ada] Spurious error on legal synchronized constituent
This patch corrects the predicate which determines whether an entity denotes a
synchronized object as per SPARK RM 9.1. to account for a case where the object
is not atomic, but its type is.

The patch also cleans up various atomic object-related predicates.

2018-05-30  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* sem_util.adb (Is_Atomic_Object): Cleaned up. Split the entity logic
	in a separate routine.
	(Is_Atomic_Object_Entity): New routine.
	(Is_Atomic_Prefix): Cleaned up.
	(Is_Synchronized_Object): Check that the object is atomic, or its type
	is atomic.
	(Object_Has_Atomic_Components): Removed.
	* sem_util.ads (Is_Atomic_Object): Reword the comment on usage.
	(Is_Atomic_Object_Entity): New routine.

gcc/testsuite/

	* gnat.dg/synchronized1.adb, gnat.dg/synchronized1.ads: New testcase.

From-SVN: r260933
2018-05-30 08:57:21 +00:00
Ed Schonberg
131780ac08 [Ada] Refine logic to set Needs_Activation_Record on subprogram types
2018-05-30  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch3.adb (Access_Subprogram_Declaration): The flag
	Needs_Activation_Record is only needed on a subprogram type, not on a
	pointer to such.
	* sem_res.adb (Resolve_Selected_Component): If the context type and the
	component type are anonymous access to subprograms, use the component
	type to obtain the proper value of Needs_Activation_Record flag for the
	expression.

From-SVN: r260932
2018-05-30 08:57:11 +00:00
Eric Botcazou
df8aa2b7e1 [Ada] Minor comment addition
2018-05-30  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Add
	comment about the memset case.

From-SVN: r260931
2018-05-30 08:57:05 +00:00
Bob Duff
5a0c86bdde [Ada] Secondary stack leak in "for X of ..." loops
This patch fixes a memory leak bug. In particular, in a loop of the form "for X
of ...", with a type that has the Iterable aspect specified, if the result of
the Element function is returned on the secondary stack (e.g. the result
subtype has caller-unknown size), then memory for the secondary stack could
leak.

2018-05-30  Bob Duff  <duff@adacore.com>

gcc/ada/

	* exp_ch5.adb (Expand_Formal_Container_Element_Loop): Remove the code
	to analyze the Elmt_Decl, because it gets analyzed in the wrong scope.
	We need to analyze it as part of analyzing the block, so that if the
	call to Element that initializes Elmt_Decl returns on the secondary
	stack, the block will ss_mark/ss_release. This block is inside the
	loop; we don't want to leak memory until the loop exits.  The purpose
	of analyzing Elmt_Decl first was to catch the error of modifying it,
	which is illegal because it's a loop parameter. The above causes us to
	miss that error.  Therefore, we add a flag Is_Loop_Parameter, and set
	it on the Element entity, so we end up with an E_Variable node with the
	flag set.
	* einfo.ads, einfo.adb (Is_Loop_Parameter): New flag.
	* sem_ch5.adb (Diagnose_Non_Variable_Lhs): Give the "assignment to loop
	parameter not allowed" error if Is_Loop_Parameter.
	* sem_util.adb (Is_Variable): Return False if Is_Loop_Parameter, to
	trigger the call to Diagnose_Non_Variable_Lhs.

From-SVN: r260930
2018-05-30 08:56:59 +00:00
Arnaud Charlet
88ad52c90d [Ada] Ignore out of range values for System.Priority in CodePeer mode
2018-05-30  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* checks.adb (Apply_Scalar_Range_Check):
	* sem_eval.adb (Check_Non_Static_Context, Out_Of_Range): Ignore out of
	range values for System.Priority in CodePeer mode since the actual
	target compiler may provide a wider range.

From-SVN: r260929
2018-05-30 08:56:54 +00:00