1. 05 Mar, 2020 8 commits
    • Fortran: ICE in gfc_code2string PR93792 · a2ec7c4a
      A BOZ constant can not appear as a component inialiser for a derived
      type.
      
      gcc/fortran/ChangeLog:
      
      	PR93792
      	* decl.c (variable_decl): If param and initializer check
      	for BOZ, if found,  output an error, set m to MATCH_ERROR
      	and goto cleanup.
      
      gcc/testsuite/ChangeLog:
      
      	PR93792
      	* gfortran.dg/pr93792.f90:  New test.
      Steven G. Kargl committed
    • [AArch32] ACLE intrinsics bfloat16 vmmla and vfma<b/t> for AArch32 AdvSIMD · 43031fbd
      This patch adds the ARMv8.6 ACLE intrinsics for vmmla, vfmab and vfmat
      as part of the BFloat16 extension.
      (https://developer.arm.com/docs/101028/latest.)
      The intrinsics are declared in arm_neon.h and the RTL patterns are
      defined in neon.md.
      Two new tests are added to check assembler output and lane indices.
      
      2020-03-05  Delia Burduv  <delia.burduv@arm.com>
      
      	* config/arm/arm_neon.h (vbfmmlaq_f32): New.
      	(vbfmlalbq_f32): New.
      	(vbfmlaltq_f32): New.
      	(vbfmlalbq_lane_f32): New.
      	(vbfmlaltq_lane_f32): New.
      	(vbfmlalbq_laneq_f32): New.
      	(vbfmlaltq_laneq_f32): New.
      	* config/arm/arm_neon_builtins.def (vmmla): New.
      	(vfmab): New.
      	(vfmat): New.
      	(vfmab_lane): New.
      	(vfmat_lane): New.
      	(vfmab_laneq): New.
      	(vfmat_laneq): New.
      	* config/arm/iterators.md (BF_MA): New int iterator.
      	(bt): New int attribute.
      	(VQXBF): Copy of VQX with V8BF.
      	* config/arm/neon.md (neon_vmmlav8bf): New insn.
      	(neon_vfma<bt>v8bf): New insn.
      	(neon_vfma<bt>_lanev8bf): New insn.
      	(neon_vfma<bt>_laneqv8bf): New expand.
      	(neon_vget_high<mode>): Changed iterator to VQXBF.
      	* config/arm/unspecs.md (UNSPEC_BFMMLA): New UNSPEC.
      	(UNSPEC_BFMAB): New UNSPEC.
      	(UNSPEC_BFMAT): New UNSPEC.
      
      2020-03-05  Delia Burduv  <delia.burduv@arm.com>
      
      	* gcc.target/arm/simd/bf16_ma_1.c: New test.
      	* gcc.target/arm/simd/bf16_ma_2.c: New test.
      	* gcc.target/arm/simd/bf16_mmla_1.c: New test.
      Delia Burduv committed
    • print-rtl: Fix printing of CONST_STRING in DEBUG_INSNs [PR93399] · febfe87d
      The following testcase fails to assemble, as CONST_STRING in the DEBUG_INSNs
      is printed as is, so if it contains \n and/or \r, we are in trouble:
              .loc 1 14 3
              # DEBUG haystack => [si]
              # DEBUG needle => "
      "
      In the gimple dumps we print those (STRING_CSTs) as
        # DEBUG haystack => D#1
        # DEBUG needle => "\n"
      so this patch uses what we use in tree printing for the CONST_STRINGs too.
      
      2020-03-05  Jakub Jelinek  <jakub@redhat.com>
      
      	PR middle-end/93399
      	* tree-pretty-print.h (pretty_print_string): Declare.
      	* tree-pretty-print.c (pretty_print_string): Remove forward
      	declaration, no longer static.  Change nbytes parameter type
      	from unsigned to size_t.
      	* print-rtl.c (print_value) <case CONST_STRING>: Use
      	pretty_print_string and for shrink way too long strings.
      
      	* gcc.dg/pr93399.c: New test.
      Jakub Jelinek committed
    • Keep .GCC.command.line sections of LTO objetcs · c9f90a25
      This patch is for .GCC.command.line sections in LTO objects to be copied
      into the final objects as in the following example:
      
      [egeyar@localhost lto]$ gcc -flto -O3 demo.c -c -g --record-gcc-command-line
      [egeyar@localhost lto]$ gcc -flto -O2 demo2.c -c -g --record-gcc-command-line -DFORTIFY=2
      [egeyar@localhost lto]$ gcc demo.o demo2.o -o a.out
      [egeyar@localhost lto]$ readelf -p .GCC.command.line a.out
      
      String dump of section '.GCC.command.line':
        [     0]  10.0.1 20200227 (experimental) : gcc -flto -O3 demo.c -c -g --record-gcc-command-line
        [    56]  10.0.1 20200227 (experimental) : gcc -flto -O2 demo2.c -c -g --record-gcc-command-line -DFORTIFY=2
      
      2020-03-05  Egeyar Bagcioglu  <egeyar.bagcioglu@oracle.com>
      
      	* simple-object.c (handle_lto_debug_sections): Name
      	".GCC.command.line" among debug sections to be copied over
      	from lto objects.
      Richard Biener committed
    • sccvn: Fix handling of POINTER_PLUS_EXPR in memset offset [PR93582] · fe19699a
      > > where POINTER_PLUS_EXPR last operand has sizetype type, thus unsigned,
      > > and in the testcase gimple_assign_rhs2 (def) is thus 0xf000000000000001ULL
      > > which multiplied by 8 doesn't fit into signed HWI.  If it would be treated
      > > as signed offset instead, it would fit (-0xfffffffffffffffLL, multiplied
      > > by 8 is -0x7ffffffffffffff8LL).  Unfortunately with the poly_int obfuscation
      > > I'm not sure how to convert it from unsigned to signed poly_int.
      >
      > mem_ref_offset provides a boiler-plate for this:
      >
      > poly_offset_int::from (wi::to_poly_wide (TREE_OPERAND (t, 1)), SIGNED);
      
      Thanks, that seems to work.
      The test now works on both big-endian and little-endian.
      
      2020-03-05  Richard Biener  <rguenther@suse.de>
      	    Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/93582
      	* tree-ssa-sccvn.c (vn_reference_lookup_3): Treat POINTER_PLUS_EXPR
      	last operand as signed when looking for memset offset.  Formatting
      	fix.
      
      	* gcc.dg/tree-ssa/pr93582-11.c: New test.
      
      Co-authored-by: Richard Biener <rguenther@suse.de>
      Jakub Jelinek committed
    • PR c++/90938 - Initializing array with {1} works but not {0} · cb2409c6
      gcc/cp/ChangeLog:
      
      	PR c++/90938
      	* tree.c (type_initializer_zero_p): Fail for structs initialized
      	with non-structs.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/90938
      	* g++.dg/init/array55.C: New test.
      	* g++.dg/init/array56.C: New test.
      	* g++.dg/cpp2a/nontype-class33.C: New test.
      Martin Sebor committed
    • Daily bump. · 547cdf85
      GCC Administrator committed
  2. 04 Mar, 2020 32 commits
    • Fix format warning which showed up on FreeBSD 11.3. · 20a235a8
      	PR bootstrap/93962
      	* value-prof.c (dump_histogram_value): Use std::abs.
      Jeff Law committed
    • c++: Fix [[no_unique_address]] and default mem-init [PR90432] · 6876b269
      output_constructor doesn't like two consecutive entries with fields at the
      same position; let's avoid adding the one for the empty field.
      
      gcc/cp/ChangeLog
      2020-03-04  Jason Merrill  <jason@redhat.com>
      
      	PR c++/90432
      	* init.c (perform_member_init): Don't do aggregate initialization of
      	empty field.
      	* constexpr.c (cx_check_missing_mem_inits): Don't enforce
      	initialization of empty field.
      Jason Merrill committed
    • PR tree-optimization/93986 - ICE on mixed-precision wide_int arguments · 10bbbb59
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/93986
              * gcc.dg/pr93986.c: New test.
      
      gcc/ChangeLog:
      
      	PR tree-optimization/93986
              * tree-ssa-strlen.c (maybe_warn_overflow): Convert all wide_int
              operands to the same precision widest_int to avoid ICEs.
      Martin Sebor committed
    • analyzer: validate region subclasses · 3c1645a3
      This patch converts region::validate to a vfunc, implementing
      additional checking per subclass: verifying that various
      region_id fields within map_region, array_region, stack_region and
      root_region are valid, rather than just those within the base class.
      
      Doing so caught bugs earlier in follow-up work I have on
      canonicalization and purging of region_model.
      
      gcc/analyzer/ChangeLog:
      	* region-model.cc (region::validate): Convert model param from ptr
      	to reference.  Update comment to reflect that it's now a vfunc.
      	(map_region::validate): New vfunc implementation.
      	(array_region::validate): New vfunc implementation.
      	(stack_region::validate): New vfunc implementation.
      	(root_region::validate): New vfunc implementation.
      	(region_model::validate): Pass a reference rather than a pointer
      	to the region::validate vfunc.
      	* region-model.h (region::validate): Make virtual.  Convert model
      	param from ptr to reference.
      	(map_region::validate): New vfunc decl.
      	(array_region::validate): New vfunc decl.
      	(stack_region::validate): New vfunc decl.
      	(root_region::validate): New vfunc decl.
      David Malcolm committed
    • analyzer: add regression test for fixed ICE [PR94028] · 4ac3eb5c
      The C++ reproducer for PR analyzer/94028 generates a similar ICE
      to that of the Fortran reproducer for PR analyzer/93993 and, like
      it, was fixed by r10-7023-g3d66e153.
      
      This patch adds the C++ reproducer as a regression test.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/94028
      	* g++.dg/analyzer/pr94028.C: New test.
      David Malcolm committed
    • PR middle-end/81401 - false positive -Wformat-overflow in a loop · 3ca63e1c
      gcc/testsuite/ChangeLog:
      	* gcc.dg/tree-ssa/builtin-sprintf-warn-24.c: New test.
      Martin Sebor committed
    • Remove unnecessary XFAILs from existing testcase 20050603-3.c. · 97bd1d6b
        The XFAILs in this testcase (20050603-3.c) are no longer necessary
        since the fix to PR68803 was committed with svn revision r242681.
      
      2020-03-04  Will Schmidt  <will_schmidt@vnet.ibm.com>
      
      testsuite
      
              * gcc.target/powerpc/20050603-3.c: Remove XFAILS.
      Will Schmidt committed
    • Add dg-require to existing powerpc/pr93122.c test · 322fb704
      2020-03-04  Will Schmidt  <will_schmidt@vnet.ibm.com>
      
      	* gcc.target/powerpc/pr93122.c: Add dg-require.
      Will Schmidt committed
    • analyzer: handle __builtin_expect [PR93993] · e516294a
      The false warning:
       pr93993.f90:19:0:
      
         19 |     allocate (tm) ! { dg-warning "dereference of possibly-NULL" }
            |
       Warning: dereference of possibly-NULL ‘_6’ [CWE-690] [-Wanalyzer-possible-null-dereference]
      
      in the reproducer for PR analyzer/93993 is due to a BUILTIN_EXPECT in
      the chain of SSA expressions between the malloc and the condition
      guarding the edge: the analyzer didn't "know" about the relationship
      between initial argument to BUILTIN_EXPECT and the return value.
      
      This patch implements support for BUILTIN_EXPECT so that the return
      value is known to be equal to the initial argument.  This adds
      constraints when exploring the CFG edges, eliminating the above
      false positive.
      
      Doing so also eliminated the leak warning from the reproducer.  The
      issue was that leaked_pvs was empty within
      impl_region_model_context::on_state_leak, due to the leaking region
      being a view, of type struct Pdtet_8 *, of a region of type
      struct pdtet_8 *, which led region_model::get_representative_path_var to
      return a NULL_TREE value.
      
      Hence the patch also implements view support for
      region_model::get_representative_path_var, restoring the leak
      diagnostic, albeit changing the wording to:
      
        Warning: leak of ‘(struct Pdtet_8) qb’ [CWE-401] [-Wanalyzer-malloc-leak]
      
      It's not clear to me if we should emit leaks at a fortran "end program"
      (currently we suppress them for leaks at the end of main).
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/93993
      	* region-model.cc (region_model::on_call_pre): Handle
      	BUILT_IN_EXPECT and its variants.
      	(region_model::add_any_constraints_from_ssa_def_stmt): Split out
      	gassign handling into add_any_constraints_from_gassign; add gcall
      	handling.
      	(region_model::add_any_constraints_from_gassign): New function,
      	based on the above.  Add handling for NOP_EXPR.
      	(region_model::add_any_constraints_from_gcall): New function.
      	(region_model::get_representative_path_var): Handle views.
      	* region-model.h
      	(region_model::add_any_constraints_from_ssa_def_stmt): New decl.
      	(region_model::add_any_constraints_from_gassign): New decl.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/93993
      	* gcc.dg/analyzer/expect-1.c: New test.
      	* gcc.dg/analyzer/malloc-4.c: New test.
      	* gfortran.dg/analyzer/pr93993.f90: Remove xfail from dg-bogus.
      	Move location of leak warning and update message.
      David Malcolm committed
    • analyzer: fix ICE on non-lvalue in prune_for_sm_diagnostic [PR93993] · 3d66e153
      PR analyzer/93993 reports another ICE within
      diagnostic_manager::prune_for_sm_diagnostic in which the expression
      of interest becomes a non-lvalue (similar to PR 93544, PR 93647, and
      PR 93950), due to attempting to get an lvalue for a non-lvalue with a
      NULL context, leading to an ICE when the failure is reported to
      make_region_for_unexpected_tree_code.  The tree in question is
      an ADDR_EXPR of a VAR_DECL, due to:
        event 11: switching var of interest from ‘tm’ in callee to ‘&qb’ in caller
      
      This patch adds more bulletproofing to the routine by introducing
      a tentative_region_model_context class that can be passed in such
      circumstances which records that an error occurred, and then
      checking to see if an error was recorded, thus avoiding the ICE.
      This is papering over the problem, but a better solution seems more
      like stage 1 material.
      
      The patch also refactors the error-checking for CONSTANT_CLASS_P.
      
      The testcase pr93993.f90 has a false positive:
      
       pr93993.f90:19:0:
      
          19 |     allocate (tm) ! { dg-warning "dereference of possibly-NULL" }
             |
       Warning: dereference of possibly-NULL ‘_6’ [CWE-690] [-Wanalyzer-possible-null-dereference]
      
      which appears to be a pre-existing bug affecting any allocate call in
      Fortran, which I will fix in a followup.
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/93993
      	* checker-path.h (state_change_event::get_lvalue): Add ctxt param
      	and pass it to region_model::get_value call.
      	* diagnostic-manager.cc (get_any_origin): Pass a
      	tentative_region_model_context to the calls to get_lvalue and reject
      	the comparison if errors occur.
      	(can_be_expr_of_interest_p): New function.
      	(diagnostic_manager::prune_for_sm_diagnostic): Replace checks for
      	CONSTANT_CLASS_P with calls to update_for_unsuitable_sm_exprs.
      	Pass a tentative_region_model_context to the calls to
      	state_change_event::get_lvalue and reject the comparison if errors
      	occur.
      	(diagnostic_manager::update_for_unsuitable_sm_exprs): New.
      	* diagnostic-manager.h
      	(diagnostic_manager::update_for_unsuitable_sm_exprs): New decl.
      	* region-model.h (class tentative_region_model_context): New class.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/93993
      	* gfortran.dg/analyzer/pr93993.f90: New test.
      David Malcolm committed
    • analyzer: remove unused private fields · 13e3ba14
      gcc/analyzer/ChangeLog:
      	* engine.cc (worklist::worklist): Remove unused field m_eg.
      	(class viz_callgraph_edge): Remove unused field m_call_sedge.
      	(class viz_callgraph): Remove unused field m_sg.
      	* exploded-graph.h (worklist::::m_eg): Remove unused field.
      David Malcolm committed
    • libstdc++: Fix comment on __memcpyable · 94f7d7ec
      The discussion of iterator_traits<volatile T*>::value_type and  the
      example with three tempalte arguments related to an earlier version of
      the patch, not the one committed.
      
      Also improve the comment on __memcmpable.
      
      	* include/bits/cpp_type_traits.h (__memcpyable): Fix comment.
      Jonathan Wakely committed
    • rs6000: Fix -mpower9-vector -mno-altivec ICE (PR87560) · 0b0908c1
      PR87560 reports an ICE when a test case is compiled with -mpower9-vector
      and -mno-altivec.  This patch terminates compilation with an error when
      this combination (and other unreasonable ones) are requested.
      
      Bootstrapped and tested on powerpc64le-unknown-linux-gnu with no
      regressions.  Reported error is now:
      
      f951: Error: '-mno-altivec' turns off '-mpower9-vector'
      
      2020-03-02  Bill Schmidt  <wschmidt@linux.ibm.com>
      
      	PR target/87560
      	* rs6000-cpus.def (OTHER_ALTIVEC_MASKS): New #define.
      	* rs6000.c (rs6000_disable_incompatible_switches): Add table entry
      	for OPTION_MASK_ALTIVEC.
      Bill Schmidt committed
    • IBM Z: zTPF: Include glibc-stdint.h to get __UINTPTR_TYPE__ defined · 48c16b28
      Building a zTPF cross currently fails when building libstdc++
      complaining about the __UINTPTR_TYPE__ to be missing.
      
      Fixed by including the glibc-stdint.h header.
      
      2020-03-04  Andreas Krebbel  <krebbel@linux.ibm.com>
      
      	* config.gcc: Include the glibc-stdint.h header for zTPF.
      Andreas Krebbel committed
    • IBM Z: zTPF: Prevent FPR usage · 14cb388b
      For the zTPF we must not use floating point registers.
      
      gcc/ChangeLog:
      
      2020-03-04  Andreas Krebbel  <krebbel@linux.ibm.com>
      
      	* config/s390/s390.c (s390_secondary_memory_needed): Disallow
      	direct FPR-GPR copies.
      	(s390_register_info_gprtofpr): Disallow GPR content to be saved in
      	FPRs.
      Andreas Krebbel committed
    • IBM Z: zTPF: Build libgcc with -mtpf-trace-skip · 0993851d
      libgcc is supposed to be built with the trace skip flags and branch
      targets.  Add a zTPF header file fragment and add the -mtpf-trace-skip
      option.
      
      libgcc/ChangeLog:
      
      2020-03-04  Andreas Krebbel  <krebbel@linux.ibm.com>
      
      	* config.host: Include the new makefile fragment.
      	* config/s390/t-tpf: New file.
      Andreas Krebbel committed
    • IBM Z: zTPF: Add tpf trace customization options · 181e2a2f
      The zTPF OS implements a tracing facility for function entry and exit
      which uses global flags and trace function addresses. The addresses of
      the flags as well as the trace functions are currently hard-coded in
      the zTPF specific GCC parts of the IBM Z back-end.
      
      With this patch these addresses can be changed at compile-time using
      the new command line options.  For convenience one additional command
      line option (-mtpf-trace-skip) implements a new set of hard-coded
      addresses.
      
      gcc/ChangeLog:
      
      2020-03-04  Andreas Krebbel  <krebbel@linux.ibm.com>
      
      	* config/s390/s390.c (s390_emit_prologue): Specify the 2 new
      	operands to the prologue_tpf expander.
      	(s390_emit_epilogue): Likewise.
      	(s390_option_override_internal): Do error checking and setup for
      	the new options.
      	* config/s390/tpf.h (TPF_TRACE_PROLOGUE_CHECK)
      	(TPF_TRACE_EPILOGUE_CHECK, TPF_TRACE_PROLOGUE_TARGET)
      	(TPF_TRACE_EPILOGUE_TARGET, TPF_TRACE_PROLOGUE_SKIP_TARGET)
      	(TPF_TRACE_EPILOGUE_SKIP_TARGET): New macro definitions.
      	* config/s390/tpf.md ("prologue_tpf", "epilogue_tpf"): Add two new
      	operands for the check flag and the branch target.
      	* config/s390/tpf.opt ("mtpf-trace-hook-prologue-check")
      	("mtpf-trace-hook-prologue-target")
      	("mtpf-trace-hook-epilogue-check")
      	("mtpf-trace-hook-epilogue-target", "mtpf-trace-skip"): New
      	options.
      	* doc/invoke.texi: Document -mtpf-trace-skip option. The other
      	options are for debugging purposes and will not be documented
      	here.
      Andreas Krebbel committed
    • Add -fcommon to a test-case to re-trigger it. · 20fb4a47
      	* gcc.target/i386/pr91623.c: Add -fcommon in order
      	to re-trigger the needed code for the test-case which
      	was added in r10-2910-g9151048d.
      Martin Liska committed
    • inliner: Copy DECL_BY_REFERENCE in copy_decl_to_var [PR93888] · 64ba6d17
      In the following testcase we emit wrong debug info for the karg
      parameter in the DW_TAG_inlined_subroutine into main.
      The problem is that the karg PARM_DECL is DECL_BY_REFERENCE and thus
      in the IL has const K & type, but in the source just const K.
      When the function is inlined, we create a VAR_DECL for it, but don't
      set DECL_BY_REFERENCE, so when emitting DW_AT_location, we treat it like
      a const K & typed variable, but it has DW_AT_abstract_origin which has
      just the const K type and thus the debugger thinks the variable has
      const K type.
      
      Fixed by copying the DECL_BY_REFERENCE flag.  Not doing it in
      copy_decl_for_dup_finish, because copy_decl_no_change already copies
      that flag through copy_node and in copy_result_decl_to_var it is
      undesirable, as we handle DECL_BY_REFERENCE in that case instead
      by changing the type.
      
      2020-03-04  Jakub Jelinek  <jakub@redhat.com>
      
      	PR debug/93888
      	* tree-inline.c (copy_decl_to_var): Copy DECL_BY_REFERENCE flag.
      
      	* g++.dg/guality/pr93888.C: New test.
      Jakub Jelinek committed
    • sccvn: Avoid overflows in push_partial_def · 1cdfb80a
      The following patch attempts to avoid dangerous overflows in the various
      push_partial_def HOST_WIDE_INT computations.
      This is achieved by performing the subtraction offset2i - offseti in
      the push_partial_def function and before doing that doing some tweaks.
      If a constant store (non-CONSTRUCTOR) is too large (perhaps just
      hypothetical case), native_encode_expr would fail for it, but we don't
      necessarily need to fail right away, instead we can treat it like
      non-constant store and if it is already shadowed, we can ignore it.
      Otherwise, if it at most 64-byte and the caller ensured that there is
      a range overlap and push_partial_def ensures the load is at most 64-byte,
      I think we should be fine, offset (relative to the load)
      can be from -64*8+1 to 64*8-1 only and size at most 64*8, so no risks of
      overflowing HOST_WIDE_INT computations.
      For CONSTRUCTOR (or non-constant) stores, those can be indeed arbitrarily
      large, the caller just checks that both the absolute offset and size fit
      into signed HWI.  But, we store the same bytes in that case over and over
      (both in the {} case where it is all 0, and in the hypothetical future case
      where we handle in push_partial_def also memset (, 123, )), so we can tweak
      the write range for our purposes.  For {} store we could just cap it at the
      start offset and/or offset+size because all the bits are 0, but I wrote it
      in anticipation of the memset case and so the relative offset can now be
      down to -7 and similarly size can grow up to 64 bytes + 14 bits, all this
      trying to preserve the offset difference % BITS_PER_UNIT or end as well.
      
      2020-03-04  Jakub Jelinek  <jakub@redhat.com>
      
      	* tree-ssa-sccvn.c (vn_walk_cb_data::push_partial_def): Add offseti
      	argument.  Change pd argument so that it can be modified.  Turn
      	constant non-CONSTRUCTOR store into non-constant if it is too large.
      	Adjust offset and size of CONSTRUCTOR or non-constant store to avoid
      	overflows.
      	(vn_walk_cb_data::vn_walk_cb_data, vn_reference_lookup_3): Adjust
      	callers.
      Jakub Jelinek committed
    • tree-optimization/93964 - adjust ISL code generation for pointer params · dca54007
      Pointers eventually need intermediate conversions in code generation.
      Allowing them is much easier than fending them off since niter
      and scev expansion easily drag those in.
      
      2020-02-04  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/93964
      	* graphite-isl-ast-to-gimple.c
      	(gcc_expression_from_isl_ast_expr_id): Add intermediate
      	conversion for pointer to integer converts.
      	* graphite-scop-detection.c (assign_parameter_index_in_region):
      	Relax assert.
      
      	* gcc.dg/graphite/pr93964.c: New testcase.
      Richard Biener committed
    • Clear --help=language and --help=common interaction. · c7ec2f9f
      	PR c/93886
      	PR c/93887
      	* doc/invoke.texi: Clarify --help=language and --help=common
      	interaction.
      Martin Liska committed
    • Wrap array in ctor with braces. · 2e032851
      	* method.c: Wrap array in ctor with braces in order
      	to silent clang warnings.
      Martin Liska committed
    • tailcall: Fix up process_assignment [PR94001] · 8e480ec1
      When a function returns void or the return value is ignored, ass_var
      is NULL_TREE.  The tail recursion handling generally assumes DCE has been
      performed and so doesn't expect to encounter useless assignments after the
      call and expects them to be part of the return value adjustment that need
      to be changed into tail recursion additions/multiplications.
      process_assignment does some verification and has a way to tell the caller
      to try to move dead or whatever other stmts that don't participate in the
      return value modifications before it is returned.
      For binary rhs assignments it is just fine, neither op0 nor op1 will be
      NULL_TREE and thus if *ass_var is NULL_TREE, it will not match, but unary
      rhs is handled by only setting op0 to rhs1 and setting op1 to NULL_TREE.
      And at this point, NULL_TREE == NULL_TREE and thus we think e.g. the
        c_2 = -e_3(D);
      dead stmt is actually a return value modification, so we queue it as
      multiplication and then create a void type SSA_NAME accumulator for it
      and ICE shortly after.
      
      Fixed by making sure op1 == *ass_var comparison is done only if *ass_var.
      
      2020-03-04  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/94001
      	* tree-tailcall.c (process_assignment): Before comparing op1 to
      	*ass_var, verify *ass_var is non-NULL.
      
      	* gcc.dg/pr94001.c: New test.
      Jakub Jelinek committed
    • PR target/93995 ICE in patch_jump_insn, at cfgrtl.c:1290 on riscv64-linux-gnu · 8cc59ac5
      Last code gen change of LTGT didn't consider the situation of cbranch with LTGT,
      branch only support few compare codes.
      
      gcc/ChangeLog
      
      	* config/riscv/riscv.c (riscv_emit_float_compare): Using NE to compare
      	the result of IOR.
      
      gcc/testsuite/ChangeLog
      
      	* gcc.dg/pr93995.c: New.
      Kito Cheng committed
    • c++: Fix mismatch in template argument deduction [PR90505] · 6b3302da
      My GCC 9 patch for C++20 P0846R0 (ADL and function templates) tweaked
      cp_parser_template_name to only return an identifier if name lookup
      didn't find anything.  In the deduce4.C case it means that we now
      return an OVERLOAD.  That means that cp_parser_template_id will call
      lookup_template_function whereby producing a TEMPLATE_ID_EXPR with
      unknown_type_node.  Previously, we created a TEMPLATE_ID_EXPR with
      no type, making it type-dependent.  What we have now is no longer
      type-dependent.  And so, when we call finish_call_expr after we've
      parsed "foo<int>(10)", even though we're in a template, we still do
      the normal processing, thus perform overload resolution.  When adding
      the template candidate foo we need to deduce the template arguments,
      and that is where things go downhill.
      
      When fn_type_unification sees that we have explicit template arguments,
      but they aren't complete, it will use them to substitute the function
      type.  So we substitute e.g. "void <T33d> (U)".  But the explicit
      template argument was for a different parameter so we don't actually
      substitute anything.  But the problem here was that we reduced the
      template level of 'U' anyway.  So then when we're actually deducing
      the template arguments via type_unification_real, we fail in unify:
      22932       if (TEMPLATE_TYPE_LEVEL (parm)
      22933           != template_decl_level (tparm))
      22934         /* The PARM is not one we're trying to unify.  Just check
      22935            to see if it matches ARG.  */
      because 'parm' has been reduced but 'tparm' has not yet.
      
      Therefore we shouldn't reduce the template level of template parameters
      when tf_partial aka template argument deduction substitution.  But we
      can only return after performing the cp_build_qualified_type etc.
      business otherwise things break horribly.
      
      2020-03-03  Jason Merrill  <jason@redhat.com>
      	    Marek Polacek  <polacek@redhat.com>
      
      	PR c++/90505 - mismatch in template argument deduction.
      	* pt.c (tsubst): Don't reduce the template level of template
      	parameters when tf_partial.
      
      	* g++.dg/template/deduce4.C: New test.
      	* g++.dg/template/deduce5.C: New test.
      	* g++.dg/template/deduce6.C: New test.
      	* g++.dg/template/deduce7.C: New test.
      Marek Polacek committed
    • libstdc++: Fix incorrect use of memset in ranges::fill_n (PR 94017) · 712b182a
      When deciding whether to perform the memset optimization in ranges::fill_n, we
      were crucially neglecting to check that the output pointer's value type is a
      byte type.  This patch adds such a check to the problematic condition in
      ranges::fill_n.
      
      At the same time, this patch relaxes the overly conservative
      __is_byte<_Tp>::__value check that requires the fill type be a byte type.  It's
      overly conservative because it means we won't enable the memset optimization in
      the following example
      
        char c[100];
        ranges::fill(c, 37);
      
      because the fill type is deduced to be int here.  Rather than requiring that the
      fill type be a byte type, it seems safe to just require the fill type be an
      integral type, which is what this patch does.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/94017
      	* include/bits/ranges_algobase.h (__fill_n_fn::operator()): Refine
      	condition for when to use memset, making sure to additionally check that
      	the output pointer's value type is a non-volatile byte type.  Instead of
      	requiring that the fill type is a byte type, just require that it's an
      	integral type.
      	* testsuite/20_util/specialized_algorithms/uninitialized_fill/94017.cc:
      	New test.
      	* testsuite/20_util/specialized_algorithms/uninitialized_fill_n/94017.cc:
      	New test.
      	* testsuite/25_algorithms/fill/94013.cc: Uncomment part that was blocked
      	by PR 94017.
      	* testsuite/25_algorithms/fill/94017.cc: New test.
      	* testsuite/25_algorithms/fill_n/94017.cc: New test.
      Patrick Palka committed
    • libstdc++: Move-only input iterator support in <memory> algorithms (LWG 3355) · 144dfc68
      This adds support for move-only input iterators in the ranges::unitialized_*
      algorithms defined in <memory>, as per LWG 3355.  The only changes needed are to
      add calls to std::move in the appropriate places and to use operator- instead of
      ranges::distance because the latter cannot be used with a move-only iterator
      that has a sized sentinel, as is the case here.  (This issue with
      ranges::distance is LWG 3392.)
      
      libstdc++-v3/ChangeLog:
      
      	LWG 3355 The memory algorithms should support move-only input iterators
      	introduced by P1207
      	* include/bits/ranges_uninitialized.h
      	(__uninitialized_copy_fn::operator()): Use std::move to avoid attempting
      	to copy __ifirst, which could be a move-only input iterator.  Use
      	operator- instead of ranges::distance to compute distance from a sized
      	sentinel.
      	(__uninitialized_copy_n_fn::operator()): Likewise.
      	(__uninitialized_move_fn::operator()): Likewise.
      	(__uninitialized_move_n_fn::operator()): Likewise.
      	(__uninitialized_destroy_fn::operator()): Use std::move to avoid
      	attempting to copy __first.
      	(__uninitialized_destroy_n_fn::operator()): Likewise.
      	* testsuite/20_util/specialized_algorithms/destroy/constrained.cc:
      	Augment test.
      	* .../specialized_algorithms/uninitialized_copy/constrained.cc:
      	Likewise.
      	* .../specialized_algorithms/uninitialized_move/constrained.cc:
      	Likewise.
      Patrick Palka committed
    • libstdc++: Add a testsuite range type that has a sized sentinel · 26af9cd8
      This adds a testsuite range type whose end() is a sized sentinel to
      <testsuite_iterators.h>, which will be used in the tests that verify LWG 3355.
      
      libstdc++-v3/ChangeLog:
      
      	* testsuite/util/testsuite_iterators.h (test_range::get_iterator): Make
      	protected instead of private.
      	(test_sized_range_sized_sent): New.
      Patrick Palka committed
    • libstdc++: Add a move-only testsuite iterator type · d6d4b339
      This adds a move-only testsuite iterator wrapper to <testsuite_iterators.h>
      which will be used in the tests for LWG 3355.  The tests for LWG 3389 and 3390
      are adjusted to use this new iterator wrapper.
      
      libstdc++-v3/ChangeLog:
      
      	* testsuite/util/testsuite_iterators.h (input_iterator_wrapper_nocopy):
      	New testsuite iterator.
      	* testsuite/24_iterators/counted_iterator/lwg3389.cc: Use it.
      	* testsuite/24_iterators/move_iterator/lwg3390.cc: Likewise.
      Patrick Palka committed
    • libstdc++: Fix use of is_nothrow_assignable_v in <bits/ranges_uninitialized.h> · 05779e2c
      We are passing a value type as the first argument to is_nothrow_assignable_v,
      but the result of that is inevitably false.  Since this predicate is a part of
      the condition that guards the corresponding optimizations for these algorithms,
      this bug means these optimizations are never used.  We should be passing a
      reference type to is_nothrow_assignable_v instead.
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/ranges_uninitialized.h
      	(uninitialized_copy_fn::operator()): Pass a reference type as the first
      	argument to is_nothrow_assignable_v.
      	(uninitialized_copy_fn::operator()): Likewise.
      	(uninitialized_move_fn::operator()): Likewise.  Return an in_out_result
      	with the input iterator stripped of its move_iterator.
      	(uninitialized_move_n_fn::operator()): Likewise.
      	(uninitialized_fill_fn::operator()): Pass a reference type as the first
      	argument to is_nothrow_assignable_v.
      	(uninitialized_fill_n_fn::operator()): Likewise.
      Patrick Palka committed
    • coroutines: Handle component_ref in captures_temporary · 7f327e87
      gcc/cp
              * coroutines.cc (captures_temporary): Strip component_ref
              to its base object.
      
      gcc/testsuite
              * g++.dg/coroutines/torture/co-await-15-capture-comp-ref.C: New test.
      JunMa committed