1. 22 Jul, 2019 40 commits
    • cgraph.c (dump_graphviz): New function. · 34e64622
      	* cgraph.c (dump_graphviz): New function.
      	* cgraph.h (dump_graphviz): New function.
      	* symtab.c (dump_graphviz): New function.
      
      	* lang.opt (flag_dump_callgraph): New flag.
      	* lto-dump.c (dump_symtab_graphviz): New function.
      	(dump_tool_help): New option.
      	(lto_main): Handle graphviz dumping.
      
      From-SVN: r273708
      Giuliano Belinassi committed
    • Rename testsuite directory to match P0553R4 stable names · 2ac8e322
      	* testsuite/26_numerics/bit/bitops.count/*: Rename to ...
      	* testsuite/26_numerics/bit/bit.count/*: Here.
      
      From-SVN: r273707
      Jonathan Wakely committed
    • Adjust std::rotl, std::rotr etc to match final P0553R4 proposal · f35da524
      This proposal has now been accepted for C++20, with a few changes. This
      patch adjusts std::rotl and std::rotr to match the final specification
      and declares the additions for C++2a mode even when __STRICT_ANSI__ is
      defined.
      
      	* include/std/bit (__rotl, __rotr): Change second parameter from
      	unsigned int to int and handle negative values.
      	(rotl, rotr): Remove check for __STRICT_ANSI__. Change second
      	parameter from unsigned int to int. Add nodiscard attribute.
      	* testsuite/26_numerics/bit/bitops.rot/rotl.cc: Rename to ...
      	* testsuite/26_numerics/bit/bit.rotate/rotl.cc: Here. Test negative
      	shifts.
      	* testsuite/26_numerics/bit/bitops.rot/rotr.cc: Rename to ...
      	* testsuite/26_numerics/bit/bit.rotate/rotr.cc: Here. Test negative
      	shifts.
      
      From-SVN: r273706
      Jonathan Wakely committed
    • Change std::ceil2 to be undefined if the result can't be represented · 281ab2fb
      	* include/std/bit (__ceil2): Make unrepresentable results undefined,
      	as per P1355R2. Add debug assertion. Perform one left shift, not two,
      	so that out of range values cause undefined behaviour. Ensure that
      	shift will still be undefined if left operand is promoted.
      	* testsuite/26_numerics/bit/bit.pow.two/ceil2.cc: Replace checks for
      	unrepresentable values with checks that they are not core constant
      	expressions.
      	* testsuite/26_numerics/bit/bit.pow.two/ceil2_neg.cc: New test.
      
      From-SVN: r273705
      Jonathan Wakely committed
    • [aarch64]: add usra and ssra combine patterns · 462e6f9a
      This patch adds support to combine:
      
      1) ushr and add into usra, example:
      
      ushr    v0.16b, v0.16b, 2
      add     v0.16b, v0.16b, v2.16b
      ---
      usra    v2.16b, v0.16b, 2
      
      2) sshr and add into ssra, example:
      
      sshr    v1.16b, v1.16b, 2
      add     v1.16b, v1.16b, v3.16b
      ---
      ssra    v3.16b, v1.16b, 2
      
      Committed on behalf of Sylvia Taylor <sylvia.taylor@arm.com>.
      Reviewed-by: <James.greenhalgh@arm.com>
      
      gcc/ChangeLog:
      
      
              * config/aarch64/aarch64-simd.md
              (*aarch64_simd_sra<mode>): New.
              * config/aarch64/iterators.md
              (SHIFTRT): New iterator.
              (sra_op): New attribute.
      
      gcc/testsuite/ChangeLog:
      
              * gcc.target/aarch64/simd/ssra.c: New test.
              * gcc.target/aarch64/simd/usra.c: New test.
      
      From-SVN: r273703
      Sylvia Taylor committed
    • MSP430: Don't save all callee-saved regs in non-leaf interrupt functions · 310b5fb7
      Previously, all callee-saved regs would unconditionally be saved
      in interrupt functions that call another function.
      
      2019-07-22  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
      
      	* config/msp430/msp430.c (msp430_preserve_reg_p): Don't save
      	callee-saved regs R4->R10 in an interrupt function that calls another
      	function.
      
      2019-07-22  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
      
      	* gcc.target/msp430/isr-push-pop-main.c: New test.
      	* gcc.target/msp430/isr-push-pop-isr-430.c: Likewise.
      	* gcc.target/msp430/isr-push-pop-isr-430x.c: Likewise.
      	* gcc.target/msp430/isr-push-pop-leaf-isr-430.c: Likewise.
      	* gcc.target/msp430/isr-push-pop-leaf-isr-430x.c: Likewise.
      
      From-SVN: r273702
      Jozef Lawrynowicz committed
    • [jit] check result_type in gcc_jit_context_new_unary_op · 9afb91b2
      2019-07-22  Andrea Corallo <andrea.corallo@arm.com>
      
      	* jit-recording.c (unary_op_reproducer_strings): Make it extern.
      	(binary_op_reproducer_strings): Likewise.
      	* jit-recording.h (unary_op_reproducer_strings): Likewise.
      	(binary_op_reproducer_strings): Likewise.
      	* libgccjit.c (gcc_jit_context_new_unary_op): Check result_type to be a
      	numeric type.
      	* libgccjit.c (gcc_jit_context_new_binary_op): Improve error message.
      
      2019-07-22  Andrea Corallo <andrea.corallo@arm.com>
      
      	* jit.dg/test-error-gcc_jit_context_new_unary_op-bad-res-type.c:
      	New testcase.
      	* jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c:
      	Adjust error message.
      
      From-SVN: r273700
      Andrea Corallo committed
    • [rs6000] Add _mm_blend_epi16 and _mm_blendv_epi8 · 1c4547f1
      Add compatibility implementations of _mm_blend_epi16 and _mm_blendv_epi8
      intrinsics.
      
      Respective test cases are copied almost verbatim (minor changes to
      the dejagnu head lines) from i386.
      
      2019-07-22  Paul A. Clarke  <pc@us.ibm.com>
      
      [gcc]
      
      	* config/rs6000/smmintrin.h (_mm_blend_epi16): New.
      	(_mm_blendv_epi8): New.
      
      [gcc/testsuite]
      
      	* gcc.target/powerpc/sse4_1-check.h: New.
      	* gcc.target/powerpc/sse4_1-pblendvb.c: New.
      	* gcc.target/powerpc/sse4_1-pblendw.c: New.
      	* gcc.target/powerpc/sse4_1-pblendw-2.c: New.
      
      From-SVN: r273698
      Paul A. Clarke committed
    • [Ada] More complete information level for -gnatR4 output · 46ebb491
      This instructs -gnatR4 to also list the Etype of user-declared objects
      if it is compiler-generated, for example in:
      
      package P2 is
      
        Arr_V : array (1 .. 5) of Integer;
      
      end P2;
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* repinfo.adb (List_Entities): Also list compiled-generated
      	types present as Etype of objects.
      
      From-SVN: r273697
      Eric Botcazou committed
    • [Ada] Sinfo: update doc about Do_Division/Overlflow/Range_Check · ae3f6530
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sinfo.ads: Update the documentation about the
      	Do_Division_Check, Do_Overflow_Check and Do_Range_Check flags.
      
      From-SVN: r273696
      Eric Botcazou committed
    • [Ada] Fix missing check for no-op conversion to fixed-point type · 267c7ff6
      This plugs a small loophole in the compiler for the case of a
      multiplication or a division in a fixed-point type wrapped in a no-op
      conversion, e.g. to the same fixed-point type.
      
      The front-end fails to generate a range check for the operation.  This
      used to be caught by the back-end, which would generate the range check,
      but this is no longer the case because we now make sure to reset the
      Do_Range_Check flag in all cases before invoking the back-end.
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_ch4.adb (Expand_N_Type_Conversion): Beef up comment.
      	(Fixup_Universal_Fixed_Operation): Set the base type instead of
      	the type of the enclosing type conversion on the operation.
      
      gcc/testsuite/
      
      	* gnat.dg/fixedpnt6.adb: New testcase.
      
      From-SVN: r273695
      Eric Botcazou committed
    • [Ada] Remove misleading warning/suggestion in membership test · ad277369
      This patch removes a warning on a membership test whose right operand is
      given by a range. In many cases the check can be replaced by the use of
      attribute 'Valid, but if the bounds of range are type conversion this
      replacement would be invorrect and the warning and suggestion are
      misleading.
      
      2019-07-22  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_ch4.adb (Expand_N_In): Do not suggest the use of attribute
      	'Valid as a replacement for a range check on a discrete type
      	when the bounds of the range are given by type conversions,
      	because in such a case there are distinct types involved and the
      	subbested attribute replacement would be misplaced.
      
      gcc/testsuite/
      
      	* gnat.dg/warn26.adb: New testcase.
      
      From-SVN: r273694
      Ed Schonberg committed
    • [Ada] Adapt ownership checking in SPARK to traversal functions · a2119175
      A traversal function, especially when implemented as an expression
      function, may need to return an if-expression or case-expression, while
      still respecting Legality Rule SPARK RM 3.10(5). This case is now
      allowed in GNATprove.
      
      There is no impact on compilation.
      
      2019-07-22  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_spark.adb (Get_Root_Object, Is_Path_Expression,
      	Is_Subpath_Expression): Add parameter Is_Traversal to adapt
      	these functions to the case of paths returned from a traversal
      	function.
      	(Read_Indexes): Handle the case of an if-expression or
      	case-expression.
      	(Check_Statement): Check Emit_Messages only when issuing an
      	error message. This is important as Emit_Messages may store the
      	information that an error was detected.
      
      From-SVN: r273693
      Yannick Moy committed
    • [Ada] Overhaul code implementing conversions involving fixed-point types · 8113b0c7
      This ovehauls the code implementing conversions involving fixed-point
      types in the front-end because it leaks the Do_Range_Check flag in
      several places to the back-end, which is a violation of the documented
      interface between front-end and back-end.
      
      This also does a bit of housekeeping work throughout it in the process.
      
      There should be essentially no functional changes.
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* checks.adb (Apply_Type_Conversion_Checks): Do not set
      	Do_Range_Check flag on conversions from fixed-point types
      	either.
      	* exp_attr.adb: Add use and with clause for Expander.
      	(Expand_N_Attribute_Reference) <Fixed_Value, Integer_Value>: Set
      	the Conversion_OK flag and do not generate overflow/range checks
      	manually.
      	* exp_ch4.adb (Expand_N_Qualified_Expression): Remove
      	superfluous clearing of Do_Range_Check flag.
      	(Discrete_Range_Check): New procedure to generate a range check
      	for discrete types.
      	(Real_Range_Check): Remove redundant local variable and adjust.
      	Remove useless shortcut.  Clear Do_Range_Check flag on all
      	paths.
      	(Expand_N_Type_Conversion): Remove redundant test on
      	Conversion_OK.  Call Discrete_Range_Check to generate range
      	checks on discrete types.  Remove obsolete code for
      	float-to-integer conversions.  Add code to generate range checks
      	for conversions involving fixed-point types.
      
      From-SVN: r273692
      Eric Botcazou committed
    • [Ada] Sprint: fix pasto in comment · c936411f
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sprint.ads: Fix pasto in comment.
      
      From-SVN: r273691
      Eric Botcazou committed
    • [Ada] Spurious error passing access to class-wide interface type · 137dabdd
      The compiler reports an spurious error when the formal parameter of a
      subprogram is an access to a class wide interface type and the actual
      parameter is an allocator of an object covering such interface type.
      
      2019-07-22  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	* sem_res.adb (Resolve_Actuals): Replace code that displaces the
      	pointer to an allocated object to reference its secondary
      	dispatch table by a type conversion (which takes care of
      	handling all cases).
      
      gcc/testsuite/
      
      	* gnat.dg/class_wide5.adb: New testcase.
      
      From-SVN: r273690
      Javier Miranda committed
    • [Ada] Small enhancement to the -gnatD/-gnatG output for fixed-point types · 2f8313ce
      This is a small enhancement to the -gnatD/-gnatG output: the base type
      of fixed-point types, which is usually an itype, used to be printed as
      ??? in this case.  It is now printed in a similar fashion as the first
      subtype.
      
      For the following package:
      
      package P is
      
        type D is delta 128.0 / (2 ** 15) range 0.0 .. 256.0;
      
      end P;
      
      the  -gnatD/-gnatG must now be:
      
      Source recreated from tree for P (spec)
      ---------------------------------------
      
      p_E : short_integer := 0;
      
      package p is
         type p__d is delta [1.0/256.0] range 0.0 .. 256.0;
         [type p__TdB is delta [1.0/256.0] range -[2147483648.0*2**(-8)] ..
           [2147483647.0*2**(-8)]]
         freeze p__TdB []
      end p;
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sprint.adb (Sprint_Node_Actual)
      	<N_Decimal_Fixed_Point_Definition>: Swap a couple of spaces.
      	(Write_Itype): Minor consistency fixes throughout.  Add support
      	for printing ordinary and decimal fixed-point types and
      	subtypes.
      
      From-SVN: r273689
      Eric Botcazou committed
    • [Ada] Beef up comment in exp_attr.adb · 75f6bfce
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb (Expand_Loop_Entry_Attribute): Beef up comment.
      
      From-SVN: r273688
      Eric Botcazou committed
    • [Ada] Optimization loses exception in improper use of 'Value · ca305a84
      This patch prevents an improper removal of an evaluation of attribute
      'Value on an illegal input that will raise Constraint_Error, when a
      subsequent use of this evaluation might be optimized away by the
      back-end.
      
      2019-07-22  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-valboo.ads, libgnat/s-valcha.ads,
      	libgnat/s-valdec.ads, libgnat/s-valenu.ads,
      	libgnat/s-valint.ads, libgnat/s-vallld.ads,
      	libgnat/s-vallli.ads, libgnat/s-valllu.ads,
      	libgnat/s-valrea.ads, libgnat/s-valuns.ads,
      	libgnat/s-valwch.ads: Change categorization of packages that
      	implement attribute 'Value from Pure to Preelaborate, to prevent
      	undesirable optimizations when the evaluation of the attribute
      	raises Constraint_Error, but subsequent use of the result of
      	this evsaluation is removed by a subsequent optimization.
      
      gcc/testsuite/
      
      	* gnat.dg/opt80.adb: New testcase.
      
      From-SVN: r273687
      Ed Schonberg committed
    • [Ada] Misleading warning on variable not assigned · 8c029ee8
      This patch removes a warning on a referenced entity with no explicit
      prior assignment, if the type of the entity has
      Preelaborable_Initialixation, such as Exception_Occurrence.
      
      2019-07-22  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_warn.adb (Check_References): Do not emit s warning on a
      	referenced entity with no explicit assignment if the type of the
      	entity has Preelaborable_Initialixation, such as
      	Exception_Occurrence.
      
      gcc/testsuite/
      
      	* gnat.dg/warn25.adb: New testcase.
      
      From-SVN: r273686
      Ed Schonberg committed
    • [Ada] Usage of signed type in array bounds in CCG · 22862ba6
      2019-07-22  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	* exp_ch4.adb (Size_In_Storage_Elements): Improve the expansion
      	to handle array indexes that are modular type.
      	(Expand_N_Allocator): For 32-bit targets improve the generation
      	of the runtime check associated with large arrays supporting
      	arrays initialized with a qualified expression.
      	* libgnat/s-imenne.adb (Image_Enumeration_8,
      	Image_Enumeration_16, Image_Enumeration_32): Define the index of
      	Index_Table with range Natural'First .. Names'Length since in
      	the worst case all the literals of the enumeration type would be
      	single letter literals and the Table built by the frontend would
      	have as many components as the length of the names string. As a
      	result of this enhancement, the internal tables declared using
      	Index_Table have a length closer to the real needs, thus
      	avoiding the declaration of large arrays on 32-bit CCG targets.
      
      From-SVN: r273685
      Javier Miranda committed
    • [Ada] Issue warning or error message on ignored typing constraint · 5dcbefb1
      GNAT ignores the discriminant constraint on a component when it applies
      to the type of the record being analyzed. Now issue a warning on Ada
      code when ignoring this constraint, or an error on SPARK code.
      
      2019-07-22  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Constrain_Access): Issue a message about ignored
      	constraint.
      
      gcc/testsuite/
      
      	* gnat.dg/warn24.adb: New testcase.
      
      From-SVN: r273684
      Yannick Moy committed
    • [Ada] Fix spurious visibility error for tagged type with inlining · 11699257
      This fixes a spurious visibility error for the very peculiar case where
      an operator that operates on the class-wide type of a tagged type is
      declared in a package, the operator is renamed in another package where
      a subtype of the tagged type is declared, and both packages end up in
      the transititive closure of a unit compiled with optimization and
      inter-inlining (-gnatn).
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch8.adb (End_Use_Type): Reset the In_Use flag on the
      	class-wide type if the type is tagged.
      	(Use_One_Type): Add commentary on the handling of the class-wide
      	type.
      
      gcc/testsuite/
      
      	* gnat.dg/inline17.adb, gnat.dg/inline17_pkg1.adb,
      	gnat.dg/inline17_pkg1.ads, gnat.dg/inline17_pkg2.ads,
      	gnat.dg/inline17_pkg3.adb, gnat.dg/inline17_pkg3.ads: New
      	testcase.
      
      From-SVN: r273683
      Eric Botcazou committed
    • [Ada] Remove obsolete Is_For_Access_Subtype machinery · ff9d220e
      This change removes the Is_For_Access_Subtype machinery from the
      compiler.  This machinery was devised a long time ago to deal with a
      peculiarity of the freezing for access-to-record subtypes but has been
      degenerate for quite some time now and does not seem to serve any useful
      purpose at this point.
      
      Morever it has an annoying side effect whereby it causes Underlying_Type
      to return the (unconstrained) base record type when invoked on the
      designated record subtype, which is very problematic for GNATprove.
      
      There should be no functional changes.
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* einfo.ads (Is_For_Access_Subtype): Delete.
      	(Set_Is_For_Access_Subtype): Likewise.
      	* einfo.adb (Is_For_Access_Subtype): Likewise.
      	(Set_Is_For_Access_Subtype): Likewise.
      	(Write_Entity_Flags): Do not write Is_For_Access_Subtype.
      	* exp_ch4.adb (Expand_N_Selected_Component): Do not deal with
      	it.
      	* exp_spark.adb (Expand_SPARK_N_Selected_Component): Likewise.
      	* sem_ch4.adb (Analyze_Explicit_Dereference): Likewise.
      	* sem_ch3.adb (Build_Discriminated_Subtype): Do not build a
      	special private subtype for access-to-record subtypes.
      
      From-SVN: r273682
      Eric Botcazou committed
    • [Ada] Spurious error on private subtype of derived access type · 78e92e11
      This patch fixes a spurious type error on a dynamic predicate on a
      subtype of a private type whose full view is a derived access type.
      Prior to it, the base type of the subtype would appear to be the parent
      type of the derived type instead of the derived type itself, leading to
      problems downstream.
      
      The following package must now compile quietly:
      
      with S;
      
      package T is
         type B_Pointer is private;
         Null_B_Pointer : constant B_Pointer;
         function OK (B : B_Pointer) return Boolean is (B /= Null_B_Pointer);
         subtype Valid_B_Pointer is B_Pointer
           with Dynamic_Predicate => OK (Valid_B_Pointer);
      private
         type B_Pointer is new S.A_Pointer;
         Null_B_Pointer : constant B_Pointer := B_Pointer (S.Null_A_Pointer);
      end;
      
      package S is
         type A_Type is new Integer;
         type A_Pointer is access A_Type;
         Null_A_Pointer : constant A_Pointer := null;
      end;
      
      Moreover, it also plugs a loophole in the compiler whereby an
      instantiation of a generic with a formal subprogram declaration nested
      in an enclosing generic package would be done even if there was a
      mismatch between an original and a derived types involved in the
      instantiation.
      
      The compiler must now gives the following error:
      p.adb:11:43: no visible subprogram matches the specification for "Action"
      on
      
      with Q;
      with R;
      with G;
      
      procedure P is
      
        package My_G is new G (Q.T);
      
        procedure Proc (Value : R.T) is null;
      
        procedure Iter is new My_G.Iteration_G (Proc);
      
      begin
        null;
      end;
      
      with R;
      
      package Q is
      
        type T is new R.T;
      
      end Q;
      
      package R is
      
        type T is private;
      
      private
      
        type T is access Integer;
      
      end R;
      
      generic
      
        type Value_T is private;
      
      package G is
      
        generic
          with procedure Action (Value : Value_T);
        procedure Iteration_G;
      
      end G;
      
      package body G is
      
        procedure Iteration_G is null;
      
      end G;
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Complete_Private_Subtype): Rework the setting of
      	the Etype of the full view for full base types that cannot
      	contain any discriminant.  Remove code and comment about it in
      	the main path.
      
      From-SVN: r273681
      Eric Botcazou committed
    • [Ada] Type inconsistency in floating_point type declarations · a517030d
      This patch fixes an inconsistency in the typing of the bounds of a
      floting point type declaration, when some bound is given by a dtatic
      constant of an explicit type, instead of a real literal, Previous to
      this patch the bound of the type retained the given type, leading to
      spurious errors in Codepeer.
      
      2019-07-22  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Convert_Bound): Subsidiary of
      	Floating_Point_Type_Declaration, to handle properly range
      	specifications with bounds that may include static constants of
      	a given type rather than real literals.
      
      From-SVN: r273680
      Ed Schonberg committed
    • [Ada] Further fix non-stored discriminant in aggregate for GNATprove · 2c26d262
      GNATprove expects discriminants appearing in aggregates and their types
      to be resolved to stored discriminants.  This extends the machinery that
      makes sure this is the case for default initialization expressions so as
      to also handle component associations in these expressions.
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_aggr.adb (Rewrite_Bound): Be prepared for discriminals
      	too.
      	(Rewrite_Range;): Minor tweak.
      	(Resolve_Record_Aggregate): For a component with default
      	initialization whose expression is an array aggregate, also
      	rewrite the bounds of the component associations, if any.
      
      From-SVN: r273679
      Eric Botcazou committed
    • [Ada] Premature finalization of controlled temporaries in case expressions · 2418e231
      The compiler was generating finalization of temporary objects used in
      evaluating case expressions for controlled types in cases where the case
      statement created by Expand_N_Expression_With_Actions is rewritten as an
      if statement. This is fixed by inheriting the From_Condition_Expression
      flag from the rewritten case statement.
      
      The test below must generate the following output when executed:
      
      $ main
      Xs(1): 1
      
      ----
      
      package Test is
      
         type E is (E1, E2);
         procedure Test (A : in E);
      
      end Test;
      
      ----
      
      with Ada.Text_IO;
      with Ada.Finalization;
      
      package body Test is
      
         type T is new Ada.Finalization.Controlled with
            record
               N : Natural := 0;
            end record;
      
         overriding procedure Finalize (X : in out T) is
         begin
            X.N := 42;
         end Finalize;
      
         type T_Array is array (Positive range <>) of T;
      
         function Make_T (N : Natural) return T is
         begin
            return (Ada.Finalization.Controlled with N => N);
         end Make_T;
      
         X1 : constant T := Make_T (1);
         X2 : constant T := Make_T (2);
      
         procedure Test (A : in E)
         is
            Xs : constant T_Array := (case A is
                                         when E1 => (1 => X1),
                                         when E2 => (1 => X2));
         begin
            Ada.Text_IO.Put_Line ("Xs(1):" & Natural'Image (Xs (1).N));
         end Test;
      
      end Test;
      
      ----
      
      with Test;
      
      procedure Main is
      begin
         Test.Test (Test.E1);
      end Main;
      
      2019-07-22  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* exp_ch5.adb (Expand_N_Case_Statement): In the case where a
      	case statement is rewritten as an equivalent if statement,
      	inherit the From_Condition_Expression flag from the case
      	statement.
      
      From-SVN: r273678
      Gary Dismukes committed
    • [Ada] Internal error on iterator for limited private discriminated type · e7f4682a
      This patch further extends the short-circuit, aka optimization, present
      in the Check_Constrained_Object procedure used for renaming declarations
      to all limited types, so as to prevent type mismatches downstream in
      more cases.
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch8.adb (Check_Constrained_Object): Further extend the
      	special optimization to all limited types.
      
      gcc/testsuite/
      
      	* gnat.dg/iter5.adb, gnat.dg/iter5_pkg.ads: New testcase.
      
      From-SVN: r273677
      Eric Botcazou committed
    • [Ada] Fix missing Constraint_Error for Enum_Val attribute · fd90c808
      This fixes an old issue involving the Enum_Val attribute: it does not
      always raise a Constraint_Error exception when the specified value is
      not valid for the enumeration type (instead a modulo computation is
      applied to the value).
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb (Expand_N_Attribute_Reference)
      	<Attribute_Enum_Val>: Set No_Truncation on the
      	N_Unchecked_Type_Conversion built around the argument passed to
      	the attribute.
      
      gcc/testsuite/
      
      	* gnat.dg/enum_val1.adb: New testcase.
      
      From-SVN: r273676
      Eric Botcazou committed
    • [Ada] Ensure meaningless digits in a string are discarded · 7ddc639b
      2019-07-22  Nicolas Roche  <roche@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-valrea.adb (Scan_Real): Ignore non significative
      	digits to avoid converging to infinity in some cases.
      
      gcc/testsuite/
      
      	* gnat.dg/float_value1.adb: New testcase.
      
      From-SVN: r273675
      Nicolas Roche committed
    • [Ada] Fix wrong assumption on bounds in GNAT.Encode_String · 52860cc1
      This fixes a couple of oversights in the GNAT.Encode_String package,
      whose effect is to assume that all the strings have a lower bound of 1.
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* libgnat/g-encstr.adb (Encode_Wide_String): Fix oversight.
      	(Encode_Wide_Wide_String): Likewise.
      
      gcc/testsuite/
      
      	* gnat.dg/encode_string1.adb, gnat.dg/encode_string1_pkg.adb,
      	gnat.dg/encode_string1_pkg.ads: New testcase.
      
      From-SVN: r273674
      Eric Botcazou committed
    • [Ada] Fix spurious loop warning for function with Out parameter · f3d2fbfd
      The compiler gives a spurious warning about a possible infinite while
      loop whose condition contains a call to a function that takes an Out or
      In/Out parameter and whose actual is a variable that is not modified in
      the loop, because it still thinks that functions can only have In
      parameters.
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_warn.adb (Find_Var): Bail out for a function call with an
      	Out or In/Out parameter.
      
      gcc/testsuite/
      
      	* gnat.dg/warn23.adb: New testcase.
      
      From-SVN: r273673
      Eric Botcazou committed
    • [Ada] Ensure Ctrl-C is not emited on terminated processes · 1a79e03b
      Due to the reuse policy of PID on Windows. Sending a Ctrl-C to a dead
      process might result in a Ctrl-C sent to the wrong process. The check is
      also implemented on Unix platforms and avoid unecessary waits.
      
      2019-07-22  Nicolas Roche  <roche@adacore.com>
      
      gcc/ada/
      
      	* terminals.c (__gnat_tty_waitpid): Support both blocking and
      	not blocking mode.
      	* libgnat/g-exptty.ads (Is_Process_Running): New function.
      	* libgnat/g-exptty.adb (Close): Don't try to interrupt/terminate
      	a process if it is already dead.
      
      From-SVN: r273672
      Nicolas Roche committed
    • [Ada] Incorrect values in conversion from fixed-point subtype with 'Small · 4123b473
      This patch fixes incorrect computations involving a fixed-point subtype
      whose parent type has an aspect specification for 'Small.
      
      Executing the following:
      
         gnatmake -q conv
         ./conv
      
      must yield:
      
         9000.000000
          9.00000000000000E+03
          9000.000000
          9.00000000000000E+03
          9.00000000000000E+03
          9.00000000000000E+03
          9.00000000000000E+03
          9.00000000000000E+03
      
      ----
      with Text_IO; use Text_IO;
      procedure Conv is
        V_P : constant := 10.0 ** (-6);
        M_V : constant := 9000.0;
        N_V : constant := -9000.0;
        type V_T is delta V_P range N_V .. M_V  with Small => V_P;
        subtype S_T is V_T range 0.0 .. M_V;
      
        function Convert (Input : in S_T) return Long_Float is
        begin
          Put_Line (Input'Img);
          Put_Line (Long_Float'Image (Long_Float (Input)));
          return Long_Float (Input);
        end Convert;
      
      begin
      
        declare
          Var_S : constant S_T := S_T'Last;
          Output : constant Long_Float := Convert (Var_S);
        begin
          Put_Line (Long_Float'Image (Convert (Var_S)));
          Put_Line (Long_Float'Image (Long_Float (Var_S)));
          Put_Line (Output'Img);
        end;
      
        Put_Line (Long_Float'Image (Long_Float (S_T'Last)));
      
      end Conv;
      
      2019-07-22  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* freeze.adb (Freeze_Fixed_Point_Type):  When freezing a
      	fixed-point subtype, check whether the parent type declarastion
      	includes an aspect specification for the 'Small type attribute,
      	and inherit the specified value.
      
      From-SVN: r273671
      Ed Schonberg committed
    • [Ada] Crash in C++ constructor without external and link name · 2fdc20b6
      The compiler blows up processing the declaration of a tagged type
      variable that has a C++ constructor without external or link name. After
      this patch the frontend reports an error.
      
      2019-07-22  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	* freeze.adb (Freeze_Subprogram): Check that C++ constructors
      	must have external or link name.
      
      gcc/testsuite/
      
      	* gnat.dg/cpp_constructor2.adb: New testcase.
      
      From-SVN: r273670
      Javier Miranda committed
    • [Ada] Spurious warning about a useless assignment · 0af66bdc
      This patch removes a spurious warning about a useless assignment, when a
      composite object is the target of an assignment and is an actual for an
      out parameter in a subsewuent call, and there is an intervening use of
      the object as the prefix of a selected component in an intervening
      operation.
      
      2019-07-22  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_res.adb (Resolve_Selected_Component): If the prefix has a
      	deferred reference, generate the correct reference now, to
      	indicate that the previous assignment is used.  This prevents
      	spurious warnings on useless assignments when compiling with all
      	warnings enabled. when there is a subsequent call in the same
      	stqtement list, in which the prefix of the selected component is
      	the actual for an out parameter.
      
      gcc/testsuite/
      
      	* gnat.dg/warn22.adb: New testcase.
      
      From-SVN: r273669
      Ed Schonberg committed
    • [Ada] Fix internal error on array slice in loop and Loop_Invariant · c961d820
      This fixes an internal error caused by the presence of an Itype in a
      wrong scope.  This Itype is created for an array slice present in the
      condition of a while loop whose body also contains a pragma
      Loop_Invariant, initially in the correct scope but then relocated into a
      function created for the pragma.
      
      2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb (Expand_Loop_Entry_Attribute): Copy the condition
      	of a while loop instead of simply relocating it.
      
      gcc/testsuite/
      
      	* gnat.dg/loop_invariant1.adb, gnat.dg/loop_invariant1.ads: New
      	testcase.
      
      From-SVN: r273668
      Eric Botcazou committed
    • re PR tree-optimization/91221 (ICE in get_int_cst_ext_nunits, at tree.c:1299 since r273548) · 8801ca5c
      2019-07-22  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/91221
      	* tree-ssa-sccvn.c (vn_reference_lookup_3): Appropriately
      	restrict partial-def handling of empty constructors and
      	memset to refs with known offset.
      
      	* g++.dg/pr91221.C: New testcase.
      
      From-SVN: r273667
      Richard Biener committed
    • x86/AVX512: improve generated code for bit-wise negation of vectors of integers · ff8f129b
      NOT on vectors of integers does not require loading a constant vector of
      all ones into a register - VPTERNLOG can be used here (and could/should
      be further used to carry out other binary and ternary logical operations
      which don't have a special purpose instruction).
      
      gcc/
      2019-07-22  Jan Beulich  <jbeulich@suse.com>
      
      	* config/i386/sse.md (ternlogsuffix): New.
      	(one_cmpl<mode>2): Don't force CONSTM1_RTX into a register when
      	AVX512F is in use.
      	(<mask_codefor>one_cmpl<mode>2<mask_name>): New.
      
      From-SVN: r273663
      Jan Beulich committed