1. 15 Aug, 2019 1 commit
  2. 14 Aug, 2019 39 commits
    • PR testsuite/91449 - new test case gcc.dg/strlenopt-73.c fails on powerpc64 · 173275c5
      gcc/testsuite/ChangeLog:
      	* gcc.dg/strlenopt-73.c: Restrict 128-bit tests to i386.
      
      From-SVN: r274495
      Martin Sebor committed
    • PR c++/91436 fix C++ dialect for std::make_unique fix-it hint · 07ee5924
      The std::make_unique function wasn't added until C++14, and neither was
      the std::complex_literals namespace.
      
      gcc/cp:
      
      	PR c++/91436
      	* name-lookup.c (get_std_name_hint): Fix min_dialect field for
      	complex_literals and make_unique entries.
      
      gcc/testsuite:
      
      	PR c++/91436
      	* g++.dg/lookup/missing-std-include-5.C: Limit test to C++14 and up.
      	* g++.dg/lookup/missing-std-include-6.C: Don't check make_unique in
      	test that runs for C++11.
      	* g++.dg/lookup/missing-std-include-8.C: Check make_unique here.
      
      From-SVN: r274492
      Jonathan Wakely committed
    • Deprecate std::__is_nullptr_t type trait · 07fd852f
      This non-standard extension is redundant and unused by the library.
      
      	* include/std/type_traits (__is_nullptr_t): Add deprecated attribute.
      
      From-SVN: r274491
      Jonathan Wakely committed
    • i386-expand.c (ix86_expand_vector_init_one_nonzero): Use vector_set path for… · 8a0eb0cd
      i386-expand.c (ix86_expand_vector_init_one_nonzero): Use vector_set path for TARGET_MMX_WITH_SSE && TARGET_SSE4_1.
      
      	* config/i386/i386-expand.c (ix86_expand_vector_init_one_nonzero)
      	<case E_V8QImode>: Use vector_set path for
      	TARGET_MMX_WITH_SSE && TARGET_SSE4_1.
      	(ix86_expand_vector_init_one_nonzero) <case E_V8QImode>:
      	Do not widen for TARGET_MMX_WITH_SSE && TARGET_SSE4_1.
      
      From-SVN: r274490
      Uros Bizjak committed
    • noinit-attribute.c: Fix typo. · 8069cc6b
      2019-08-14  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.c-torture/execute/noinit-attribute.c: Fix typo.
      
      From-SVN: r274489
      Christophe Lyon committed
    • Implement C++20 p0879 - Constexpr for swap and swap related functions. · 7a91c710
      2019-08-14  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement C++20 p0879 - Constexpr for swap and swap related functions.
      	* include/std/version (__cpp_lib_constexpr_swap_algorithms): New macro.
      	* include/bits/algorithmfwd.h (__cpp_lib_constexpr_swap_algorithms):
      	New macro.
      	(iter_swap, make_heap, next_permutation, partial_sort_copy, pop_heap)
      	(prev_permutation, push_heap, reverse, rotate, sort_heap, swap)
      	(swap_ranges, nth_element, partial_sort, sort): Add constexpr.
      	* include/bits/move.h (swap): Add constexpr.
      	* include/bits/stl_algo.h (__move_median_to_first, __reverse, reverse)
      	(__gcd, __rotate, rotate, __partition, __heap_select)
      	(__partial_sort_copy, partial_sort_copy, __unguarded_partition)
      	(__unguarded_partition_pivot, __partial_sort, __introsort_loop, __sort)
      	(__introselect, __chunk_insertion_sort, next_permutation)
      	(prev_permutation, partition, partial_sort, nth_element, sort)
      	(__iter_swap::iter_swap, iter_swap, swap_ranges): Add constexpr.
      	* include/bits/stl_algobase.h (__iter_swap::iter_swap, iter_swap)
      	(swap_ranges): Add constexpr.
      	* include/bits/stl_heap.h (__push_heap, push_heap, __adjust_heap,
      	__pop_heap, pop_heap, __make_heap, make_heap, __sort_heap, sort_heap):
      	Add constexpr.
      	* include/std/type_traits (swap): Add constexpr.
      	* testsuite/25_algorithms/headers/algorithm/synopsis.cc: Add constexpr.
      	* testsuite/25_algorithms/iter_swap/constexpr.cc: New test.
      	* testsuite/25_algorithms/make_heap/constexpr.cc: New test.
      	* testsuite/25_algorithms/next_permutation/constexpr.cc: New test.
      	* testsuite/25_algorithms/nth_element/constexpr.cc: New test.
      	* testsuite/25_algorithms/partial_sort/constexpr.cc: New test.
      	* testsuite/25_algorithms/partial_sort_copy/constexpr.cc: New test.
      	* testsuite/25_algorithms/partition/constexpr.cc: New test.
      	* testsuite/25_algorithms/pop_heap/constexpr.cc: New test.
      	* testsuite/25_algorithms/prev_permutation/constexpr.cc: New test.
      	* testsuite/25_algorithms/push_heap/constexpr.cc: New test.
      	* testsuite/25_algorithms/reverse/constexpr.cc: New test.
      	* testsuite/25_algorithms/rotate/constexpr.cc: New test.
      	* testsuite/25_algorithms/sort/constexpr.cc: New test.
      	* testsuite/25_algorithms/sort_heap/constexpr.cc: New test.
      	* testsuite/25_algorithms/swap/constexpr.cc: New test.
      	* testsuite/25_algorithms/swap_ranges/constexpr.cc: New test.
      
      From-SVN: r274488
      Edward Smith-Rowland committed
    • builtins.c (expand_builtin_init_descriptor): Set memory alignment. · 0bdf9f92
      2019-08-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * builtins.c (expand_builtin_init_descriptor): Set memory alignment.
      
      From-SVN: r274487
      Bernd Edlinger committed
    • PR tree-optimization/91294 - [10 Regression] wrong strlen result of a conditional with an offset · 34fcf41e
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/91294
      	* gcc.dg/strlenopt-44.c: Adjust tested result.
      	* gcc.dg/strlenopt-70.c: Avoid exercising unimplemnted optimization.
      	* gcc.dg/strlenopt-73.c: New test.
      	* gcc.dg/strlenopt-74.c: New test.
      	* gcc.dg/strlenopt-75.c: New test.
      	* gcc.dg/strlenopt-76.c: New test.
      	* gcc.dg/strlenopt-77.c: New test.
      
      gcc/ChangeLog:
      
      	PR tree-optimization/91294
      	* tree-ssa-strlen.c (handle_store): Avoid treating lower bound of
      	source length as exact.
      
      From-SVN: r274486
      Martin Sebor committed
    • PR c++/91391 - bogus -Wcomma-subscript warning. · b1c0d185
      	* parser.c (cp_parser_postfix_open_square_expression): Don't warn about
      	a deprecated comma here.  Pass warn_comma_subscript down to
      	cp_parser_expression.
      	(cp_parser_expression): New bool parameter.  Warn about uses of a comma
      	operator within a subscripting expression.
      	(cp_parser_skip_to_closing_square_bracket): Revert to pre-r274121 state.
      	(cp_parser_skip_to_closing_square_bracket_1): Remove.
      
      	* g++.dg/cpp2a/comma5.C: New test.
      
      Co-Authored-By: Marek Polacek <polacek@redhat.com>
      
      From-SVN: r274483
      Jakub Jelinek committed
    • Add generic support for noinit attribute. · f0033821
          Similar to what already exists for TI msp430 or in TI compilers for
          arm, this patch adds support for the "noinit" attribute.
      
          It is convenient for embedded targets where the user wants to keep the
          value of some data when the program is restarted: such variables are
          not zero-initialized. It is mostly a helper/shortcut to placing
          variables in a dedicated section.
      
          It's probably desirable to add the following chunk to the GNU linker:
          diff --git a/ld/emulparams/armelf.sh b/ld/emulparams/armelf.sh
          index 272a8bc..9555cec 100644
          --- a/ld/emulparams/armelf.sh
          +++ b/ld/emulparams/armelf.sh
          @@ -10,7 +10,19 @@ OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7)
          *(.vfp11_veneer) *(.v4_bx)'
           OTHER_BSS_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__bss_start__ =
          .${CREATE_SHLIB+)};"
           OTHER_BSS_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}_bss_end__ =
          .${CREATE_SHLIB+)}; ${CREATE_SHLIB+PROVIDE (}__bss_end__ =
          .${CREATE_SHLIB+)};"
           OTHER_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__end__ = .${CREATE_SHLIB+)};"
           -OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }'
           +OTHER_SECTIONS='
           +.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
           +  /* This section contains data that is not initialised during load
           +     *or* application reset.  */
           +   .noinit (NOLOAD) :
           +   {
           +     . = ALIGN(2);
           +     PROVIDE (__noinit_start = .);
           +     *(.noinit)
           +     . = ALIGN(2);
           +     PROVIDE (__noinit_end = .);
           +   }
           +'
      
          so that the noinit section has the "NOLOAD" flag.
      
          I added a testcase if gcc.c-torture/execute, gated by the new noinit
          effective-target.
      
          Finally, I tested on arm-eabi, but not on msp430 for which I do not
          have the environment.
      
      gcc/ChangeLog:
      
      2019-08-14  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* doc/extend.texi: Add "noinit" attribute documentation.
      	* doc/sourcebuild.texi: Add noinit effective target documentation.
      	* varasm.c (default_section_type_flags): Add support for "noinit" section.
      	(default_elf_select_section): Add support for "noinit" attribute.
      	* config/msp430/msp430.c (msp430_attribute_table): Remove "noinit" entry.
      
      gcc/c-family/ChangeLog:
      
      2019-08-14  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* c-attribs.c (c_common_attribute_table): Add "noinit" entry. Add
      	exclusion with "section" attribute.
      	(attr_noinit_exclusions): New table.
      	(handle_noinit_attribute): New function.
      
      gcc/testsuite/ChangeLog:
      
      2019-08-14  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* lib/target-supports.exp (check_effective_target_noinit): New
      	proc.
      	* gcc.c-torture/execute/noinit-attribute.c: New test.
      
      From-SVN: r274482
      Christophe Lyon committed
    • re PR rtl-optimization/91154 (456.hmmer regression on Haswell caused by r272922) · 93cf5515
      2019-08-14  Richard Biener  <rguenther@suse.de>
              Uroš Bizjak  <ubizjak@gmail.com>
      
      	PR target/91154
      	* config/i386/i386-features.h (scalar_chain::scalar_chain): Add
      	mode arguments.
      	(scalar_chain::smode): New member.
      	(scalar_chain::vmode): Likewise.
      	(dimode_scalar_chain): Rename to...
      	(general_scalar_chain): ... this.
      	(general_scalar_chain::general_scalar_chain): Take mode arguments.
      	(timode_scalar_chain::timode_scalar_chain): Initialize scalar_chain
      	base with TImode and V1TImode.
      	* config/i386/i386-features.c (scalar_chain::scalar_chain): Adjust.
      	(general_scalar_chain::vector_const_cost): Adjust for SImode
      	chains.
      	(general_scalar_chain::compute_convert_gain): Likewise.  Add
      	{S,U}{MIN,MAX} support.
      	(general_scalar_chain::replace_with_subreg): Use vmode/smode.
      	(general_scalar_chain::make_vector_copies): Likewise.  Handle
      	non-DImode chains appropriately.
      	(general_scalar_chain::convert_reg): Likewise.
      	(general_scalar_chain::convert_op): Likewise.
      	(general_scalar_chain::convert_insn): Likewise.  Add
      	fatal_insn_not_found if the result is not recognized.
      	(convertible_comparison_p): Pass in the scalar mode and use that.
      	(general_scalar_to_vector_candidate_p): Likewise.  Rename from
      	dimode_scalar_to_vector_candidate_p.  Add {S,U}{MIN,MAX} support.
      	(scalar_to_vector_candidate_p): Remove by inlining into single
      	caller.
      	(general_remove_non_convertible_regs): Rename from
      	dimode_remove_non_convertible_regs.
      	(remove_non_convertible_regs): Remove by inlining into single caller.
      	(convert_scalars_to_vector): Handle SImode and DImode chains
      	in addition to TImode chains.
      	* config/i386/i386.md (<maxmin><MAXMIN_IMODE>3): New expander.
      	(*<maxmin><MAXMIN_IMODE>3_1): New insn-and-split.
      	(*<maxmin>di3_doubleword): Likewise.
      
      	* gcc.target/i386/pr91154.c: New testcase.
      	* gcc.target/i386/minmax-3.c: Likewise.
      	* gcc.target/i386/minmax-4.c: Likewise.
      	* gcc.target/i386/minmax-5.c: Likewise.
      	* gcc.target/i386/minmax-6.c: Likewise.
      	* gcc.target/i386/minmax-1.c: Add -mno-stv.
      	* gcc.target/i386/minmax-2.c: Likewise.
      
      Co-Authored-By: Uros Bizjak <ubizjak@gmail.com>
      
      From-SVN: r274481
      Richard Biener committed
    • [AArch64] Use SVE BIC for conditional arithmetic · 1b187f36
      This patch uses BIC to pattern-match conditional AND with an inverted
      third input.  It also adds extra tests for AND, ORR and EOR.
      
      2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>
      	    Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64-sve.md (*cond_bic<mode>_2)
      	(*cond_bic<mode>_any): New patterns.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_logical_1.c: New test.
      	* gcc.target/aarch64/sve/cond_logical_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_5.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_5_run.c: Likewise.
      
      Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
      
      From-SVN: r274480
      Richard Sandiford committed
    • [AArch64] Use SVE UXT[BHW] as a form of predicated AND · d113ece6
      UXTB, UXTH and UXTW are equivalent to predicated ANDs with the constants
      0xff, 0xffff and 0xffffffff respectively.  This patch uses them in the
      patterns for IFN_COND_AND.
      
      2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/aarch64.c (aarch64_print_operand): Allow %e to
      	take the equivalent mask, as well as a bit count.
      	* config/aarch64/predicates.md (aarch64_sve_uxtb_immediate)
      	(aarch64_sve_uxth_immediate, aarch64_sve_uxt_immediate)
      	(aarch64_sve_pred_and_operand): New predicates.
      	* config/aarch64/iterators.md (sve_pred_int_rhs2_operand): New
      	code attribute.
      	* config/aarch64/aarch64-sve.md
      	(cond_<SVE_INT_BINARY:optab><SVE_I:mode>): Use it.
      	(*cond_uxt<mode>_2, *cond_uxt<mode>_any): New patterns.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_uxt_1.c: New test.
      	* gcc.target/aarch64/sve/cond_uxt_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_4_run.c: Likewise.
      
      From-SVN: r274479
      Richard Sandiford committed
    • [AArch64] Add SVE conditional conversion patterns · c5e16983
      This patch adds patterns to match conditional conversions between
      integers and like-sized floats.  The patterns are actually more
      general than that, but the other combinations can only be tested
      via the ACLE.
      
      2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/aarch64-sve.md
      	(*cond_<SVE_COND_FCVTI:optab>_nontrunc<SVE_F:mode><SVE_HSDI:mode>)
      	(*cond_<SVE_COND_ICVTF:optab>_nonextend<SVE_HSDI:mode><SVE_F:mode>):
      	New patterns.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_convert_1.c: New test.
      	* gcc.target/aarch64/sve/cond_convert_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_5.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_5_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_6.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_6_run.c: Likewise.
      
      From-SVN: r274478
      Richard Sandiford committed
    • [AArch64] Add SVE conditional floating-point unary patterns · b21f7d53
      This patch adds patterns to match conditional unary operations
      on floating-point modes.  At the moment we rely on combine to merge
      separate arithmetic and vcond_mask operations, and since the latter
      doesn't accept zero operands, we miss out on the opportunity to use
      the movprfx /z alternative.  (This alternative is tested by the ACLE
      patches though.)
      
      2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>
      	    Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64-sve.md
      	(*cond_<SVE_COND_FP_UNARY:optab><SVE_F:mode>_2): New pattern.
      	(*cond_<SVE_COND_FP_UNARY:optab><SVE_F:mode>_any): Likewise.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_unary_1.c: Add tests for
      	floating-point types.
      	* gcc.target/aarch64/sve/cond_unary_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_4.c: Likewise.
      
      Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
      
      From-SVN: r274477
      Richard Sandiford committed
    • [AArch64] Add SVE conditional integer unary patterns · 3c9f4963
      This patch adds patterns to match conditional unary operations
      on integers.  At the moment we rely on combine to merge separate
      arithmetic and vcond_mask operations, and since the latter doesn't
      accept zero operands, we miss out on the opportunity to use the
      movprfx /z alternative.  (This alternative is tested by the ACLE
      patches though.)
      
      2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>
      	    Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64-sve.md
      	(*cond_<SVE_INT_UNARY:optab><SVE_I:mode>_2): New pattern.
      	(*cond_<SVE_INT_UNARY:optab><SVE_I:mode>_any): Likewise.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_unary_1.c: New test.
      	* gcc.target/aarch64/sve/cond_unary_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_4_run.c: Likewise.
      
      Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
      
      From-SVN: r274476
      Richard Sandiford committed
    • Add more entries to the C++ get_std_name_hint array · 7eeb5982
      	* name-lookup.c (get_std_name_hint): Add more entries.
      
      From-SVN: r274475
      Jonathan Wakely committed
    • [Ada] Improve performance of Containers.Functional_Base · 4b0f6ee8
      This patch modifies the implementation of Functional_Base to damp the
      cost of its subprograms at runtime in specific cases. Instead of copying
      the entire underlying array to create a new container, containers can
      share the same Array_Base attribute. Performance on common use cases of
      formal and functional containers is improved with this patch.
      
      2019-08-14  Joffrey Huguet  <huguet@adacore.com>
      
      gcc/ada/
      
      	* libgnat/a-cofuba.ads: Add a Length attribute to type
      	Container. Add a type Array_Base which replaces the previous
      	Elements attribute of Container.
      	(Content_Init): New subprogram. It is used to initialize the
      	Base attribute of Container.
      	* libgnat/a-cofuba.adb (Resize): New subprogram. It is used to
      	resize the underlying array of a container if necessary.
      	(=, <=, Find, Get, Intersection, Length, Num_Overlaps, Set,
      	Union): Update to match changes in type declarations.
      	(Add): Modify body to damp the time and space cost in a specific
      	case.
      	(Content_Init): New subprogram. It is used to initialize the
      	Base attribute of Container.
      	(Remove): Modify body to damp the time and space cost in a
      	specific case.
      
      From-SVN: r274474
      Joffrey Huguet committed
    • [Ada] Alignment may be specified as zero · ff0889eb
      An Alignment clause or an aspect_specification for Alignment may be
      specified as 0, which is treated the same as 1.
      
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Get_Alignment_Value): Return 1 for Alignment 0,
      	and do not give an error.
      	* doc/gnat_rm/representation_clauses_and_pragmas.rst: Update the
      	corresponding documentation.
      	* gnat_rm.texi: Regenerate.
      
      gcc/testsuite/
      
      	* gnat.dg/alignment15.adb: New testcase.
      
      From-SVN: r274473
      Bob Duff committed
    • [Ada] Further cleanup in inlining machinery · f0539a79
      This is visible if you pass a very small number by means of -gnateinn.
      
      2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Add_Pending_Instantiation): Fix off-by-one error
      	in the comparison against the maximum number of instantiations.
      
      From-SVN: r274472
      Eric Botcazou committed
    • [Ada] Further cleanup in inlining machinery · 0cc1d9ad
      No practical functional changes.
      
      2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Add_Pending_Instantiation): Use greater-or-equal
      	in the comparison against the maximum number of instantiations.
      
      From-SVN: r274471
      Eric Botcazou committed
    • [Ada] Do not crash with -gnatR3 on Ghost aspects · 022c9dfe
      2019-08-14  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_aux.adb (Next_Rep_Item): If a node in the rep chain
      	involves a Ghost aspect it may have been replaced by a null
      	statement; use the original node to find next Rep_Item.
      	* repinfo.adb (List_Entities): Do not list an Ignored
      	Ghost_Entity, for which information may have been deleted.
      
      From-SVN: r274470
      Ed Schonberg committed
    • [Ada] Warn about unknown condition in Compile_Time_Warning · 0246fe44
      The compiler now warns if the condition in a pragma Compile_Time_Warning
      or Compile_Time_Error does not have a compile-time-known value. The
      warning is not given for pragmas in a generic template, but is given for
      pragmas in an instance.
      
      The -gnatw_c and -gnatw_C switches turn the warning on and off. The
      default is on.
      
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.ads, sem_prag.adb
      	(Process_Compile_Time_Warning_Or_Error): In parameterless
      	version, improve detection of whether we are in a generic unit
      	to cover the case of an instance within a generic unit.
      	(Process_Compile_Time_Warning_Or_Error): Rename the
      	two-parameter version to be
      	Validate_Compile_Time_Warning_Or_Error, and do not export it.
      	Issue a warning if the condition is not known at compile time.
      	The key point is that the warning must be given only for pragmas
      	deferred to the back end, because the back end discovers
      	additional values that are known at compile time.  Previous
      	changes in this ticket have enabled this by deferring to the
      	back end without checking for special cases such as 'Size.
      	(Validate_Compile_Time_Warning_Or_Error): Rename to be
      	Defer_Compile_Time_Warning_Error_To_BE.
      	* warnsw.ads, warnsw.adb (Warn_On_Unknown_Compile_Time_Warning):
      	Add new switches -gnatw_c and -gnatw_C to control the above
      	warning.
      	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
      	Document new switches.
      	* gnat_ugn.texi: Regenerate.
      
      gcc/testsuite/
      
      	* gnat.dg/warn27.adb: New testcase.
      
      From-SVN: r274469
      Bob Duff committed
    • [Ada] Further cleanup in the inlining machinery · ebf7f0ab
      2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch12.adb (Might_Inline_Subp): Rework comment and restrict
      	the shortcut based on Is_Inlined to the back-end inlining case.
      
      From-SVN: r274468
      Eric Botcazou committed
    • [Ada] Incorrect error on inline protected function · dba246bf
      This patch fixes a bug where if a protected function has a pragma
      Inline, and has no local variables, and the body consists of a single
      extended_return_statement, and the result type is an indefinite
      composite subtype, and inlining is enabled, the compiler gives an error,
      even though the program is legal.
      
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Check_And_Split_Unconstrained_Function): Ignore
      	protected functions to get rid of spurious error. The
      	transformation done by this procedure triggers legality errors
      	in the generated code in this case.
      
      gcc/testsuite/
      
      	* gnat.dg/inline19.adb, gnat.dg/inline19.ads: New testcase.
      
      From-SVN: r274467
      Bob Duff committed
    • [Ada] Defer processing of unknown CTW/E conditions to the back end · 2d1439c7
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Defer
      	processing to the back end in all cases where the pragma's
      	condition is not known at compile time during the front end
      	(except in generics), as opposed to detecting 'Size attributes
      	and the like. This ensures that we take advantage of whatever
      	can be compile-time known after running the back end, as opposed
      	to having the front end guess what the back end can do.  Remove
      	a little duplicated code at the call site.
      	* gnat1drv.adb (Post_Compilation_Validation_Checks): Unlock the
      	Elists while in Validate_Compile_Time_Warning_Errors, because it
      	does analysis and name resolution, which sometimes involves
      	adding Elists.
      
      From-SVN: r274466
      Bob Duff committed
    • [Ada] Compiler speedup with inlining across units · 4b96d386
      This change is aimed at speeding up the inlining across units done by
      the Ada compiler when -gnatn is specified and in the presence of units
      instantiating a lot of generic packages.
      
      The current implementation is as follows: when a generic package is
      being instantiated, the compiler scans its spec for the presence of
      subprograms with an aspect/pragma Inline and, upon finding one,
      schedules the instantiation of its body.  That's not very efficient
      because the compiler doesn't know yet if one of those inlined
      subprograms will eventually be called from the main unit.
      
      The new implementation arranges for the compiler to instantiate the body
      on demand, i.e. when it encounters a call to one of the inlined
      subprograms.  That's still not optimal because, at this point, the
      compiler has not yet computed whether the call itself is reachable from
      the main unit (it will do this computation at the very end of the
      processing, just before sending the inlined units to the code generator)
      but that's nevertheless a net progress.
      
      The patch also enhances the -gnatd.j option to make it output the list
      of instances "inlined" this way.  The following package is a simple
      example:
      
      with Q;
      
      procedure P is
      begin
        Q.Proc;
      end;
      
      package Q is
      
        procedure Proc;
        pragma Inline (Proc);
      
      end Q;
      
      with G;
      
      package body Q is
      
        package My_G is new G (1);
      
        procedure Proc is
          Val : constant Integer := My_G.Func;
        begin
          if Val /= 1 then
            raise Program_Error;
          end if;
        end;
      
      end Q;
      
      generic
      
        Value : Integer;
      
      package G is
      
        function Func return Integer;
        pragma Inline (Func);
      
      end G;
      
      package body G is
      
        function Func return Integer is
        begin
          return Value;
        end;
      
      end G;
      
      2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* einfo.ads (Is_Called): Document new usage on E_Package
      	entities.
      	* einfo.adb (Is_Called): Accept E_Package entities.
      	(Set_Is_Called): Likewise.
      	* exp_ch6.adb (Expand_Call_Helper): Move code dealing with
      	instances for back-end inlining to Add_Inlined_Body.
      	* inline.ads: Remove with clauses for Alloc and Table.
      	(Pending_Instantiations): Move to...
      	* inline.adb: Add with clauses for Alloc, Uintp, Table and
      	GNAT.HTable.
      	(Backend_Instances): New variable.
      	(Pending_Instantiations): ...here.
      	(Called_Pending_Instantiations): New table.
      	(Node_Table_Size): New constant.
      	(Node_Header_Num): New subtype.
      	(Node_Hash): New function.
      	(To_Pending_Instantiations): New hash table.
      	(Add_Inlined_Body): Bail out early for subprograms in the main
      	unit or subunit.  Likewise if the Is_Called flag is set.  If the
      	subprogram is an instance, invoke Add_Inlined_Instance.  Call
      	Set_Is_Called earlier.  If the subrogram is within an instance,
      	invoke Add_Inlined_Instance.  Also deal with the case where the
      	call itself is within an instance.
      	(Add_Inlined_Instance): New procedure.
      	(Add_Inlined_Subprogram): Remove conditions always fulfilled.
      	(Add_Pending_Instantiation): Move the defence against ludicruous
      	number of instantiations to here. When back-end inlining is
      	enabled, associate an instantiation with its index in table and
      	mark a few selected kinds of instantiations as always needed.
      	(Initialize): Set Backend_Instances to No_Elist.
      	(Instantiate_Body): New procedure doing the work extracted
      	from...
      	(Instantiate_Bodies): ...here.  When back-end inlining is
      	enabled, loop over Called_Pending_Instantiations instead of
      	Pending_Instantiations.
      	(Is_Nested): Minor tweak.
      	(List_Inlining_Info): Also list the contents of
      	Backend_Instances.
      	* sem_ch12.adb (Might_Inline_Subp): Return early if Is_Inlined
      	is set and otherwise set it before returning true.
      	(Analyze_Package_Instantiation): Remove the defence against
      	ludicruous number of instantiations.  Invoke
      	Remove_Dead_Instance instead of doing the removal manually if
      	there is a guaranteed ABE.
      
      From-SVN: r274465
      Eric Botcazou committed
    • [Ada] Equality for nonabstract type derived from interface treated as abstract · 72e324b6
      The compiler was creating an abstract function for the equality
      operation of a (nonlimited) interface type, and that could result in
      errors on generic instantiations that are passed nonabstract types
      derived from the interface type along with the derived type's inherited
      equality operation (complaining about an abstract subprogram being
      passed to a nonabstract formal). The "=" operation of an interface is
      supposed to be nonabstract (a direct consequence of the rule in RM
      4.5.2(6-7)), so we now create an expression function rather than an
      abstract function. The function returns False, but the result is
      unimportant since a function of an abstract type can never actually be
      invoked (its arguments must generally be class-wide, since there can be
      no objects of the type, and calling it will dispatch).
      
      2019-08-14  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* exp_ch3.adb (Predef_Spec_Or_Body): For an equality operation
      	of an interface type, create an expression function (that
      	returns False) rather than declaring an abstract function.
      	* freeze.adb (Check_Inherited_Conditions): Set Needs_Wrapper to
      	False unconditionally at the start of the loop creating wrappers
      	for inherited operations.
      
      gcc/testsuite/
      
      	* gnat.dg/equal11.adb, gnat.dg/equal11_interface.ads,
      	gnat.dg/equal11_record.adb, gnat.dg/equal11_record.ads: New
      	testcase.
      
      From-SVN: r274464
      Gary Dismukes committed
    • [Ada] Strengthen Locked flag · ae3a2b54
      This patch strengthens the Locked flag, by Asserting that it is False on
      operations that might cause reallocation.
      
      No change in behavior (except in the presence of compiler bugs), so no
      test.
      
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* table.adb: Assert that the table is not locked when increasing
      	Last, even if it doesn't cause reallocation.  In other words,
      	assert that on operations that MIGHT cause reallocation.
      	* table.ads: Fix comment accordingly.
      
      From-SVN: r274463
      Bob Duff committed
    • [Ada] Remove documentation of gnatelim · 27af94e7
      2019-08-14  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_ugn/gnat_and_program_execution.rst: Remove
      	documentation of gnatelim.
      
      From-SVN: r274462
      Arnaud Charlet committed
    • [Ada] Tweak the sloc of Compile_Time_Warning warnings · 3a02b469
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Validate_Compile_Time_Warning_Error): Attach the
      	warning to the Sloc of the first pragma argument, rather than to
      	the pragma itself. This is to make pragmas processed after the
      	back end use the same Sloc as pragmas processed earlier, in the
      	front end. There's no reason for this discrepancy, and it
      	hinders further work on this ticket.
      
      From-SVN: r274461
      Bob Duff committed
    • [Ada] Minor: remove a ??? comment · 6d0ca6ac
      Minor: remove the ??? comment for the Inside_A_Generic flag. The current
      name is clear and concise, even though we are noun-ing the adjective
      "generic".
      
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem.ads (Inside_A_Generic): Remove the ??? comment.
      
      From-SVN: r274460
      Bob Duff committed
    • [Ada] Remove obsolete Pending_Descriptor table and related bits · 0984258e
      The table has been unused for a while.  No functional changes.
      
      2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* inline.ads (Pending_Descriptor): Delete.
      	* inline.adb (Initialize): Do not initialize it.
      	* sem_ch12.adb (Delay_Descriptors): Delete.
      	(Analyze_Package_Instantiation): Call
      	Set_Delay_Subprogram_Descriptors instead of Delay_Descriptors
      	throughout.
      
      From-SVN: r274459
      Eric Botcazou committed
    • [Ada] Spurious error in discriminated aggregate · f056076f
      This patch fixes a bug in which a spurious error is given on an
      aggregate of a type derived from a subtype with a constrained
      discriminant.
      
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* exp_aggr.adb (Init_Hidden_Discriminants): Avoid processing the
      	wrong discriminant, which could be of the wrong type.
      
      gcc/testsuite/
      
      	* gnat.dg/discr57.adb: New testcase.
      
      From-SVN: r274458
      Bob Duff committed
    • [Ada] Fix internal error on inlined subprogram instance · 2a127979
      This fixes a long-standing oddity in the procedure analyzing the
      instantiation of a generic subprogram, which would set the
      Is_Generic_Instance flag on the enclosing package generated for the
      instantiation but only to reset it a few lines below.  Now this flag is
      relied upon by the machinery which computes the set of public entities
      to be exposed by a package.
      
      2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch12.adb (Analyze_Instance_And_Renamings): Do not reset
      	the Is_Generic_Instance flag previously set on the package
      	generated for the instantiation of a generic subprogram.
      
      gcc/testsuite/
      
      	* gnat.dg/generic_inst11.adb, gnat.dg/generic_inst11_pkg.adb,
      	gnat.dg/generic_inst11_pkg.ads: New testcase.
      
      From-SVN: r274457
      Eric Botcazou committed
    • [Ada] Crash on quantified expression in disabled assertion · 16b9e3c3
      The defining identifier of a quantified expression may be the freeze
      point of its type.  If the quantified expression appears in an assertion
      that is disavbled, the freeze node for that type may appear in a tree
      that will be discarded when the enclosing pragma is elaborated. To
      ensure that the freeze node is reachable for subsquent uses we must
      generate its freeze node explicitly when the quantified expression is
      analyzed.
      
      2019-08-14  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_ch4.adb (Expand_N_Quantified_Expression): Freeze
      	explicitly the type of the loop parameter.
      
      gcc/testsuite/
      
      	* gnat.dg/assert2.adb, gnat.dg/assert2.ads: New testcase.
      
      From-SVN: r274456
      Ed Schonberg committed
    • [Ada] Sem_Util: fix a bug in New_Copy_Tree · 4cac730c
      No impact on GCC-based compilation.
      
      2019-08-14  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	* sem_util.adb (New_Copy_Tree.Copy_Node_With_Replacement):
      	Update the Chars attribute of identifiers.
      
      From-SVN: r274455
      Javier Miranda committed
    • [Ada] Expose part of ownership checking for use in GNATprove · 1384d88f
      GNATprove needs to be able to call a subset of the ownership legality
      rules from marking. This is provided by a new function
      Sem_SPARK.Is_Legal.
      
      There is no impact on compilation.
      
      2019-08-14  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_spark.adb, sem_spark.ads (Is_Legal): New function exposed
      	for use in GNATprove, to test legality rules not related to
      	permissions.
      	(Check_Declaration_Legality): Extract the part of
      	Check_Declaration that checks rules not related to permissions.
      	(Check_Declaration): Call the new Check_Declaration_Legality.
      	(Check_Type_Legality): Rename of Check_Type. Introduce
      	parameters to force or not checking, and update a flag detecting
      	illegalities.
      	(Check_Node): Ignore attribute references in statement position.
      
      From-SVN: r274454
      Yannick Moy committed
    • [Ada] Check SPARK restriction on Old/Loop_Entry with pointers · 05b77088
      --#! r336866
      --#! no-mail
      
      SPARK RM rule 3.10(14) restricts the use of Old and Loop_Entry
      attributes on prefixes of an owning or observing type (i.e. a type with
      access inside).
      
      There is no impact on compilation.
      
      2019-08-14  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_spark.adb (Check_Old_Loop_Entry): New procedure to check
      	correct use of Old  and Loop_Entry.
      	(Check_Node): Check subprogram contracts.
      	(Check_Pragma): Check Loop_Variant.
      	(Check_Safe_Pointers): Apply checking to library-level
      	subprogram  declarations as well, in order to check their
      	contract.
      
      From-SVN: r274453
      Yannick Moy committed