1. 12 Aug, 2019 16 commits
    • [Ada] Adapt new extended traversal of AST to have optional part · 1debd630
      The new extended traversal of the AST for GNATprove use now optionally
      traverses the ranges under Itypes, based on a formal parameter.
      
      There is no impact on compilation.
      
      2019-08-12  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_util.adb, sem_util.ads (Traverse_More_Func,
      	Traverse_More_Proc): Add formal parameter for Itypes traversal.
      
      From-SVN: r274291
      Yannick Moy committed
    • [Ada] More precise handling of Size/Object_Size in GNATprove · d39f6b24
      GNATprove does a partial expansion which did not allow getting the
      most precise value for attributes Size/Object_Size. Now fixed.
      
      There is no impact on compilation.
      
      2019-08-12  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb, exp_attr.ads (Expand_Size_Attribute): New
      	procedure to share part of the attribute expansion with
      	GNATprove mode.
      	(Expand_N_Attribute_Reference): Extract part of the
      	Size/Object_Size expansion in the new procedure
      	Expand_Size_Attribute.
      	* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Expand
      	Size/Object_Size attributes using the new procedure
      	Expand_Size_Attribute.
      
      From-SVN: r274290
      Yannick Moy committed
    • [Ada] SPARK: disable expansion of Enum_Rep · 08c8696d
      Disable expansion of Enum_Rep into a type conversion as it is incorrect
      in SPARK.
      
      2019-08-12  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Only
      	expand Enum_Rep attribute when its parameter is a literal.
      
      From-SVN: r274289
      Yannick Moy committed
    • [Ada] Inconsistent compile time Constraint_Error warning · 33defa7c
      This patch corrects several bugs within the compiler which led to
      inconsistent handling of compile time Constraint_Errors. Notibly,
      subtype out of range checks which are only out of range of the subtype
      must be warnings while out of range checks where the value is out of
      range of the base type must be an error. Also, type conversions and
      qualified expressions on literals constitute errors on any out of range
      value. The compiler needed many of these cases clarified.
      
      ------------
      -- Source --
      ------------
      
      --  main.ads
      
      with System;
      package Main is
      
         type T_Enum is (Enum_1, Enum_2, Unknown)
           with Default_Value => Unknown;
      
         subtype T_Valid_Enum is T_Enum range Enum_1 .. Enum_2;
      
         Value : T_Valid_Enum; --  WARNING
      
         generic
            type T_Element is (<>);
            Init : T_Element;
         package Generic_Test is
            Value : T_Element := Init;
         end;
      
         package titi is new Generic_Test (T_Valid_Enum, Unknown); --  WARNING
      
         type My_Float is digits System.Max_Base_Digits;
      
         My_Float_Last : constant := My_Float'Last;
         Out_Of_Range  : constant := My_Float_Last + 1.0;
      
         Flt1 : My_Float := Out_Of_Range; --  ERROR
      
         A : Positive := Positive (16#9999_9999_9999#); --  ERROR
         B : Positive := 16#9999_9999_9999#;            --  ERROR
         C : Positive := 0;                             --  WARNING
         D : Positive := Positive (0);                  --  ERROR
         E : Positive := Positive'(16#9999_9999_9999#); --  ERROR
         F : Positive := Positive'(0);                  --  ERROR
      end;
      
      -----------------
      -- Compilation --
      -----------------
      
      $ gnatmake -q -gnatw_a main.adb
      main.ads:9:12: warning: value not in range of type "T_Valid_Enum" defined at
      line 7
      main.ads:9:12: warning: "Constraint_Error" will be raised at run time
      main.ads:18:52: warning: value not in range of type "T_Element" defined at
      line 12, instance at line 18
      main.ads:18:52: warning: "Constraint_Error" will be raised at run time
      main.ads:25:23: value not in range of type "My_Float" defined at line 20
      main.ads:25:23: static expression fails Constraint_Check
      main.ads:27:19: value not in range of type "Standard.Positive"
      main.ads:27:19: static expression fails Constraint_Check
      main.ads:28:19: value not in range of type "Standard.Positive"
      main.ads:28:19: static expression fails Constraint_Check
      main.ads:29:19: warning: value not in range of type "Standard.Positive"
      main.ads:29:19: warning: "Constraint_Error" will be raised at run time
      main.ads:30:19: value not in range of type "Standard.Positive"
      main.ads:30:19: static expression fails Constraint_Check
      main.ads:31:27: value not in range of type "Standard.Positive"
      main.ads:31:27: static expression fails Constraint_Check
      main.ads:32:27: value not in range of type "Standard.Positive"
      main.ads:32:27: static expression fails Constraint_Check
      gnatmake: "main.ads" compilation error
      
      2019-08-12  Justin Squirek  <squirek@adacore.com>
      
      gcc/ada/
      
      	* sem_eval.adb (Check_Non_Static_Context): Add a condition to
      	determine if a range violation constitues a warning or an error.
      	(Out_Of_Range): Add a condition to determine if a range
      	violation constitues a warning or an error.
      
      From-SVN: r274288
      Justin Squirek committed
    • [Ada] Eliminate redundant range checks on conversions · 4e896dad
      This gets rid of redundant range checks generated in 5 out of the 9
      cases of scalar conversions, i.e. (integer, fixed-point, floating-point)
      converted to (integer, fixed-point, floating-point).
      
      The problem is that the Real_Range_Check routine rewrites the conversion
      node into a conversion to the base type so, when its parent node is
      analyzed, a new conversion to the subtype may be introduced, depending
      on the context, giving rise to a second range check against the subtype
      bounds.
      
      This change makes Real_Range_Check rewrite the expression of the
      conversion node instead of the node, so that the type of the node is
      preserved and no new conversion is introduced.  As a matter of fact,
      this is exactly what happens in the float-to-float case which goes to
      the Generate_Range_Check circuit instead and does not suffer from the
      duplication of range checks.
      
      For the following procedure, the compiler must now generate exactly one
      range check per nested function:
      
      procedure P is
      
        type I1 is new Integer range -100 .. 100;
      
        type I2 is new Integer range -200 .. 200;
      
        type D1 is delta 0.5 range -100.0 .. 100.0;
      
        type D2 is delta 0.5 range -200.0 .. 200.0;
      
        type F1 is new Long_Float range -100.0 .. 100.0;
      
        type F2 is new Long_Float range -200.0 .. 200.0;
      
        function Conv (A : I2) return I1 is
        begin
          return I1 (A);
        end;
      
        function Conv (A : D2) return I1 is
        begin
          return I1 (A);
        end;
      
        function Conv (A : F2) return I1 is
        begin
          return I1 (A);
        end;
      
        function Conv (A : I2) return D1 is
        begin
          return D1 (A);
        end;
      
        function Conv (A : D2) return D1 is
        begin
          return D1 (A);
        end;
      
        function Conv (A : F2) return D1 is
        begin
          return D1 (A);
        end;
      
        function Conv (A : I2) return F1 is
        begin
          return F1 (A);
        end;
      
        function Conv (A : D2) return F1 is
        begin
          return F1 (A);
        end;
      
        function Conv (A : F2) return F1 is
        begin
          return F1 (A);
        end;
      
      begin
        null;
      end;
      
      2019-08-12  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_ch4.adb (Real_Range_Check): Do not rewrite the conversion
      	node but its expression instead, after having fetched its
      	current value.  Clear the Do_Range_Check flag on entry.  Return
      	early for a rewritten float-to-float conversion.  Remove
      	redundant local variable.  Suppress all checks when inserting
      	the temporary and do not reanalyze the node.
      
      From-SVN: r274287
      Eric Botcazou committed
    • [Ada] Sprint: minor comment tweak · 5aa76fe1
      2019-08-12  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sprint.ads: Minor comment tweak.
      
      From-SVN: r274286
      Eric Botcazou committed
    • [Ada] Fix leak of Do_Range_Check flag in -gnatVa mode · 1361a4fb
      This fixes a small glitch in Insert_Valid_Check, which needs to
      propagate the Do_Range_Check flag onto the rewritten expression, but
      uses its Original_Node as the source of the copy.  Now Original_Node
      does not necessarily point to the node that was just rewritten, but to
      the ultimately original node, which is not the same node if the
      expression was rewritten multiple times.  The end result is that a
      stalled Do_Range_Check flag can be wrongly resintated and leak to the
      code generator.
      
      2019-08-12  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* checks.adb (Insert_Valid_Check): Do not retrieve the
      	Do_Range_Check flag from the Original_Node but from the
      	Validated_Object.  Remove useless bypass for floating-point
      	types.
      
      gcc/testsuite/
      
      	* gnat.dg/range_check7.adb: New testcase.
      
      From-SVN: r274285
      Eric Botcazou committed
    • [Ada] Extended traversal subprograms for GNATprove · 935b02ae
      GNATprove needs traversal subprograms that do not simply traverse
      syntactic nodes like Atree.Traverse_Func and Atree.Traverse_Proc, but
      also traverse semantic nodes which are logically children of the nodes.
      Now available through Sem_Util.Traverse_More_Func and
      Sem_Util.Traverse_More_Proc.
      
      There is no impact on compilation.
      
      2019-08-12  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_util.adb, sem_util.ads (Traverse_More_Func,
      	Traverse_More_Proc): New traversal subprograms.
      
      From-SVN: r274284
      Yannick Moy committed
    • [Ada] VxWorks: call s-tpopsp.Self only when needed · 96a8b705
      2019-08-12  Jerome Lambourg  <lambourg@adacore.com>
      
      gcc/ada/
      
      	* libgnarl/s-taprop__vxworks.adb (Abort_Handler): Only call
      	s-tpopsp.Self when actually needed.
      
      From-SVN: r274283
      Jerome Lambourg committed
    • [Ada] Plug small loophole in Discrete_Range_Check · 43eb2bb6
      This routine would not return if range checks are suppressed.
      
      2019-08-12  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_ch4.adb (Discrete_Range_Check): Return if checks are
      	suppressed.
      
      From-SVN: r274282
      Eric Botcazou committed
    • [Ada] Add special bypass for obsolete code pattern · 4d7d2736
      This change prevents the analysis phase of the front-end from setting
      the Do_Range_Check flag in the very peculiar case of the source of a
      conversion whose result is passed by reference to a "valued procedure",
      because the expansion phase would not be able to generate the check.
      
      This pattern appears in the ancient DEC Starlet package and it doesn't
      seem to be useful at this point to change the expander to deal with it,
      so instead the analysis phase is adjusted.  Morever the compiler already
      issues a warning in this case so this is probably good enough.
      
      2019-08-12  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_res.adb: Add with & use clause for Sem_Mech and
      	alphabetize.
      	(Resolve_Actuals): Do not apply a scalar range check for the
      	source of a conversion whose result is passed by reference to a
      	valued procedure.
      
      From-SVN: r274281
      Eric Botcazou committed
    • [Ada] Fix missing range check for In/Out parameter with -gnatVa · 13931a38
      This plugs another small loophole in the front-end which fails to
      generate a range check for a scalar In/Out parameter when -gnatVa is
      specified.  This also fixes a few more leaks of the Do_Range_Check flag
      on actual parameters, both in regular and -gnatVa modes, as well as a
      leak specific to expression function in -gnatp mode.
      
      2019-08-12  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* checks.adb (Insert_Valid_Check): Reset the Do_Range_Check flag
      	on the validated object.
      	* exp_ch6.adb (Add_Call_By_Copy_Code): Reset the Do_Range_Check
      	flag on the actual here, as well as on the Expression if the
      	actual is a N_Type_Conversion node.
      	(Add_Validation_Call_By_Copy_Code): Generate the incoming range
      	check if needed and reset the Do_Range_Check flag on the
      	Expression if the actual is a N_Type_Conversion node.
      	(Expand_Actuals): Do not reset the Do_Range_Check flag here.
      	Generate the incoming range check for In parameters here instead
      	of...
      	(Expand_Call_Helper): ...here.  Remove redudant condition.
      	* sem_res.adb (Resolve_Actuals): Use local variable A_Typ and
      	remove obsolete comments.
      	(Resolve_Type_Conversion): Do not force the Do_Range_Check flag
      	on the operand if range checks are suppressed.
      
      gcc/testsuite/
      
      	* gnat.dg/range_check6.adb: New testcase.
      
      From-SVN: r274280
      Eric Botcazou committed
    • [Ada] Fix incorrect Do_Range_Check on type conversion · 68c8d72a
      This gets rid of another leak of the Do_Range_Check flag to the back-end
      which is specific to expression functions.  No functional changes.
      
      2019-08-12  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* checks.adb (Activate_Range_Check): Remove redundant argument.
      	(Generate_Range_Check): Likewise.
      	(Apply_Float_Conversion_Check): Reset the Do_Range_Check flag on
      	entry and remove redundant condition.
      
      From-SVN: r274279
      Eric Botcazou committed
    • Fix Ada comparison failure on SPARC · 52c9b7fa
      	* ipa-predicate.c (add_condition): Restore inverted test.
      
      From-SVN: r274277
      Rainer Orth committed
    • Move is_valid_fd to filedescriptor.c file. · 8f88e7f6
      2019-08-12  Martin Liska  <mliska@suse.cz>
      
      	* Makefile.in: Add filedescriptor.c.
      	* filedescriptor.c: New file.
      	* lrealpath.c (is_valid_fd): Remove.
      
      From-SVN: r274273
      Martin Liska committed
    • Daily bump. · 90fb7fae
      From-SVN: r274272
      GCC Administrator committed
  2. 11 Aug, 2019 4 commits
    • PR fortran/91413 Generate warning when making array static · 54320207
      When moving a local variable from the stack to static storage, the
      procedure is no longer safe to be called recursively or concurrently
      from multiple threads.  Thus generate a warning when this is done.
      Also double the default limit for switching from stack to static.
      
      Regtested on x86_64-pc-linux-gnu.
      
      gcc/fortran/ChangeLog:
      
      2019-08-11  Janne Blomqvist  <jb@gcc.gnu.org>
      
      	PR fortran/91413
      	* invoke.texi (-fmax-stack-var-size): Document increased default.
      	* options.c (gfc_post_options): Increase default stack var size to
      	65536 bytes.
      	* trans-decl.c (gfc_finish_var_decl): Generate warning when local
      	array moved to static storage.
      
      From-SVN: r274264
      Janne Blomqvist committed
    • d: Fix ICE: gimplification failed (gimplify.c at 13436) · 4c9dbb96
      The expression that caused the ICE
      
      	++(a += 1.0);
      
      The D front-end rewrites and applies implicit type conversions so the
      expression gets simplified as
      
      	(int)((double) a += 1.0) += 1
      
      The codegen pass would subsequently generate the following invalid code
      
      	(int)(double) a = (int)((double) a + 1.0) + 1
      
      The LHS expression `(int)(double) a', represented as a FIX_TRUNC_EXPR
      being what trips as it is not a valid lvalue for assignment.
      
      While LHS casts are stripped away, convert_expr adds a double cast
      because it converts the expression to its original type before
      converting it to its target type.  There is no valid reason why this is
      done, so it has been removed.
      
      gcc/d/ChangeLog:
      
      	PR d/90601
      	* d-convert.cc (convert_expr): Don't convert an expression to its
      	original front-end type before converting to its target type.
      
      gcc/testsuite/ChangeLog:
      
      	PR d/90601
      	* gdc.dg/pr90601.d: New test.
      
      From-SVN: r274263
      Iain Buclaw committed
    • Correct a single misfire in previous ChangeLog cleanup. · 05ba17fd
      From-SVN: r274262
      Hans-Peter Nilsson committed
    • Daily bump. · b2f8f7bc
      From-SVN: r274261
      GCC Administrator committed
  3. 10 Aug, 2019 7 commits
    • decl.c (match_old_style_init): Use a clearer error message. · 878f88b7
      2019-08-10  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	* decl.c (match_old_style_init): Use a clearer error message.
      	* expr.c (gfc_check_assign): Update BOZ checking to provide a stricter
      	adherence to the Fortran standard.  Use gfc_invalid_boz () to
      	relax errors into warnings.
      	* gfortran.h (gfc_isym_id): Add new ids GFC_ISYM_DFLOAT,
      	GFC_ISYM_FLOAT, GFC_ISYM_REALPART, and GFC_ISYM_SNGL
      	* intrinsic.c (add_functions): Use new ids to split REAL generic into
      	REAL, FLOAT, DFLOAT, SNGL, and REALPART generics.
      	(gfc_intrinsic_func_interface): Allow new intrinsics in an
      	initialization expression
      	* resolve.c (resolve_operator): Deal with BOZ as operands.
              Use gfc_invalid_boz to allow for errors or warnings via the
      	-fallow-invalid-boz option.  A BOZ cannot be an operand to an
      	unary operator.  Both operands of a binary operator cannot be BOZ.
              For binary operators, convert a BOZ operand into the type and
      	kind of the other operand for REAL or INTEGER operand.
      	* trans-intrinsic.c: Use new ids to cause conversions to happen.
      
      2019-08-10  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	* gfortran.dg/boz_8.f90: Adjust error messages.
      	* gfortran.dg/nan_4.f90: Ditto.
      	* gfortran.dg/boz_1.f90: Add -fallow-invalid-boz to dg-options,
      	and test for warnings.
      	* gfortran.dg/boz_3.f90: Ditto.
      	* gfortran.dg/boz_4.f90: Ditto.
      	* gfortran.dg/dec_structure_6.f90: Ditto.
      	* gfortran.dg/ibits.f90: Ditto.
      
      From-SVN: r274257
      Steven G. Kargl committed
    • d: Fix internal compiler error: in add_expr, at tree.c:7794 · 884efbd5
      gcc/d/ChangeLog:
      
      	PR d/91238
      	* d-codegen.cc (build_address): If taking the address of a CALL_EXPR,
      	wrap it in a TARGET_EXPR.
      
      gcc/testsuite/ChangeLog:
      
      	PR d/91238
      	* gdc.dg/pr91238.d: New test.
      
      From-SVN: r274253
      Iain Buclaw committed
    • tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_DEVICE_TYPE. · 77eb117f
      	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_DEVICE_TYPE.
      	(enum omp_clause_device_type_kind): New enum.
      	(struct tree_omp_clause): Add subcode.device_type_kind.
      	* tree.h (OMP_CLAUSE_DEVICE_TYPE_KIND): Define.
      	* tree.c (omp_clause_num_ops, omp_clause_code_name): Add entries
      	for device_type clause.
      	(walk_tree_1): Handle OMP_CLAUSE_DEVICE_TYPE.
      	* tree-pretty-print.c (dump_omp_clause): Likewise.
      c-family/
      	* c-pragma.h (enum pragma_omp_clause): Add
      	PRAGMA_OMP_CLAUSE_DEVICE_TYPE.
      c/
      	* c-parser.c (c_parser_omp_clause_name): Parse device_type.
      	(c_parser_omp_clause_device_type): New function.
      	(c_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_DEVICE_TYPE.
      	(OMP_DECLARE_TARGET_CLAUSE_MASK): Add PRAGMA_OMP_CLAUSE_DEVICE_TYPE.
      	(c_parser_omp_declare_target): Handle device_type clauses.  Remove
      	diagnostics for declare target with clauses nested in clause-less
      	declare target declaration-definition-seq.
      	* c-typeck.c (c_finish_omp_clauses): Handle OMP_CLAUSE_DEVICE_TYPE.
      cp/
      	* parser.c (cp_parser_omp_clause_name): Parse device_type.
      	(cp_parser_omp_clause_device_type): New function.
      	(cp_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_DEVICE_TYPE.
      	(OMP_DECLARE_TARGET_CLAUSE_MASK): Add PRAGMA_OMP_CLAUSE_DEVICE_TYPE.
      	(cp_parser_omp_declare_target): Handle device_type clauses.  Remove
      	diagnostics for declare target with clauses nested in clause-less
      	declare target declaration-definition-seq.
      	* semantics.c (finish_omp_clauses): Handle OMP_CLAUSE_DEVICE_TYPE.
      testsuite/
      	* c-c++-common/gomp/declare-target-2.c: Don't expect error for
      	declare target with clauses in between declare target without clauses
      	and end declare target.
      	* c-c++-common/gomp/declare-target-4.c: New test.
      
      From-SVN: r274252
      Jakub Jelinek committed
    • re PR target/91408 (ICE in extract_insn, at recog.c:2310 since r273981) · 5b7ed762
      	PR target/91408
      	* config/i386/mmx.md (usadv8qi): Use register_operand instead of
      	vector_operand.
      
      	* gcc.target/i386/pr91408.c: New test.
      
      From-SVN: r274251
      Jakub Jelinek committed
    • Assorted ChangeLog cleanups. · ab20d992
      From-SVN: r274250
      Jakub Jelinek committed
    • Fix ODR violation in d/runtime.cc · 74039253
      gcc/d/ChangeLog:
      
      	PR d/90893
      	* runtime.cc (enum libcall_type): Rename to...
      	(enum d_libcall_type): ...this.
      	(get_libcall_type): Use d_libcall_type.
      	(build_libcall_decl): Likewise.
      
      From-SVN: r274249
      Iain Buclaw committed
    • Daily bump. · 8fa64062
      From-SVN: r274248
      GCC Administrator committed
  4. 09 Aug, 2019 13 commits
    • * zh_TW.po: Update. · c94fe79e
      From-SVN: r274243
      Joseph Myers committed
    • * uk.po: Update. · 34237338
      From-SVN: r274241
      Joseph Myers committed
    • reload1.c (finish_spills): Do not check ira_conflicts_p when handling spilled pseudos. · 394ae89b
      	* reload1.c (finish_spills): Do not check ira_conflicts_p when
      	handling spilled pseudos.
      
      From-SVN: r274240
      Vladimir Makarov committed
    • rs6000: vec-rotate-*.c fixes · ef4ddda8
      This fixes two minor problems with the new testcases.  The first is
      that almost all other tests, including all vec* tests, for powerpc use
      names with dashes, not underscores.  The more important one is the the
      vec-rotate-1.c and vec-rotate-3.c tests need the -maltivec flag.
      
      
      gcc/testsuite/
      	* gcc.target/powerpc/vec_rotate-1.c: Rename to ...
      	* gcc.target/powerpc/vec-rotate-1.c: ... this.  Add -maltivec option.
      	* gcc.target/powerpc/vec_rotate-2.c: Rename to ...
      	* gcc.target/powerpc/vec-rotate-2.c: ... this.
      	* gcc.target/powerpc/vec_rotate-3.c: Rename to ...
      	* gcc.target/powerpc/vec-rotate-3.c: ... this.  Add -maltivec option.
      	* gcc.target/powerpc/vec_rotate-4.c: Rename to ...
      	* gcc.target/powerpc/vec-rotate-4.c: ... this.
      
      From-SVN: r274239
      Segher Boessenkool committed
    • [aarch64] PR target/91386 Use copy_rtx to avoid modifying original insns in peep2 pattern · f6af9c21
      PR target/91386 is a situation where a peephole2 pattern substitution
      is discarded late because the selected instructions contain
      frame-related notes that we cannot redistribute (because the pattern
      has more than one insn in the output).  Unfortunately, the original
      insns were being modified during the generation, so after the undo we
      are left with corrupt RTL.
      
      We avoid this by ensuring that the modifications are always made on a
      copy, so that the original insns are never changed.
      
      	PR target/91386
      	* config/aarch64/aarch64.c (aarch64_gen_adjusted_ldpstp): Use copy_rtx
      	to preserve the contents of the original insns.
      
      From-SVN: r274238
      Richard Earnshaw committed
    • [arm] Recognize thumb2 16-bit variants of the add and compare instructions · d092f6fc
      The addsi3_compare_op[12] patterns currently only have constraints to
      pick the 32-bit variants of the instructions.  Although the assembler
      may sometimes opportunistically match a 16-bit t2 instruction, there's
      no real control over that within the compiler.  Consequently we might
      emit a 32-bit adds instruction with a 16-bit subs instruction would
      serve equally well.  We do, of course still have to be careful about
      the small number of boundary cases by controlling the order quite
      carefully.
      
      This patch adds the constraints and templates to match the t2 16-bit
      variants of these instructions.  Now, for example, we can generate
      
          subs r0, r0, #1 // 16-bit instruction
      
      instead of 
      
          adds r0, r0, #1 // 32-bit instruction.
      
      	*confit/arm/arm.md (addsi3_compare_op1): Add 16-bit thumb-2 variants.
      	(addsi3_compare_op2): Likewise.
      
      From-SVN: r274237
      Richard Earnshaw committed
    • [PATCH][GCC][AARCH64] Add effective-target check to b key execution tests · 9c4cb861
      gcc/testsuite
      2019-08-09  Sam Tebbs<sam.tebbs@arm.com>
      
      	* lib/target-supports.exp
      	(check_effective_target_arm_v8_4a_bkey_directive): New proc.
      	* g++.target/aarch64/return_address_sign_b_exception.C,
      	return_address_sign_ab_exception.C: Add dg-require-effective-target
      	checks.
      
      From-SVN: r274236
      Sam Tebbs committed
    • Strengthen alias_ptr_types_compatible_p in LTO mode. · 33e8e0ee
      2019-08-09  Martin Liska  <mliska@suse.cz>
      
      	* alias.c (alias_ptr_types_compatible_p): Strengten
      	type comparison in LTO mode.
      
      From-SVN: r274235
      Martin Liska committed
    • Reject tail calls that read from an escaped RESULT_DECL (PR90313) · 97bf048c
      In this PR we have two return paths from a function "map".  The common
      code sets <result> to the value returned by one path, while the other
      path does:
      
         <retval> = map (&<retval>, ...);
      
      We treated this call as tail recursion, losing the copy semantics
      on the value returned by the recursive call.
      
      We'd correctly reject the same thing for variables:
      
         local = map (&local, ...);
      
      The problem is that RESULT_DECLs didn't get the same treatment.
      
      2019-08-09  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR middle-end/90313
      	* tree-tailcall.c (find_tail_calls): Reject calls that might
      	read from an escaped RESULT_DECL.
      
      gcc/testsuite/
      	PR middle-end/90313
      	* g++.dg/torture/pr90313.cc: New test.
      
      From-SVN: r274234
      Richard Sandiford committed
    • skip Cholesky decomposition in is>>n_mv_dist · c787deb0
      normal_mv_distribution maintains the variance-covariance matrix param
      in Cholesky-decomposed form.  Existing param_type constructors, when
      taking a full or lower-triangle varcov matrix, perform Cholesky
      decomposition to convert it to the internal representation.  This
      internal representation is visible both in the varcov() result, and in
      the streamed-out representation of a normal_mv_distribution object.
      
      The problem is that when that representation is streamed back in, the
      read-back decomposed varcov matrix is used as a lower-triangle
      non-decomposed varcov matrix, and it undergoes Cholesky decomposition
      again.  So, each cycle of stream-out/stream-in changes the varcov
      matrix to its "square root", instead of restoring the original
      params.
      
      This patch includes Corentin's changes that introduce verification in
      testsuite/ext/random/normal_mv_distribution/operators/serialize.cc and
      other similar tests that the object read back in compares equal to the
      written-out object: the modified tests pass only if (u == v).
      
      This patch also fixes the error exposed by his change, introducing an
      alternate private constructor for param_type, used only by operator>>.
      
      
      for  libstdc++-v3/ChangeLog
      
      	* include/ext/random
      	(normal_mv_distribution::param_type::param_type): New private
      	ctor taking a decomposed varcov matrix, for use by...
      	(operator>>): ... this, befriended.
      	* include/ext/random.tcc (operator>>): Use it.
      	(normal_mv_distribution::param_type::_M_init_lower): Adjust
      	member function name in exception message.
      
      for  libstdc++-v3/ChangeLog
      from  Corentin Gay  <gay@adacore.com>
      
      	* testsuite/ext/random/beta_distribution/operators/serialize.cc,
      	testsuite/ext/random/hypergeometric_distribution/operators/serialize.cc,
      	testsuite/ext/random/normal_mv_distribution/operators/serialize.cc,
      	testsuite/ext/random/triangular_distribution/operators/serialize.cc,
      	testsuite/ext/random/von_mises_distribution/operators/serialize.cc:
      	Add call to `VERIFY`.
      
      From-SVN: r274233
      Alexandre Oliva committed
    • Add -flto=auto option value. · 279dc7a3
      2019-08-09  Martin Liska  <mliska@suse.cz>
      
      	* doc/invoke.texi: Document the option value.
      	* lto-wrapper.c (run_gcc): Set auto_parallel
      	only with -flto=auto.
      2019-08-09  Martin Liska  <mliska@suse.cz>
      
      	* g++.dg/lto/devirt-19_0.C: Add -flto=auto.
      
      From-SVN: r274232
      Martin Liska committed
    • Provide proper error message for -flto=abcd. · 40077d15
      2019-08-09  Martin Liska  <mliska@suse.cz>
      
      	* opts.c (common_handle_option): Error for an invalid argument
      	to -flto=.
      2019-08-09  Martin Liska  <mliska@suse.cz>
      
      	* gcc.dg/spellcheck-options-21.c: New test.
      
      From-SVN: r274231
      Martin Liska committed
    • Implement -fopt-info support for IPA ICF. · fe6c4dc4
      2019-08-09  Martin Liska  <mliska@suse.cz>
      
      	* ipa-icf.c (sem_function::merge): Define AUTO_DUMP_SCOPE and
      	use dump_printf to report optimization.
      	(sem_variable::merge): Likwise.
      	(sem_item_optimizer::merge_classes): Use dump_printf to report
      	ICF hits.
      2019-08-09  Martin Liska  <mliska@suse.cz>
      
      	* g++.dg/ipa/ipa-icf-2.C: Add -optimized to -fdump-ipa-icf.
      	* g++.dg/ipa/ipa-icf-3.C: Likewise.
      	* g++.dg/ipa/ipa-icf-4.C: Likewise.
      	* g++.dg/ipa/ipa-icf-6.C: Likewise.
      	* gcc.dg/ipa/ipa-icf-1.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-10.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-11.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-12.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-13.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-16.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-18.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-2.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-20.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-21.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-23.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-25.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-26.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-27.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-3.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-35.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-36.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-37.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-38.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-39.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-5.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-7.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-8.c: Likewise.
      	* gcc.dg/ipa/ipa-icf-merge-1.c: Likewise.
      	* gcc.dg/ipa/pr64307.c: Likewise.
      	* gcc.dg/ipa/pr90555.c: Likewise.
      
      From-SVN: r274230
      Martin Liska committed