Skip to content
Snippets Groups Projects
  1. Jan 27, 2020
    • Andrew Burgess's avatar
      gcc: Add new configure options to allow static libraries to be selected · e7c26e04
      Andrew Burgess authored
      The motivation behind this change is to make it easier for a user to
      link against static libraries on a target where dynamic libraries are
      the default library type (for example GNU/Linux).
      
      Further, my motivation is really for linking libraries into GDB,
      however, the binutils-gdb/config/ directory is a copy of gcc/config/
      so changes for GDB need to be approved by the GCC project first.
      
      After making this change in the gcc/config/ directory I've run
      autoreconf on all of the configure scripts in the GCC tree and a
      couple have been updated, so I'll use one of these to describe what my
      change does.
      
      Consider libcpp, this library links against libiconv.  Currently if
      the user builds on a system with both static and dynamic libiconv
      installed then autotools will pick up the dynamic libiconv by
      default.  This is almost certainly the right thing to do.
      
      However, if the user wants to link against static libiconv then things
      are a little harder, they could remove the dynamic libiconv from their
      system, but this is probably a bad idea (other things might depend on
      that library), or the user can build their own version of libiconv,
      install it into a unique prefix, and then configure gcc using the
      --with-libiconv-prefix=DIR flag.  This works fine, but is somewhat
      annoying, the static library available, I just can't get autotools to
      use it.
      
      My change then adds a new flag --with-libiconv-type=TYPE, where type
      is either auto, static, or shared.  The default auto, ensures we keep
      the existing behaviour unchanged.
      
      If the user configures with --with-libiconv-type=static then the
      configure script will ignore any dynamic libiconv it finds, and will
      only look for a static libiconv, if no static libiconv is found then
      the configure will continue as though there is no libiconv at all
      available.
      
      Similarly a user can specify --with-libiconv-type=shared and force the
      use of shared libiconv, any static libiconv will be ignored.
      
      As I've implemented this change within the AC_LIB_LINKFLAGS_BODY macro
      then only libraries configured using the AC_LIB_LINKFLAGS or
      AC_LIB_HAVE_LINKFLAGS macros will gain the new configure flag.
      
      If this is accepted into GCC then there will be follow on patches for
      binutils and GDB to regenerate some configure scripts in those
      projects.
      
      For GCC only two configure scripts needed updated after this commit,
      libcpp and libstdc++-v3, both of which link against libiconv.
      
      config/ChangeLog:
      
      	* lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Add new
      	--with-libXXX-type=... option.  Use this to guide the selection of
      	either a shared library or a static library.
      
      libcpp/ChangeLog:
      
      	* configure: Regenerate.
      
      libstdc++-v3/ChangeLog:
      
      	* configure: Regenerate.
      e7c26e04
    • Joseph Myers's avatar
      Support gnu_unique_object symbols on MIPS. · 15d55239
      Joseph Myers authored
      mips_declare_object_name is missing the support for declaring symbols
      as gnu_unique_object that is present in the generic
      ASM_DECLARE_OBJECT_NAME in elfos.h.  I'm not aware of any
      MIPS-specific reason for that support to be absent;
      mips_declare_object_name predates the addition of gnu_unique_object
      support and as far as I can tell this was simply an oversight when
      that support was added.  This patch adds the missing support,
      following the code in elfos.h.
      
      Tested with no regressions with cross to mips-linux-gnu.  In
      particular, this fixes the failure of the recently-added glibc test
      elf/tst-dlopen-nodelete-reloc, which relies on the compiler generating
      such symbols, for MIPS.
      
      	* config/mips/mips.c (mips_declare_object_name)
      	[USE_GNU_UNIQUE_OBJECT]: Support use of gnu_unique_object.
      15d55239
    • Ian Lance Taylor's avatar
      compiler: cleanups permitted by GCC requirement of MPFR 3.1.0 · 2f195832
      Ian Lance Taylor authored
      For MPFR functions, change from GMP_RND* to MPFR_RND*.
      Also change mp_exp_t to mpfr_expt_t.
      
      Fixes PR go/92463
      
      Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/216417
      2f195832
    • Jason Merrill's avatar
      c++: Fix array of char typedef in template (PR90966). · 8f25c39c
      Jason Merrill authored
      Since Martin Sebor's patch for PR 71625 to change braced array initializers
      to STRING_CST in some cases, we need to be ready for STRING_CST with types
      that are changed by tsubst.  fold_convert doesn't know how to deal with
      STRING_CST, which is reasonable; we really shouldn't expect it to here.  So
      let's handle STRING_CST separately.
      
      	PR c++/90966
      	* pt.c (tsubst_copy) [STRING_CST]: Don't use fold_convert.
      8f25c39c
    • Iain Sandoe's avatar
      coroutines: Ensure the ramp return object is checked (PR93443). · 1f2e8423
      Iain Sandoe authored
      As the PR shows, there is a pathway through the code where the
      no_warning value is not set, which corresponds to a missing check
      of the ramp return when it was constructed from the 'get return
      object'  Fixed by ensuring that the check of the return value is
      carried out for both return cases.
      
      gcc/cp/ChangeLog:
      
      2020-01-27  Iain Sandoe  <iain@sandoe.co.uk>
      
      	PR c++/93443
      	* coroutines.cc (morph_fn_to_coro): Check the ramp return
      	value when it is constructed from the 'get return object'.
      1f2e8423
    • Stam Markianos-Wright's avatar
      Hi all, · 73380abd
      Stam Markianos-Wright authored
      This was committed following offline approval by Kyryl.
      
      One minor intended optimisation introduced by :
      
      https://gcc.gnu.org/ml/gcc-patches/2020-01/msg01237.html
      
      was to set a preference for both __fp16 types and __bf16 types to be
      loaded/stored directly into/from the FP/NEON registers (if they are available
      and if the vld1.16 is compatible), rather than be passed through the regular
      r-registers.
      
      This would convert many observed instances of:
      
      **	ldrh	r3, [r3]	@ __fp16
      **	vmov.f16	s15, r3	@ __fp16
      
      Into a single:
      
      **	vld1.16	{d7[2]}, [r3]
      
      This resulted in a regression of a dg-scan-assembler in a __fp16 test.
      
      This patch updates the test to the same testing standard used by the BFloat
      tests (use check-function-bodies to explicitly check for correct assembler
      generated by each function) and updates it for the latest optimisation.
      
      Cheers,
      Stam
      
      gcc/testsuite/ChangeLog:
      
      2020-01-27  Stam Markianos-Wright  <stam.markianos-wright@arm.com>
      
      	* gcc.target/arm/armv8_2-fp16-move-1.c: Update following load/store
              optimisation.
      73380abd
    • David Malcolm's avatar
      analyzer: restore input_location (PR 93349) · 2fbea419
      David Malcolm authored
      PR analyzer/93349 reports an ICE in IPA pass: simdclone for
      some input files when -fanalyzer is supplied, with:
        error: location references block not in block tree
      
      The root cause is that the analyzer touches input_location in some
      places (to make it easier to track down which source construct the
      analyzer can't handle in the case of an analyzer ICE) and fails to reset
      it.  For the ICE in question, this sets input_location to a location_t
      that references some arbitrary block (specifically, that of the last
      statement to be analyzed, within the original CFG of whichever is the
      last such function to be analyzed).
      
      Later, within omp-simd-clone.c, input_location is used by gimplify_expr
      (called via gimplify_and_add), which has:
      
      14492	      if (!gimple_seq_empty_p (*pre_p))
      14493		annotate_all_with_location_after (*pre_p, pre_last_gsi, input_location);
      
      thus using whatever the value of input_location is, leading
      to statements that reference some arbitrary block in the original CFG.
      For the reproducer, this happens to be a block in the CFG for the
      original function, rather than that of the clone, but in general it
      could be some arbitrary other function in the TU.
      
      This code appears to assume that input_location has some arbitrary
      value *not* in the block tree, which is potentially violated by the
      analyzer's changes to input_location.
      
      This patch adds a save and restore of input_location at the top-level
      function of the analyzer, fixing the ICE.
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/93349
      	* engine.cc (run_checkers): Save and restore input_location.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/93349
      	* gcc.dg/analyzer/torture/pr93349.c: New test.
      2fbea419
    • David Malcolm's avatar
      analyzer: fix pattern-test-2.c (PR 93291) · f89e844f
      David Malcolm authored
      Amongst the inputs to the analyzer state machines that can lead to state
      transitions are conditions on CFG edges, such as a test for a pointer
      being non-NULL.
      
      These conditionals can be non-trivial to determine in the face of
      optimization.  For example, at -O2:
      
        if (p == NULL || q == NULL)
      
      is optimized on some targets (e.g. x86_64) to a bitwise-or:
      
        _1 = p_5(D) == 0B;
        _2 = q_6(D) == 0B;
        _3 = _1 | _2;
        if (_3 != 0)
          goto <bb 4>; [51.12%]
        else
          goto <bb 3>; [48.88%]
      
      but on other targets (e.g. powerpc64le) as control flow:
      
        if (p_2(D) == 0B)
          goto <bb 5>; [18.09%]
        else
          goto <bb 3>; [81.91%]
      
        <bb 3> [local count: 879501929]:
        if (q_3(D) == 0B)
          goto <bb 5>; [30.95%]
        else
          goto <bb 4>; [69.05%]
      
      region_model::add_any_constraints_from_ssa_def_stmt attempts to walk
      SSA def chains to reconstruct the conditions that hold, so that
      e.g. in the above case of bitwise-or, the state machine for
      "p" can transition to the "known-null" state along the edge leading
      to bb 3.
      
      In gcc.dg/analyzer/pattern-test-2.c I attempted to write test coverage
      for this, but the test fails on those targets for which the || is
      expressed via control flow.
      
      This patch rewrites the test to make explicit use of bitwise-or, and
      adds coverage for bitwise-and for good measure.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/93291
      	* gcc.dg/analyzer/pattern-test-2.c: Remove include of stdlib.h.
      	(test_2): Rewrite to explicitly perform a bitwise-or of two
      	boolean conditions.
      	(test_3): New function, to test bitwise-and.
      f89e844f
    • Richard Sandiford's avatar
      aarch64: Fix pr71727.c failure · a044dfb0
      Richard Sandiford authored
      This test started failing after the switch to -fno-common because we can
      now force the array to be aligned to 16 bytes, which in turn lets us use
      SIMD accesses.  Locally restoring -fcommon seems the most faithful to
      the original PR.
      
      2020-01-27  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/testsuite/
      	PR testsuite/71727
      	* gcc.target/aarch64/pr71727.c: Add -fcommon.
      a044dfb0
    • Martin Liska's avatar
      Add __gcov_indirect_call_profiler_v4_atomic. · 3ae37f92
      Martin Liska authored
      	PR gcov-profile/93403
      	* tree-profile.c (gimple_init_gcov_profiler): Generate
      	both __gcov_indirect_call_profiler_v4 and
      	__gcov_indirect_call_profiler_v4_atomic.
      	PR gcov-profile/93403
      	* libgcov-profiler.c (__gcov_indirect_call_profiler_v4):
      	Call __gcov_indirect_call_profiler_body.
      	(__gcov_indirect_call_profiler_body): New.
      	(__gcov_indirect_call_profiler_v4_atomic): New.
      	* libgcov.h (__gcov_indirect_call_profiler_v4_atomic):
      	New declaration.
      3ae37f92
    • David Malcolm's avatar
      analyzer: fixes to tree_cmp and other comparators · 6a81cabc
      David Malcolm authored
      region_model.cc's tree_cmp attempted to verify that the ordering
      is symmetric by asserting that
        tree_cmp (x, y) == -tree_cmp (y, x)
      
      This condition is too strong: it's only required for a comparator that
        sign (tree_cmp (x, y)) == -sign (tree_cmp (y, x))
      and the incorrect form of the assertion doesn't hold e.g. on s390x where
      for certain inputs x, y, tree_cmp (x, y) == 1 and tree_cmp (y, x) == -2,
      breaking the build in "make selftest" in stage1.
      
      In any case, these checks are redundant, since qsort_chk performs them.
      
      Additionally, there is a potential lack of transitivity in
      worklist::key_t::cmp where hashval_t values are compared by subtraction,
      which could fail to be transitive if overflows occur.
      
      This patch eliminates the redundant checks and reimplements the hashval_t
      comparisons in terms of < and >, fixing these issues.
      
      gcc/analyzer/ChangeLog:
      	* call-string.cc (call_string::cmp_1): Delete, moving body to...
      	(call_string::cmp): ...here.
      	* call-string.h (call_string::cmp_1): Delete decl.
      	* engine.cc (worklist::key_t::cmp_1): Delete, moving body to...
      	(worklist::key_t::cmp): ...here.  Implement hash comparisons
      	via comparison rather than subtraction to avoid overflow issues.
      	* exploded-graph.h (worklist::key_t::cmp_1): Delete decl.
      	* region-model.cc (tree_cmp): Eliminate buggy checking for
      	symmetry.
      6a81cabc
    • Richard Sandiford's avatar
      aarch64: Add vector/vector vec_extract patterns [PR92822] · c15893df
      Richard Sandiford authored
      Part of the problem in this PR is that we don't provide patterns
      to extract a 64-bit vector from one half of a 128-bit vector.
      Adding them fixes:
      
      FAIL: gcc.target/aarch64/fmul_intrinsic_1.c scan-assembler-times fmul\\td[0-9]+, d[0-9]+, d[0-9]+ 1
      FAIL: gcc.target/aarch64/fmul_intrinsic_1.c scan-assembler-times fmul\\tv[0-9]+.2d, v[0-9]+.2d, v[0-9]+.d\\[[0-9]+\\] 3
      
      The 2s failures need target-independent changes, after which they rely
      on these patterns too.
      
      2020-01-27  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR target/92822
      	* config/aarch64/aarch64-simd.md (aarch64_get_half<mode>): New
      	expander.
      	(@aarch64_split_simd_mov<mode>): Use it.
      	(aarch64_simd_mov_from_<mode>low): Add a GPR alternative.
      	Leave the vec_extract patterns to handle 2-element vectors.
      	(aarch64_simd_mov_from_<mode>high): Likewise.
      	(vec_extract<VQMOV_NO2E:mode><Vhalf>): New expander.
      	(vec_extractv2dfv1df): Likewise.
      c15893df
    • Richard Sandiford's avatar
      aarch64: Fix failure in cmpimm_branch_1.c · e2a14bec
      Richard Sandiford authored
      gcc.target/aarch64/cmpimm_branch_1.c started failing after Bernd's
      fix to make combine take the costs of jumps into account
      (g:391500af).  This is because the rtx costs
      of *compare_condjump<GPI:mode> were higher than the costs
      of the instructions it combines.
      
      2020-01-27  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/aarch64.c (aarch64_if_then_else_costs): Match
      	jump conditions for *compare_condjump<GPI:mode>.
      e2a14bec
    • David Malcolm's avatar
      analyzer: fix setjmp-detection and support sigsetjmp · 342e14ff
      David Malcolm authored
      This patch removes the hack in is_setjmp_call_p of looking for
      "setjmp" and "_setjmp", replacing it with some logic adapted from
      special_function_p in calls.c, ignoring up to 2 leading underscores from
      the fndecl's name when checking for a function by name.
      
      It also requires that such functions are "extern" and at file scope
      for them to be matched.
      
      The patch also generalizes the setjmp/longjmp handling in the analyzer
      to also work with sigsetjmp/siglongjmp.  Doing so requires generalizing
      some hardcoded functions in diagnostics (which were hardcoded to avoid
      user-facing messages referring to "_setjmp", which is an implementation
      detail) - the patch adds a new function, get_user_facing_name for this,
      for use on calls that matched is_named_call_p and
      is_specical_named_call_p.
      
      gcc/analyzer/ChangeLog:
      	* analyzer.cc  (is_named_call_p): Check that fndecl is "extern"
      	and at file scope.  Potentially disregard prefix _ or __ in
      	fndecl's name.  Bail if the identifier is NULL.
      	(is_setjmp_call_p): Expect a gcall rather than plain gimple.
      	Remove special-case check for leading prefix, and also check for
      	sigsetjmp.
      	(is_longjmp_call_p): Also check for siglongjmp.
      	(get_user_facing_name): New function.
      	* analyzer.h (is_setjmp_call_p): Expect a gcall rather than plain
      	gimple.
      	(get_user_facing_name): New decl.
      	* checker-path.cc (setjmp_event::get_desc): Use
      	get_user_facing_name to avoid hardcoding the function name.
      	(rewind_event::rewind_event): Add rewind_info param, using it to
      	initialize new m_rewind_info field, and strengthen the assertion.
      	(rewind_from_longjmp_event::get_desc): Use get_user_facing_name to
      	avoid hardcoding the function name.
      	(rewind_to_setjmp_event::get_desc): Likewise.
      	* checker-path.h (setjmp_event::setjmp_event): Add setjmp_call
      	param and use it to initialize...
      	(setjmp_event::m_setjmp_call): New field.
      	(rewind_event::rewind_event): Add rewind_info param.
      	(rewind_event::m_rewind_info): New protected field.
      	(rewind_from_longjmp_event::rewind_from_longjmp_event): Add
      	rewind_info param.
      	(class rewind_to_setjmp_event): Move rewind_info field to parent
      	class.
      	* diagnostic-manager.cc (diagnostic_manager::add_events_for_eedge):
      	Update setjmp-handling for is_setjmp_call_p requiring a gcall;
      	pass the call to the new setjmp_event.
      	* engine.cc (exploded_node::on_stmt): Update for is_setjmp_call_p
      	requiring a gcall.
      	(stale_jmp_buf::emit): Use get_user_facing_name to avoid
      	hardcoding the function names.
      	(exploded_node::on_longjmp): Pass the longjmp_call when
      	constructing rewind_info.
      	(rewind_info_t::add_events_to_path): Pass the rewind_info_t to the
      	rewind_from_longjmp_event's ctor.
      	* exploded-graph.h (rewind_info_t::rewind_info_t): Add
      	longjmp_call param.
      	(rewind_info_t::get_longjmp_call): New.
      	(rewind_info_t::m_longjmp_call): New.
      	* region-model.cc (region_model::on_setjmp): Update comment to
      	indicate this is also for sigsetjmp.
      	* region-model.h (struct setjmp_record): Likewise.
      	(class setjmp_svalue): Likewise.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/analyzer/sigsetjmp-5.c: New test.
      	* gcc.dg/analyzer/sigsetjmp-6.c: New test.
      342e14ff
    • Richard Biener's avatar
      testsuite/91171 no longer needed XFAIL · 317346b2
      Richard Biener authored
      2020-01-27  Richard Biener  <rguenther@suse.de>
      
      	PR testsuite/91171
      	* gcc.dg/graphite/scop-21.c: un-XFAIL.
      317346b2
    • David Malcolm's avatar
      analyzer: fix build with gcc 4.4 (PR 93276) · 26d949c8
      David Malcolm authored
      This patch fixes various build failures seen with gcc 4.4
      
      gcc prior to 4.6 complains about:
      
        error: #pragma GCC diagnostic not allowed inside functions
      
      for various uses of PUSH_IGNORE_WFORMAT and POP_IGNORE_WFORMAT.
      This patch makes them a no-op with such compilers.
      
      The patch also fixes various errors with template base initializers
      and redundant uses of "typename" that older g++ implementations
      can't cope with.
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/93276
      	* analyzer.h (PUSH_IGNORE_WFORMAT, POP_IGNORE_WFORMAT): Guard these
      	macros with GCC_VERSION >= 4006, making them no-op otherwise.
      	* engine.cc (exploded_edge::exploded_edge): Specify template for
      	base class initializer.
      	(exploded_graph::add_edge): Specify template when chaining up to
      	base class add_edge implementation.
      	(viz_callgraph_node::dump_dot): Drop redundant "typename".
      	(viz_callgraph_edge::viz_callgraph_edge): Specify template for
      	base class initializer.
      	* program-state.cc (sm_state_map::clone_with_remapping): Drop
      	redundant "typename".
      	(sm_state_map::print): Likewise.
      	(sm_state_map::hash): Likewise.
      	(sm_state_map::operator==): Likewise.
      	(sm_state_map::remap_svalue_ids): Likewise.
      	(sm_state_map::on_svalue_purge): Likewise.
      	(sm_state_map::validate): Likewise.
      	* program-state.h (sm_state_map::iterator_t): Likewise.
      	* supergraph.h (superedge::superedge): Specify template for base
      	class initializer.
      
      gcc/ChangeLog:
      	PR analyzer/93276
      	* digraph.cc (test_edge::test_edge): Specify template for base
      	class initializer.
      26d949c8
    • Nathan Sidwell's avatar
      c++: Bogus error using namespace alias [PR91826] · feaa1640
      Nathan Sidwell authored
      My changes to is_nested_namespace broke is_ancestor's use where a namespace
      alias might be passed in.  This changes is_ancestor to look through the alias.
      
      	PR c++/91826
      	* name-lookup.c (is_ancestor): Allow CHILD to be a namespace alias.
      feaa1640
    • Claudiu Zissulescu's avatar
      [ARC] Update ARC600 multiplication cost. · f261388f
      Claudiu Zissulescu authored
      gcc/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* config/arc/arc.c (arc_rtx_costs): Update mul64 cost.
      f261388f
    • Claudiu Zissulescu's avatar
      [ARC] Save mlo/mhi registers when ISR. · 82cd9a96
      Claudiu Zissulescu authored
      ARC600 when configured with mul64 instructions uses mlo and mhi
      registers to store the 64 result of the multiplication. In the ARC600
      ISA documentation we have the next register configuration when ARC600
      is configured only with mul64 extension:
      
      Register | Name | Use
      ---------+------+------------------------------------
      r57      | mlo  | Multiply low 32 bits, read only
      r58      | mmid | Multiply middle 32 bits, read only
      r59      | mhi  | Multiply high 32 bits, read only
      -----------------------------------------------------
      
      When used for Co-existence configurations we have for mul64 the next
      registers used:
      
      Register | Name | Use
      ---------+------+------------------------------------
      r58      | mlo  | Multiply low 32 bits, read only
      r59      | mhi  | Multiply high 32 bits, read only
      -----------------------------------------------------
      
      Note that mlo/mhi assignment doesn't swap when bigendian CPU
      configuration is used.
      
      The compiler will always use r58 for mlo, regardless of the
      configuration choosen to ensure mlo/mhi correct splitting. Fixing mlo
      to the right register number is done at assembly time. The dwarf info
      is also notified via DBX_... macro. Both mlo/mhi registers needs to
      saved when ISR happens using a custom sequence.
      
      gcc/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* config/arc/arc-protos.h (gen_mlo): Remove.
      	(gen_mhi): Likewise.
      	* config/arc/arc.c (AUX_MULHI): Define.
      	(arc_must_save_reister): Special handling for r58/59.
      	(arc_compute_frame_size): Consider mlo/mhi registers.
      	(arc_save_callee_saves): Emit fp/sp move only when emit_move
      	paramter is true.
      	(arc_conditional_register_usage): Remove TARGET_BIG_ENDIAN from
      	mlo/mhi name selection.
      	(arc_restore_callee_saves): Don't early restore blink when ISR.
      	(arc_expand_prologue): Add mlo/mhi saving.
      	(arc_expand_epilogue): Add mlo/mhi restoring.
      	(gen_mlo): Remove.
      	(gen_mhi): Remove.
      	* config/arc/arc.h (DBX_REGISTER_NUMBER): Correct register
      	numbering when MUL64 option is used.
      	(DWARF2_FRAME_REG_OUT): Define.
      	* config/arc/arc.md (arc600_stall): New pattern.
      	(VUNSPEC_ARC_ARC600_STALL): Define.
      	(mulsi64): Use correct mlo/mhi registers.
      	(mulsi_600): Clean it up.
      	* config/arc/predicates.md (mlo_operand): Remove any dependency on
      	TARGET_BIG_ENDIAN.
      	(mhi_operand): Likewise.
      
      testsuite/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* gcc.target/arc/interrupt-6.c: Update test.
      82cd9a96
    • Claudiu Zissulescu's avatar
      [ARC] Propagate uncached type attribute to each member of a struct. · 62a715c7
      Claudiu Zissulescu authored
      Like `packed` type attribute, the ARC's `uncached` type attribute
      needs to be propagated to each member of the struct where it is used,
      triggering the .di flag for any access of the struct members. However,
      any complex CFG manipulation may drop memory pointer type attributes,
      leading to the impossibility to discriminate the direct accesses from
      normal ones. To solve this issue, we will treat the direct memory
      accessed specially via unspecs.
      
      gcc/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      	Petro Karashchenko  <petro.karashchenko@ring.com>
      
      	* config/arc/arc.c (arc_is_uncached_mem_p): Check struct
      	attributes if needed.
      	(prepare_move_operands): Generate special
      	unspec instruction for direct access.
      	(arc_isuncached_mem_p): Propagate uncached attribute to each
      	structure member.
      	* config/arc/arc.md (VUNSPEC_ARC_LDDI): Define.
      	(VUNSPEC_ARC_STDI): Likewise.
      	(ALLI): New mode iterator.
      	(mALLI): New mode attribute.
      	(lddi): New instruction pattern.
      	(stdi): Likewise.
      	(stdidi_split): Split instruction for architectures which are not
      	supporting ll64 option.
      	(lddidi_split): Likewise.
      
      testsuite/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      	Petro Karashchenko  <petro.karashchenko@ring.com>
      
      	* gcc.target/arc/uncached-1.c: Update test.
      	* gcc.target/arc/uncached-2.c: Likewise.
      	* gcc.target/arc/uncached-3.c: New test.
      	* gcc.target/arc/uncached-4.c: Likewise.
      	* gcc.target/arc/uncached-5.c: Likewise.
      	* gcc.target/arc/uncached-6.c: Likewise.
      	* gcc.target/arc/uncached-7.c: Likewise.
      	* gcc.target/arc/uncached-8.c: Likewise.
      	* gcc.target/arc/arc.exp (ll64): New predicate.
      62a715c7
    • Claudiu Zissulescu's avatar
      [ARC] Make libgcc compatible with ARC's reduced register set config. · 2744b8b2
      Claudiu Zissulescu authored
      ARC processors can work with a reduced register set (i.e. registers
      r4-r9 and r16-r25 are not available). This option can be enabled
      passing -mrf16 option to the compiler, or by using -mcpu=em_mini CPU
      configuration. Using RF16 config requires all the hand-made assembly
      files used in libgcc to have the corresponding RF16 object attribute
      set.
      
      This patch qualifies the relevant hand-made assembly files to
      RF16 config, and also adds generic c-functions for the one which are
      not.
      
      libgcc/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* config/arc/crti.S: Add RF16 object attribute.
      	* config/arc/crtn.S: Likewise.
      	* config/arc/crttls.S: Likewise.
      	* config/arc/lib1funcs.S: Likewise.
      	* config/arc/fp-hack.h (ARC_OPTFPE): Define.
      	* config/arc/lib2funcs.c: New file.
      	* config/arc/t-arc: Add lib2funcs to LIB2ADD.
      2744b8b2
    • Jonathan Wakely's avatar
      libstdc++: Fix deduction guide for std::span (PR93426) · 389cd88c
      Jonathan Wakely authored
      The deduction guide from an iterator and sentinel used the wrong alias
      template and so didn't work.
      
      	PR libstdc++/93426
      	* include/std/span (span): Fix deduction guide.
      	* testsuite/23_containers/span/deduction.cc: New test.
      389cd88c
    • Richard Sandiford's avatar
      lra: Stop registers being incorrectly marked live [PR92989] · e648e57e
      Richard Sandiford authored
      lra_assign has an assert to make sure that no pseudo is allocated
      to a conflicting hard register.  It used to be restricted to
      !flag_ipa_ra, but in g:a1e6ee38 I'd enabled it for
      flag_ipa_ra too.  It then tripped while building libstdc++
      for mips-mti-linux.
      
      The failure was due to code at the end of process_bb_lives.  For an
      abnormal/EH edge, we need to make sure that all pseudos that are live
      on entry to the destination conflict with all hard registers that are
      clobbered by an abnormal call return.  The usual way to do this would
      be to simulate a clobber of the hard registers, by making them live and
      them making them dead again.  Making the registers live creates the
      conflict; making them dead again restores the correct live set for
      whatever follows.
      
      However, process_bb_lives skips the second step (making the registers
      dead again) at the start of a BB, presumably on the basis that there's
      no further code that needs a correct live set.  The problem for the PR
      is that that wasn't quite true in practice.  There was code further
      down process_bb_lives that updated the live-in set of the BB for some
      registers, and this live set was "contaminated" by registers that
      weren't live but that created conflicts.  This information then got
      propagated to other blocks, so that registers that were made live
      purely to create a conflict at the start of the EH receiver then became
      needlessly live throughout preceding blocks.  This in turn created a
      fake conflict with pseudos in those blocks, invalidating the choices
      made by IRA.
      
      The easiest fix seems to be to update the live-in set *before* adding
      the fake live registers.  An alternative would be to simulate the full
      clobber, but that seems a bit wasteful.
      
      2020-01-27  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR rtl-optimization/92989
      	* lra-lives.c (process_bb_lives): Update the live-in set before
      	processing additional clobbers.
      e648e57e
    • Richard Sandiford's avatar
      cselib: Fix handling of multireg values for call insns [PR93170] · 150760dd
      Richard Sandiford authored
      g:3bd29185 mishandled the case in which only the
      tail end of a multireg hard register is invalidated by the call.
      Walking all the entries should be both safer and more precise.
      
      Avoiding cselib_invalidate_regno also means that we no longer
      walk the same list multiple times (which is something we did
      before g:3bd29185 too).
      
      2020-01-27  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR rtl-optimization/93170
      	* cselib.c (cselib_invalidate_regno_val): New function, split out
      	from...
      	(cselib_invalidate_regno): ...here.
      	(cselib_invalidated_by_call_p): New function.
      	(cselib_process_insn): Iterate over all the hard-register entries in
      	REG_VALUES and invalidate any that cross call-clobbered registers.
      
      gcc/testsuite/
      	* gcc.dg/torture/pr93170.c: New test.
      150760dd
    • Richard Sandiford's avatar
      dojump: Fix gcc.dg/torture/pr91323.c for aarch64 targets · 7974a146
      Richard Sandiford authored
      PR91323 was fixed for x86 and sparc in target code, but aarch64
      instead relies on the target-independent comparison splitters.
      Since LTGT is an unordered-signalling operation, we should split
      it into unordered-signalling operations for any input that could
      be NaN, not just inputs that could be signalling NaNs.
      
      2020-01-27  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* dojump.c (split_comparison): Use HONOR_NANS rather than
      	HONOR_SNANS when splitting LTGT.
      7974a146
    • Martin Liska's avatar
      Filter out language specific options from --help=common. · e97a3063
      Martin Liska authored
      	PR driver/91220
      	* opts.c (print_filtered_help): Exclude language-specific
      	options from --help=common unless enabled in all FEs.
      e97a3063
    • Martin Liska's avatar
      Do not print params in --help except --help=param. · 10fe5cbe
      Martin Liska authored
      	* opts.c (print_help): Exclude params from
      	all except --help=param.
      10fe5cbe
    • Martin Liska's avatar
      Do not generate a unique fnname for resolver. · c2bd2b46
      Martin Liska authored
      	PR target/93274
      	* config/i386/i386-features.c (make_resolver_func):
      	Align the code with ppc64 target implementation.
      	Do not generate a unique name for resolver function.
      	PR target/93274
      	* gcc.target/i386/pr81213.c: Adjust to not expect
      	a globally unique name.
      c2bd2b46
    • Richard Biener's avatar
      tree-optimization/93397 delay converted reduction chain adjustment · 1442bc31
      Richard Biener authored
      The following delays adjusting the SLP graph for converted reduction
      chains to a point where the SLP build no longer can fail since we
      otherwise fail to undo marking the conversion as a group.
      
      2020-01-27  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/93397
      	* tree-vect-slp.c (vect_analyze_slp_instance): Delay
      	converted reduction chain SLP graph adjustment.
      
      	* gcc.dg/torture/pr93397.c: New testcase.
      1442bc31
    • Tobias Burnus's avatar
      fortran] Fix PR 85781, ICE on valid · 86075aa5
      Tobias Burnus authored
              PR fortran/85781
              * trans-expr.c (gfc_conv_substring): Handle non-ARRAY_TYPE strings
              of Bind(C) procedures.
      
              PR fortran/85781
              * gfortran.dg/bind_c_char_2.f90: New.
              * gfortran.dg/bind_c_char_3.f90: New.
              * gfortran.dg/bind_c_char_4.f90: New.
              * gfortran.dg/bind_c_char_5.f90: New.
      86075aa5
    • Jason Merrill's avatar
      c++: Testsuite adjustments for PR 90992. · 40bf3f1f
      Jason Merrill authored
      It occurred to me that the NotNoexcept class is irrelevant to the issue I
      was fixing, so let's remove it.
      40bf3f1f
    • Jason Merrill's avatar
      c++: Fix -Wnoexcept handling of system headers (PR90992). · 5035cd66
      Jason Merrill authored
      The immediate issue here was that the second warning didn't depend on the
      first one, so if the first location was in a system header, we'd
      mysteriously give the second by itself.
      
      It's also the case that the thing we care about being in a system header is
      the function that we want to suggest adding 'noexcept' to, not the
      noexcept-expression; it's useful to suggest adding noexcept to a user
      function to satisfy a noexcept-expression in a system header.
      
      	PR c++/90992
      	* except.c (maybe_noexcept_warning): Check DECL_IN_SYSTEM_HEADER and
      	temporarily enable -Wsystem-headers.  Change second warning to
      	conditional inform.
      5035cd66
    • GCC Administrator's avatar
      Daily bump. · cf17dcc6
      GCC Administrator authored
      cf17dcc6
  2. Jan 26, 2020
    • Marek Polacek's avatar
      Fix last CL. · 787c79e5
      Marek Polacek authored
      787c79e5
    • Marek Polacek's avatar
      sanopt: Avoid crash on anonymous parameter [PR93436] · ab6cd364
      Marek Polacek authored
      Here we crash when using -fsanitize=address -fdump-tree-sanopt because
      the dumping code uses IDENTIFIER_POINTER on a null DECL_NAME.  Instead,
      we can print "<anonymous>" in such a case.  Or we could avoid printing
      that diagnostic altogether.
      
      2020-01-26  Marek Polacek  <polacek@redhat.com>
      
      	PR tree-optimization/93436
      	* sanopt.c (sanitize_rewrite_addressable_params): Avoid crash on
      	null DECL_NAME.
      ab6cd364
    • Iain Sandoe's avatar
      coroutines: Fix whitespace and comment markers. · 80222642
      Iain Sandoe authored
      This amends the cases where inline comments in function calls were
      followed by a space.  It also fixes some uses of C++ style and wrongly
      wrapped comment end markers.
      
      gcc/cp/ChangeLog:
      
      2020-01-26  Iain Sandoe  <iain@sandoe.co.uk>
      
      * coroutines.cc: Amend whitespace after inline comments
      throughout.  Ensure use of C-style comment markers.
      80222642
    • Rainer Orth's avatar
      testsuite: xfail gcc.target/i386/pr91298-?.c on Solaris/x86 with as · 9664b52a
      Rainer Orth authored
      The new gcc.target/i386/pr91298-?.c testcases FAIL on Solaris/x86 with the
      native assembler:
      
      FAIL: gcc.target/i386/pr91298-1.c (test for excess errors)
      
      Excess errors:
      Assembler: pr91298-1.c
              "/var/tmp//ccE6r3xb.s", line 5 : Syntax error
              Near line: "    .globl  $quux"
              "/var/tmp//ccE6r3xb.s", line 6 : Syntax error
              Near line: "    .type   $quux, @function"
              "/var/tmp//ccE6r3xb.s", line 7 : Syntax error
              Near line: "$quux:"
              "/var/tmp//ccE6r3xb.s", line 15 : Syntax error
              Near line: "    .size   $quux, .-$quux"
              "/var/tmp//ccE6r3xb.s", line 24 : Syntax error
              Near line: "    movl    $($a), %eax"
              "/var/tmp//ccE6r3xb.s", line 38 : Syntax error
              Near line: "    leal    ($a)(,%eax,4), %eax"
              "/var/tmp//ccE6r3xb.s", line 51 : Syntax error
              Near line: "    movl    ($a), %eax"
              "/var/tmp//ccE6r3xb.s", line 63 : Syntax error
              Near line: "    movl    ($a)+16, %eax"
              "/var/tmp//ccE6r3xb.s", line 97 : Syntax error
              Near line: "    movl    $($quux), %eax"
              "/var/tmp//ccE6r3xb.s", line 101 : Syntax error
              Near line: "    .globl  $a"
              "/var/tmp//ccE6r3xb.s", line 104 : Syntax error
              Near line: "    .type   $a, @object"
              "/var/tmp//ccE6r3xb.s", line 105 : Syntax error
              Near line: "    .size   $a, 72"
              "/var/tmp//ccE6r3xb.s", line 106 : Syntax error
              Near line: "$a:"
              "/var/tmp//ccE6r3xb.s", line 228 : Syntax error
              Near line: "    .long   ($a)"
      
      FAIL: gcc.target/i386/pr91298-2.c (test for excess errors)
      
      It only allows letters, digits, '_' and '.' in identifiers:
      https://docs.oracle.com/cd/E37838_01/html/E61064/eqbsx.html#XALRMeoqjw
      
      For lack of an effective-target keyword matching -fdollars-in-identifiers,
      this patch fixes this by xfailing them on *-*-solaris2.* && !gas.
      
      Tested on i386-pc-solaris2.11 with as and gas and x86_64-pc-linux-gnu.
      
      	* gcc.target/i386/pr91298-1.c: xfail on Solaris/x86 with native
      	assembler.
      	* gcc.target/i386/pr91298-2.c: Likewise.
      9664b52a
    • Jason Merrill's avatar
      checking: avoid verify_type_variant crash on incomplete type. · 091fe099
      Jason Merrill authored
      Here, we end up calling gen_type_die_with_usage for a type that's in the
      middle of finish_struct_1, after we set TYPE_NEEDS_CONSTRUCTING on it but
      before we copy all the flags to the variants--and, significantly, before we
      set its TYPE_SIZE.  It seems reasonable to only look at
      TYPE_NEEDS_CONSTRUCTING on complete types, since we aren't going to try to
      create an object of an incomplete type any other way.
      
      	PR c++/92601
      	* tree.c (verify_type_variant): Only verify TYPE_NEEDS_CONSTRUCTING
      	of complete types.
      091fe099
    • Darius Galis's avatar
      Avoid creating string insns unless string support is enabled · 0f6f39ed
      Darius Galis authored
      	* config/rx/rx.md (setmemsi): Added rx_allow_string_insns constraint
      	(rx_setmem): Likewise.
      0f6f39ed
    • Jakub Jelinek's avatar
      i386: Fix up *{add,sub}v<dwi>4_doubleword patterns (PR target/93412) · a9947bac
      Jakub Jelinek authored
      In the *{add,sub}v<dwi>4_doubleword patterns, we don't really want to see a
      VOIDmode last operand, because it then means invalid RTL
      (sign_extend:{TI,POI} (const_int ...)) or so, and therefore something we
      don't really handle in the splitter either.  We have
      *{add,sub}v<dwi>4_doubleword_1 pattern for those and that is what combine
      will match, the problem in this testcase is just that it was only RA that
      propagated the constant into the instruction.
      
      In the similar *{add,sub}v<mode>4 patterns, we make sure not to accept
      VOIDmode operand and similarly to these have _1 suffixed variant that allows
      constants.
      
      2020-01-26  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/93412
      	* config/i386/i386.md (*addv<dwi>4_doubleword, *subv<dwi>4_doubleword):
      	Use nonimmediate_operand instead of x86_64_hilo_general_operand and
      	drop <di> from constraint of last operand.
      
      	* gcc.dg/pr93412.c: New test.
      a9947bac
Loading