Skip to content
Snippets Groups Projects
  1. Mar 03, 2023
  2. Mar 02, 2023
    • Jakub Jelinek's avatar
      testsuite: Fix up memchr-3.c test [PR108991] · 73bbfd59
      Jakub Jelinek authored
      The newly added dg-warning directive was missing the comment argument,
      so the target selector was treated as comment and the warning was expected
      on all targets when it should be expected only on llp64 targets.
      
      2023-03-03  Jakub Jelinek  <jakub@redhat.com>
      
      	PR testsuite/108991
      	* gcc.dg/memchr-3.c: Add missing comment argument to dg-warning
      	before target selector.
      73bbfd59
    • Jakub Jelinek's avatar
      libquadmath: Assorted libquadmath strtoflt128 fixes [PR87204, PR94756] · df63f416
      Jakub Jelinek authored
      This patch cherry-pickx 8 commits from glibc which fix various strtod_l
      bugs.  Additionally, it makes mp_limb_t 64-bit on llp64 targets like
      64-bit cygwin.
      
      2023-03-03  niXman  <i.nixman@autistici.org>
      	    Jakub Jelinek  <jakub@redhat.com>
      
      	PR libquadmath/87204
      	PR libquadmath/94756
      	* printf/gmp-impl.h (mp_limb_t, mp_limb_signed_t, BITS_PER_MP_LIMB):
      	Use 64-bit limbs on LLP64 targets.
      	* strtod/strtod_l.c (round_and_return): Cherry-pick glibc
      	9310c284ae9 BZ #16151, 4406c41c1d6 BZ #16965 and fcd6b5ac36a
      	BZ #23279 fixes.
      	(____STRTOF_INTERNAL): Cherry-pick glibc b0debe14fcf BZ #23007,
      	5556d30caee BZ #18247, 09555b9721d and c6aac3bf366 BZ #26137 and
      	d84f25c7d87 fixes.
      df63f416
    • Jakub Jelinek's avatar
      c++, v3: Emit fundamental tinfos for _Float16/decltype(0.0bf16) types on ia32... · 6978df2c
      Jakub Jelinek authored
      c++, v3: Emit fundamental tinfos for _Float16/decltype(0.0bf16) types on ia32 with -mno-sse2 [PR108883]
      
      _Float16 and decltype(0.0bf16) types are on x86 supported only with
      -msse2.  On x86_64 that is the default, but on ia32 it is not.
      We should still emit fundamental type tinfo for those types in
      libsupc++.a/libstdc++.*, regardless of whether libsupc++/libstdc++
      is compiled with -msse2 or not, as user programs can be compiled
      with different ISA flags from libsupc++/libstdc++ and if they
      are compiled with -msse2 and use std::float16_t or std::bfloat16_t
      and need RTTI for it, it should work out of the box.  Furthermore,
      libstdc++ ABI on ia32 shouldn't depend on whether the library
      is compiled with -mno-sse or -msse2.
      
      Unfortunately, just hacking up libsupc++ Makefile/configure so that
      a single source is compiled with -msse2 isn't appropriate, because
      that TU emits also code and the code should be able to run on CPUs
      which libstdc++ supports.  We could add [[gnu::attribute ("no-sse2")]]
      there perhaps conditionally, but it all gets quite ugly.
      
      The following patch instead adds a target hook which allows the backend
      to temporarily tweak registered types such that emit_support_tinfos
      emits whatever is needed.
      
      Additionally, it makes emit_support_tinfos_1 call emit_tinfo_decl
      immediately, so that temporarily created dummy types for emit_support_tinfo
      purposes only can be nullified again afterwards.  And removes the
      previous fallback_* types used for dfloat*_type_node tinfos even when
      decimal types aren't supported.
      
      2023-03-03  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/108883
      gcc/
      	* target.h (emit_support_tinfos_callback): New typedef.
      	* targhooks.h (default_emit_support_tinfos): Declare.
      	* targhooks.cc (default_emit_support_tinfos): New function.
      	* target.def (emit_support_tinfos): New target hook.
      	* doc/tm.texi.in (emit_support_tinfos): Document it.
      	* doc/tm.texi: Regenerated.
      	* config/i386/i386.cc (ix86_emit_support_tinfos): New function.
      	(TARGET_EMIT_SUPPORT_TINFOS): Redefine.
      gcc/cp/
      	* cp-tree.h (enum cp_tree_index): Remove CPTI_FALLBACK_DFLOAT*_TYPE
      	enumerators.
      	(fallback_dfloat32_type, fallback_dfloat64_type,
      	fallback_dfloat128_type): Remove.
      	* rtti.cc (emit_support_tinfo_1): If not emitted already, call
      	emit_tinfo_decl and remove from unemitted_tinfo_decls right away.
      	(emit_support_tinfos): Move &dfloat*_type_node from fundamentals array
      	into new fundamentals_with_fallback array.  Call emit_support_tinfo_1
      	on elements of that array too, with the difference that if
      	the type is NULL, use a fallback REAL_TYPE for it temporarily.
      	Drop the !targetm.decimal_float_supported_p () handling.  Call
      	targetm.emit_support_tinfos at the end.
      	* mangle.cc (write_builtin_type): Remove references to
      	fallback_dfloat*_type.  Handle bfloat16_type_node mangling.
      6978df2c
    • Guillaume Gomez's avatar
      jit, testsuite: fix a failing test by updating its error string [PR107999] · 6b432c0f
      Guillaume Gomez authored
      
      gcc/testsuite/ChangeLog:
      	PR jit/107999
      	* jit.dg/test-error-array-bounds.c: Update test.
      
      Signed-off-by: default avatarGuillaume Gomez <guillaume1.gomez@gmail.com>
      6b432c0f
    • Vladimir N. Makarov's avatar
      IRA: Use minimal cost for hard register movement · 2639f9d2
      Vladimir N. Makarov authored
      This is the 2nd attempt to fix PR90706.  IRA calculates wrong AVR
      costs for moving general hard regs of SFmode.  This was the reason for
      spilling a pseudo in the PR.  In this patch we use smaller move cost
      of hard reg in its natural and operand modes.
      
              PR rtl-optimization/90706
      
      gcc/ChangeLog:
      
      	* ira-costs.cc: Include print-rtl.h.
      	(record_reg_classes, scan_one_insn): Add code to print debug info.
      	(record_operand_costs): Find and use smaller cost for hard reg
      	move.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/avr/pr90706.c: New.
      2639f9d2
    • Kwok Cheung Yeung's avatar
      amdgcn: Enable SIMD vectorization of math functions · ce9cd725
      Kwok Cheung Yeung authored
      Calls to vectorized versions of routines in the math library will now
      be inserted when vectorizing code containing supported math functions.
      
      2023-03-02  Kwok Cheung Yeung  <kcy@codesourcery.com>
      	    Paul-Antoine Arras  <pa@codesourcery.com>
      
      	gcc/
      	* builtins.cc (mathfn_built_in_explicit): New.
      	* config/gcn/gcn.cc: Include case-cfn-macros.h.
      	(mathfn_built_in_explicit): Add prototype.
      	(gcn_vectorize_builtin_vectorized_function): New.
      	(gcn_libc_has_function): New.
      	(TARGET_LIBC_HAS_FUNCTION): Define.
      	(TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION): Define.
      
      	gcc/testsuite/
      	* gcc.target/gcn/simd-math-1.c: New testcase.
      	* gcc.target/gcn/simd-math-2.c: New testcase.
      
      	libgomp/
      	* testsuite/libgomp.c/simd-math-1.c: New testcase.
      ce9cd725
    • Patrick Palka's avatar
      c++: more mce_false folding from cp_fully_fold_init [PR108243] · 5425159d
      Patrick Palka authored
      We should also fold the overall initializer passed to cp_fully_fold_init
      with mce_false, which allows folding of the copy-initialization of
      'a1' in the below testcase (the initializer here is an AGGR_INIT_EXPR).
      
      Unfortunately this doesn't help with direct- or default-initialization
      because we don't call cp_fully_fold_init in that case, and even if we
      did the initializer in that case is expressed as a bare CALL_EXPR
      instead of an AGGR_INIT_EXPR, which cp_fully_fold_init can't really
      fold.
      
      	PR c++/108243
      	PR c++/97553
      
      gcc/cp/ChangeLog:
      
      	* cp-gimplify.cc (cp_fully_fold): Add an internal overload that
      	additionally takes and propagate an mce_value parameter, and
      	define the existing public overload in terms of it.
      	(cp_fully_fold_init): Pass mce_false to cp_fully_fold.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/opt/is_constant_evaluated3.C: New test.
      5425159d
    • Patrick Palka's avatar
      c++: constant non-copy-init is manifestly constant [PR108243] · cbaa1d9c
      Patrick Palka authored
      According to [basic.start.static]/2 and [expr.const]/2, a variable
      with static storage duration initialized with a constant initializer
      has constant initialization, and such an initializer is manifestly
      constant-evaluated.
      
      For copy initialization, we're already getting this right because in
      that case check_initializer would consistently call store_init_value,
      which for TREE_STATIC variables calls fold_non_dependent_init with
      m_c_e=true.
      
      But for direct (or default) initialization, check_initializer doesn't
      always call store_init_value.  We instead however always call
      maybe_constant_init from expand_default_init[1], albeit with m_c_e=false
      which means we don't get the "manifestly constant-evaluated" part right
      for non-copy-init.
      
      This patch fixes this by setting m_c_e=true in maybe_constant_init for
      static storage duration variables, mainly for benefit of the call
      to maybe_constant_init from expand_default_init.
      
      [1]: this maybe_constant_init call isn't reached in the copy-init
      case because there init is a CONSTRUCTOR rather than a TREE_LIST,
      and so we exit early from expand_default_init, returning an INIT_EXPR.
      This INIT_EXPR is ultimately what causes us to consistently hit the
      store_init_value code path from check_initializer in the copy-init case.
      
      	PR c++/108243
      
      gcc/cp/ChangeLog:
      
      	* constexpr.cc (maybe_constant_init_1): Override
      	manifestly_const_eval to true if is_static.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp2a/is-constant-evaluated14.C: New test.
      cbaa1d9c
    • David Malcolm's avatar
      analyzer: fix uninit false +ves reading from DECL_HARD_REGISTER [PR108968] · 20bd258d
      David Malcolm authored
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/108968
      	* region-model.cc (region_model::get_rvalue_1): Handle VAR_DECLs
      	with a DECL_HARD_REGISTER by returning UNKNOWN.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/108968
      	* gcc.dg/analyzer/uninit-pr108968-register.c: New test.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      20bd258d
    • Jakub Jelinek's avatar
      c++, debug: Fix up locus of DW_TAG_imported_module [PR108716] · 4d82022b
      Jakub Jelinek authored
      Before IMPORTED_DECL has been introduced in PR37410, we used to emit correct
      DW_AT_decl_line on DW_TAG_imported_module on the testcase below, after that
      change we haven't emitted it at all for a while and after some time
      started emitting incorrect locus, in particular the location of } closing
      the function.
      
      The problem is that while we have correct EXPR_LOCATION on the USING_STMT,
      when genericizing that USING_STMT into IMPORTED_DECL we don't copy the
      location to DECL_SOURCE_LOCATION, so it gets whatever input_location happens
      to be when it is created.
      
      2023-03-02  Jakub Jelinek  <jakub@redhat.com>
      
      	PR debug/108716
      	* cp-gimplify.cc (cp_genericize_r) <case USING_STMT>: Set
      	DECL_SOURCE_LOCATION on IMPORTED_DECL to expression location
      	of USING_STMT or input_location.
      
      	* g++.dg/debug/dwarf2/pr108716.C: New test.
      4d82022b
    • Richard Sandiford's avatar
      vect: Don't apply masks to operations on invariants [PR108979] · 076d309e
      Richard Sandiford authored
      The loop body in the testcase contains an operation on invariants.
      SLP detects this and can hoist/schedule the operation outside of
      the loop.  However, after the fix for PR96373, we would try to
      apply a loop mask to this operation, even though the mask is
      defined in the loop.
      
      The patch does what Richi suggested in the PR: suppress the
      masking for externs and constants.
      
      gcc/
      	PR tree-optimization/108979
      	* tree-vect-stmts.cc (vectorizable_operation): Don't mask
      	operations on invariants.
      
      gcc/testsuite/
      	PR tree-optimization/108979
      	* gfortran.dg/vect/pr108979.f90: New test.
      076d309e
    • Marek Polacek's avatar
      c++: ICE with -Wmismatched-tags and member template [PR106259] · 71afd062
      Marek Polacek authored
      -Wmismatched-tags warns about the (harmless) struct/class mismatch.
      For, e.g.,
      
        template<typename T> struct A { };
        class A<int> a;
      
      it works by adding A<T> to the class2loc hash table while parsing the
      class-head and then, while parsing the elaborate type-specifier, we
      add A<int>.  At the end of c_parse_file we go through the table and
      warn about the class-key mismatches.  In this PR we crash though; we
      have
      
        template<typename T> struct A {
          template<typename U> struct W { };
        };
        struct A<int>::W<int> w; // #1
      
      where while parsing A and #1 we've stashed
         A<T>
         A<T>::W<U>
         A<int>::W<int>
      into class2loc.  Then in class_decl_loc_t::diag_mismatched_tags TYPE
      is A<int>::W<int>, and specialization_of gets us A<int>::W<U>, which
      is not in class2loc, so we crash on gcc_assert (cdlguide).  But it's
      OK not to have found A<int>::W<U>, we should just look one "level" up,
      that is, A<T>::W<U>.
      
      It's important to handle class specializations, so e.g.
      
        template<>
        struct A<char> {
          template<typename U>
          class W { };
        };
      
      where W's class-key is different than in the primary template above,
      so we should warn depending on whether we're looking into A<char>
      or into a different instantiation.
      
      	PR c++/106259
      
      gcc/cp/ChangeLog:
      
      	* parser.cc (class_decl_loc_t::diag_mismatched_tags): If the first
      	lookup of SPEC didn't find anything, try to look for
      	most_general_template.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/warn/Wmismatched-tags-11.C: New test.
      71afd062
    • Robin Dapp's avatar
      s390: Add LEN_LOAD/LEN_STORE support. · da19e37c
      Robin Dapp authored
      This patch adds LEN_LOAD/LEN_STORE support for z13 and newer.
      It defines a bias value of -1 and implements the LEN_LOAD and LEN_STORE
      optabs.
      
      Add vll/vstl testcases adapted from Power.
      
      Also change expectations for SLP testcases with more than one rgroup.
      
      gcc/ChangeLog:
      
      	* config/s390/predicates.md (vll_bias_operand): Add -1 bias.
      	* config/s390/s390.cc (s390_option_override_internal): Make
      	partial vector usage the default from z13 on.
      	* config/s390/vector.md (len_load_v16qi): Add.
      	(len_store_v16qi): Add.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/s390/s390.exp: Add partial subdirectory.
      	* gcc.target/s390/vector/vec-nopeel-2.c: Change test
      	expectation.
      	* lib/target-supports.exp: Add s390.
      	* gcc.target/s390/vector/partial/s390-vec-length-1.h: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-2.h: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-3.h: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-7.h: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-epil-1.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-epil-2.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-epil-3.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-epil-7.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-epil-run-1.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-epil-run-2.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-epil-run-3.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-epil-run-7.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-full-1.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-full-2.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-full-3.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-full-7.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-full-run-1.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-full-run-2.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-full-run-3.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-full-run-7.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-run-1.h: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-run-2.h: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-run-3.h: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-run-7.h: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length-small.c: New test.
      	* gcc.target/s390/vector/partial/s390-vec-length.h: New test.
      da19e37c
    • Andre Vieira's avatar
      simplify-rtx: Use byte in simplify_subreg rather than assume 0 offset · 61407e01
      Andre Vieira authored
      This patch fixes a missed review comment in an earlier patch using byte instead
      of a 0 offset.  Also improves the comment as suggested.
      
      gcc/ChangeLog:
      
      	* simplify-rtx.cc (simplify_context::simplify_subreg): Use byte instead
      	of constant 0 offset.
      61407e01
    • Jonathan Yong's avatar
      gcc.dg/memchr-3.c: Account for LLP64 warnings · 62a8d31e
      Jonathan Yong authored
      
      	gcc/testsuite/ChangeLog:
      
      	PR middle-end/97956
      	* gcc.dg/memchr-3.c (memchr): Account for LLP64 warnings.
      
      Signed-off-by: default avatarJonathan Yong <10walls@gmail.com>
      62a8d31e
    • Jonathan Yong's avatar
      gcc.dg/overflow-warn-9.c: Fix LLP64 · 17301aeb
      Jonathan Yong authored
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/overflow-warn-9.c: Add LLP64 case.
      
      Signed-off-by: default avatarJonathan Yong <10walls@gmail.com>
      17301aeb
    • Robert Suchanek's avatar
      MIPS: Bugfix for fix Dejagnu issues with RTL checking enabled. · 0b83fa07
      Robert Suchanek authored
      
      gcc/ChangeLog:
      
      	* config/mips/mips.cc (mips_set_text_contents_type): Use HOST_WIDE_INT
      	instead of long.
      	* config/mips/mips-protos.h (mips_set_text_contents_type): Likewise.
      
      Signed-off-by: default avatarXin Liu <xin.liu@oss.cipunited.com>
      0b83fa07
    • Junxian Zhu's avatar
      MIPS: Add buildtime option to set msa default · f2b846f1
      Junxian Zhu authored
      
      Add buildtime option to decide whether will compiler build with `-mmsa` option default.
      
      gcc/ChangeLog:
      	* config.gcc: add -with-{no-}msa build option.
      	* config/mips/mips.h: Likewise.
      	* doc/install.texi: Likewise.
      
      Signed-off-by: default avatarJunxian Zhu <zhujunxian@oss.cipunited.com>
      f2b846f1
    • Richard Sandiford's avatar
      Avoid creating (const (reg ...)) [PR108603] · b09dc748
      Richard Sandiford authored
      convert_memory_address_addr_space_1 has two modes: one in which it
      tries to create a self-contained RTL expression (which might fail)
      and one in which it can emit new instructions where necessary.
      
      When handling a CONST, the function recurses into the CONST's
      operand and then constifies the result.  But that's only valid if
      the result is still a self-contained expression.  If new instructions
      have been emitted, the expression will refer to the (non-constant)
      results of those instructions.
      
      In the PR, this caused us to emit a nonsensical (const (reg ...))
      REG_EQUAL note.
      
      gcc/
      	PR tree-optimization/108603
      	* explow.cc (convert_memory_address_addr_space_1): Only wrap
      	the result of a recursive call in a CONST if no instructions
      	were emitted.
      
      gcc/testsuite/
      	PR tree-optimization/108603
      	* gcc.target/aarch64/sve/pr108603.c: New test.
      b09dc748
    • Richard Sandiford's avatar
      vect: Fix voluntarily-masked negative conditionals [PR108430] · 2a8ce4b5
      Richard Sandiford authored
      vectorizable_condition checks whether a COND_EXPR condition is used
      elsewhere with a loop mask.  If so, it applies the loop mask to the
      COND_EXPR too, to reduce the number of live masks and to increase the
      chance of combining the AND with the comparison.
      
      There is also code to do this for inverted conditions.  E.g. if
      we have a < b ? c : d and something else is conditional on !(a < b)
      (such as a load in d), we use !(a < b) ? d : c and apply the loop
      mask to !(a < b).
      
      This inversion relied on the function's bitop1/bitop2 mechanism.
      However, that mechanism is skipped if the condition is split out of
      the COND_EXPR as a separate statement.  This meant that we could end
      up using the inverse of the intended condition.
      
      There is a separate way of negating the condition when a mask
      is being applied (which is also used for EXTRACT_LAST reductions).
      This patch uses that instead.
      
      As well as the testcase, this fixes aarch64/sve/vcond_{4,17}_run.c.
      
      gcc/
      	PR tree-optimization/108430
      	* tree-vect-stmts.cc (vectorizable_condition): Fix handling
      	of inverted condition.
      
      gcc/testsuite/
      	PR tree-optimization/108430
      	* gcc.target/aarch64/sve/pr108430.c: New test.
      2a8ce4b5
    • Jakub Jelinek's avatar
      fold-const: Ignore padding bits in native_interpret_expr REAL_CST reverse verification [PR108934] · cc88366a
      Jakub Jelinek authored
      In the following testcase we try to std::bit_cast a (pair of) integral
      value(s) which has some non-zero bits in the place of x86 long double
      (for 64-bit 16 byte type with 10 bytes actually loaded/stored by hw,
      for 32-bit 12 byte) and starting with my PR104522 change we reject that
      as native_interpret_expr fails on it.  The PR104522 change extends what
      has been done before for MODE_COMPOSITE_P (but those don't have any padding
      bits) to all floating point types, because e.g. the exact x86 long double
      has various bit combinations we don't support, like
      pseudo-(denormals,infinities,NaNs) or unnormals.  The HW handles some of
      those as exceptional cases and others similarly to the non-pseudo ones.
      But for the padding bits it actually doesn't load/store those bits at all,
      it loads/stores 10 bytes.  So, I think we should exempt the padding bits
      from the reverse comparison (the native_encode_expr bits for the padding
      will be all zeros), which the following patch does.  For bit_cast it is
      similar to e.g. ignoring padding bits if the destination is a structure
      which has padding bits in there.
      
      The change changed auto-init-4.c to how it has been behaving before the
      PR105259 change, where some more VCEs can be now done.
      
      2023-03-02  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/108934
      	* fold-const.cc (native_interpret_expr) <case REAL_CST>: Before memcmp
      	comparison copy the bytes from ptr to a temporary buffer and clearing
      	padding bits in there.
      
      	* gcc.target/i386/auto-init-4.c: Revert PR105259 change.
      	* g++.target/i386/pr108934.C: New test.
      cc88366a
    • Jakub Jelinek's avatar
      openmp: Fix up error recovery for invalid structured bindings in OpenMP range for loops [PR105839] · f0ef740d
      Jakub Jelinek authored
      The PR108503 temporary DECL_HAS_VALUE_EXPR_P clearing code can ICE
      during recovery, because cp_finish_decomp when it detects errors and
      reports them clears DECL_HAS_VALUE_EXPR_P, clears DECL_VALUE_EXPR and
      sets TREE_TYPE of the structured binding vars to error_mark_node.
      The PR108503 code had an assertion that DECL_HAS_VALUE_EXPR_P is set
      so that it can clear it and restore later.
      
      The following patch allows DECL_HAS_VALUE_EXPR_P to be unset if
      type is error_mark_node and doesn't set it again in that case.
      
      2023-03-02  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/105839
      	* parser.cc (cp_convert_omp_range_for): Allow in assert
      	decomp_first_name without DECL_HAS_VALUE_EXPR_P if it has
      	error_mark_node type.
      	(cp_finish_omp_range_for): Don't set DECL_HAS_VALUE_EXPR_P back
      	on decls which have error_mark_node type.
      
      	* g++.dg/gomp/pr105839-1.C: New test.
      	* g++.dg/gomp/pr105839-2.C: New test.
      f0ef740d
    • Richard Biener's avatar
      testsuite/108985 - missing vect_simd_clones target requirement on test · a2926653
      Richard Biener authored
      Added.
      
      	PR testsuite/108985
      	* gcc.dg/vect/pr108950.c: Require vect_simd_clones.
      a2926653
    • Hans-Peter Nilsson's avatar
      testsuite: Fix g++.dg/ext/attr-copy-2.C for default_packed targets · 4ea6bfed
      Hans-Peter Nilsson authored
      For targets where the byte-wise structure element layout is
      the same as for attribute-packed, you get a warning when
      that's specified.  Thus, expect a warning for such targets.
      Note the exclusion of bitfields.
      
      	* g++.dg/ext/attr-copy-2.C: Fix for default_packed targets.
      4ea6bfed
    • Hans-Peter Nilsson's avatar
      testsuite: Fix gcc.dg/attr-copy-6.c for user-label-prefixed targets · b838a9f6
      Hans-Peter Nilsson authored
      This fixes:
       Running /x/gcc/testsuite/gcc.dg/dg.exp ...
       ...
       FAIL: gcc.dg/attr-copy-6.c (test for excess errors)
      for cris-elf, where gcc.log has:
      Excess errors:
      /x/gcc/testsuite/gcc.dg/attr-copy-6.c:91:3: error: 'fnoreturn_alias' aliased to undefined symbol 'fnoreturn_name'
      
      Asm-declared identifiers need to prepend __USER_LABEL_PREFIX__
      to the asm-name, something which is often overlooked because
      it's empty for most targets.  N.B: attribute-alias does not need
      the same treatment.  The identical construct added here, is in
      several tests.
      
      	* gcc.dg/attr-copy-6.c: Prefix asm-declared name with
      	__USER_LABEL_PREFIX__.
      b838a9f6
    • Hans-Peter Nilsson's avatar
      analyzer: Support errno for newlib · 8590e4d0
      Hans-Peter Nilsson authored
      Without this definition, the errno definition for newlib
      isn't recognized as such, and these tests fail for newlib
      targets:
      
      FAIL: gcc.dg/analyzer/call-summaries-errno.c  (test for warnings, line 16)
      FAIL: gcc.dg/analyzer/call-summaries-errno.c (test for excess errors)
      FAIL: gcc.dg/analyzer/errno-1.c  (test for warnings, line 20)
      FAIL: gcc.dg/analyzer/errno-1.c (test for excess errors)
      FAIL: gcc.dg/analyzer/flex-without-call-summaries.c (test for excess errors)
      FAIL: gcc.dg/analyzer/isatty-1.c  (test for warnings, line 31)
      FAIL: gcc.dg/analyzer/isatty-1.c  (test for warnings, line 35)
      FAIL: gcc.dg/analyzer/isatty-1.c  (test for warnings, line 46)
      FAIL: gcc.dg/analyzer/isatty-1.c  (test for warnings, line 56)
      FAIL: gcc.dg/analyzer/isatty-1.c (test for excess errors)
      
      gcc/analyzer:
      	* kf.cc (register_known_functions): Add __errno function for newlib.
      8590e4d0
    • Hans-Peter Nilsson's avatar
      testsuite: Handle "packed" targets in c-c++-common/auto-init-7.c and -8.c · 854a268d
      Hans-Peter Nilsson authored
      Looks like there's a failed assumption that
      sizeof (union U { char u1[5]; int u2; float u3; }) == 8.
      However, for "packed" targets like cris-elf, it's 5.
      
      These two tests have always failed for cris-elf.  I see from
      https://gcc.gnu.org/pipermail/gcc-testresults/2023-February/777912.html
      that they fail on pru-elf too, but I don't know if the cause
      (and/or remedy) is the same.
      
      IMHO this is preferred over the alternative; splitting up
      that last line into two lines, like:
      /* { dg-final { scan-tree-dump "temp4 = \
       .DEFERRED_INIT \\(8, 2, \&\"temp4\"" "gimple" { target { ! default_packed } } } } */
      /* { dg-final { scan-tree-dump "temp4 = \
       .DEFERRED_INIT \\(5, 2, \&\"temp4\"" "gimple" { target default_packed } } } */
      
      gcc/testsuite:
      	* c-c++-common/auto-init-7.c, c-c++-common/auto-init-8.c: Also
      	match targets where sizeof (union U) == 5, like "packed" targets.
      854a268d
    • GCC Administrator's avatar
      Daily bump. · c88a7c63
      GCC Administrator authored
      c88a7c63
  3. Mar 01, 2023
    • Marek Polacek's avatar
      c++: can't eval PTRMEM_CST in incomplete class [PR107574] · de81e062
      Marek Polacek authored
      Here we're attempting to evaluate a PTRMEM_CST in a class that hasn't
      been completed yet, but that doesn't work:
      
              /* We can't lower this until the class is complete.  */
              if (!COMPLETE_TYPE_P (DECL_CONTEXT (member)))
                return cst;
      
      and then this unlowered PTRMEM_CST is used as EXPR in
      
          tree op1 = build_nop (ptrdiff_type_node, expr);
      
      and we crash in a subsequent cp_fold_convert which gets type=ptrdiff_type_node,
      expr=PTRMEM_CST and does
      
        else if (TREE_CODE (expr) == PTRMEM_CST
                 && same_type_p (TYPE_PTRMEM_CLASS_TYPE (type),
                                 PTRMEM_CST_CLASS (expr)))
      
      where TYPE_PTRMEM_CLASS_TYPE (type) is going to crash since the type
      is ptrdiff_type_node.  We could just add a TYPE_PTRMEM_P check before
      accessing TYPE_PTRMEM_CLASS_TYPE but I think it's nicer to explain why
      we couldn't evaluate the expression.
      
      	PR c++/107574
      
      gcc/cp/ChangeLog:
      
      	* constexpr.cc (cxx_eval_constant_expression): Emit an error when
      	a PTRMEM_CST cannot be evaluated.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/ptrmem-cst1.C: New test.
      de81e062
    • Patrick Palka's avatar
      c++: streamline tf_qualifying_scope usage · a764d3df
      Patrick Palka authored
      This patch introduces a convenience wrapper tsubst_scope for tsubst'ing
      into a type with tf_qualifying_scope set, and makes suitable callers use
      it instead of explicitly setting tf_qualifying_scope.  This patch also
      makes tsubst_copy immediately delegate to tsubst for all type trees,
      which allows tsubst_copy to be oblivious to the tf_qualifying_scope flag.
      
      gcc/cp/ChangeLog:
      
      	* pt.cc (tsubst_scope): Define.
      	(tsubst_decl) <case USING_DECL>: Call tsubst_scope instead of
      	calling tsubst_scope with tf_qualifying_scope set.
      	(tsubst_qualified_id): Call tsubst_scope instead of
      	calling tsubst with tf_qualifying_scope set.
      	(tsubst_copy): Immediately delegate to tsubst for all TYPE_P
      	trees.  Remove tf_qualifying_scope manipulation.
      	<case SCOPE_REF>: Call tsubst_scope instead of calling
      	tsubst with tf_qualifying_scope set.
      a764d3df
    • David Malcolm's avatar
      analyzer: fixes to side-effects for built-in functions [PR107565] · 24ebc540
      David Malcolm authored
      
      Previously, if the analyzer saw a call to a non-pure and non-const
      built-in function that it didn't have explicit knowledge of the behavior
      of, it would fall back to assuming that the builtin could have arbitrary
      behavior, similar to a function defined outside of the current TU.
      
      However, this only worked for BUILTIN_NORMAL functions that matched
      gimple_builtin_call_types_compatible_p; for BUILT_IN_FRONTEND and
      BUILT_IN_MD, and for mismatched types the analyzer would erroneously
      assume that the builtin had no side-effects, leading e.g. to
      PR analyzer/107565, where the analyzer falsely reported that x
      was still uninitialized after this target-specific builtin:
      
        _1 = __builtin_ia32_rdrand64_step (&x);
      
      This patch generalizes the handling to cover all classes of builtin,
      fixing the above false positive.
      
      Unfortunately this patch regresses gcc.dg/analyzer/pr99716-1.c due to
      the:
        fprintf (fp, "hello");
      being optimized to:
         __builtin_fwrite ("hello", 1, (ssizetype)5, fp_6);
      and the latter has gimple_builtin_call_types_compatible_p return false,
      whereas the original call had it return true.  I'm assuming that this is
      an optimization bug, and have filed it as PR middle-end/108988.  The
      effect on the analyzer is that it fails to recognize the call to
      __builtin_fwrite and instead assumes arbitraty side-effects (including
      that it could call fclose on fp, hence the report about the leak goes
      away).
      
      I tried various more involved fixes with new heuristics for handling
      built-ins that aren't explicitly covered by the analyzer, but those
      fixes tended to introduce many more regressions, so I'm going with this
      simpler fix.
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/107565
      	* region-model.cc (region_model::on_call_pre): Flatten logic by
      	returning early.  Consolidate logic for detecting const and pure
      	functions.  When considering whether an unhandled built-in
      	function has side-effects, consider all kinds of builtin, rather
      	than just BUILT_IN_NORMAL, and don't require
      	gimple_builtin_call_types_compatible_p.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/107565
      	* gcc.dg/analyzer/builtins-pr107565.c: New test.
      	* gcc.dg/analyzer/pr99716-1.c (test_2): Mark the leak as xfailing.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      24ebc540
    • Jonathan Wakely's avatar
      libstdc++: Fix typo in comment in bits/cow_string.h · c54cae82
      Jonathan Wakely authored
      libstdc++-v3/ChangeLog:
      
      	* include/bits/cow_string.h: Fix typo in comment.
      c54cae82
    • Jonathan Wakely's avatar
      libstdc++: Make std::chrono::current_zone() default to UTC · 4abd5bc6
      Jonathan Wakely authored
      This is consistent with the behaviour of glibc, which assumes UTC when
      /etc/localtime and TZ do not identify a valid time zone. The fallback
      tzdb used when no valid tzdata exists always contains the UTC zone, so
      this change means we have a valid tzdb and valid current zone even in
      the degenerate case.
      
      With this default we no longer need the AIX-specific kluge to try and
      identify TZ values specifying a 0-offset zone. We can just use the UTC
      default for those, as it has the same effect.
      
      It's still possible for chrono::current_zone() to fail, because the user
      could have provided a custom tzdata.zi file which doesn't contain the
      UTC time zone, so the "UTC" default would fail to find a valid zone, and
      throw an exception. That's just user error, they should not provide bad
      data and expect reasonable behaviour.
      
      libstdc++-v3/ChangeLog:
      
      	* src/c++20/tzdb.cc (chrono::tzdb::current_zone()) Use "UTC" if
      	current time zone cannot be determined.
      	* testsuite/std/time/tzdb/1.cc: Remove conditions based on
      	HAVE_TZDB macro and test all members unconditionally.
      4abd5bc6
    • Patrick Palka's avatar
      c++: unevaluated array new-expr size constantness [PR108219] · 096f034a
      Patrick Palka authored
      
      Here we're mishandling the unevaluated array new-expressions due to a
      supposed non-constant array size ever since r12-5253-g4df7f8c79835d569
      made us no longer perform constant evaluation of non-manifestly-constant
      expressions within unevaluated contexts.  This shouldn't make a difference
      here since the array sizes are constant literals, except they're expressed
      as NON_LVALUE_EXPR location wrappers around INTEGER_CST, wrappers which
      used to get stripped as part of constant evaluation and now no longer do.
      Moreover it means build_vec_init can't constant fold the MINUS_EXPR
      'maxindex' passed from build_new_1 when in an unevaluated context (since
      it tries reducing it via maybe_constant_value called with mce_unknown).
      
      This patch fixes these issues by making maybe_constant_value (and
      fold_non_dependent_expr) try folding an unevaluated non-manifestly-constant
      operand via fold(), as long as it simplifies to a simple constant, rather
      than doing no simplification at all.  This covers e.g. simple arithmetic
      and casts including stripping of location wrappers around INTEGER_CST.
      
      In passing, this patch also fixes maybe_constant_value to avoid constant
      evaluating an unevaluated operand when called with mce_false, by adjusting
      the early exit test appropriately.
      
      Co-authored-by: default avatarJason Merrill <jason@redhat.com>
      
      	PR c++/108219
      	PR c++/108218
      
      gcc/cp/ChangeLog:
      
      	* constexpr.cc (fold_to_constant): Define.
      	(maybe_constant_value): Move up early exit test for unevaluated
      	operands.  Try reducing an unevaluated operand to a constant via
      	fold_to_constant.
      	(fold_non_dependent_expr_template): Add early exit test for
      	CONSTANT_CLASS_P nodes.  Try reducing an unevaluated operand
      	to a constant via fold_to_constant.
      	* cp-tree.h (fold_to_constant): Declare.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/new6.C: New test.
      	* g++.dg/cpp2a/concepts-new1.C: New test.
      096f034a
    • Tobias Burnus's avatar
      OpenMP: Ignore side-effects when finding struct comps [PR108545] · 3843dc14
      Tobias Burnus authored
      With volatile, two 'x.data' comp refs aren't regarded as identical,
      causing that the two items in the first map of
        map(to:x.a, x.a.data) map(pset: x.a.data)
      end up in separate 'map(struct:x)', which will cause a later ICE.
      
      Solution: Ignore side effects when checking the operands in the hash
      for being equal. (Do so by creating a variant of tree_operand_hash
      that calls operand_equal_p with OEP_MATCH_SIDE_EFFECTS.)
      
      gcc/ChangeLog:
      
      	PR middle-end/108545
      	* gimplify.cc (struct tree_operand_hash_no_se): New.
      	(omp_index_mapping_groups_1, omp_index_mapping_groups,
      	omp_reindex_mapping_groups, omp_mapped_by_containing_struct,
      	omp_tsort_mapping_groups_1, omp_tsort_mapping_groups,
      	oacc_resolve_clause_dependencies, omp_build_struct_sibling_lists,
      	gimplify_scan_omp_clauses): Use tree_operand_hash_no_se instead
      	of tree_operand_hash.
      
      gcc/testsuite/ChangeLog:
      
      	PR middle-end/108545
      	* c-c++-common/gomp/map-8.c: New test.
      	* gfortran.dg/gomp/map-9.f90: New test.
      3843dc14
    • David Malcolm's avatar
      analyzer: fix infinite recursion false +ves [PR108935] · 070523b9
      David Malcolm authored
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/108935
      	* infinite-recursion.cc (contains_unknown_p): New.
      	(sufficiently_different_region_binding_p): New function, splitting
      	out inner loop from...
      	(sufficiently_different_p): ...here.  Extend detection of unknown
      	svalues to also include svalues that contain unknown.  Treat
      	changes in frames below the entry to the recursion as being
      	sufficiently different to reject being an infinite recursion.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/108935
      	* gcc.dg/analyzer/infinite-recursion-pr108935-1.c: New test.
      	* gcc.dg/analyzer/infinite-recursion-pr108935-1a.c: New test.
      	* gcc.dg/analyzer/infinite-recursion-pr108935-2.c: New test.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      070523b9
    • LIU Hao's avatar
      gcc: Remove size limit of PCH for *-*-mingw32 hosts · f769d22a
      LIU Hao authored
      PCHs can now be relocated, so the size limit makes no sense any more.
      
      This patch was submited to MSYS2 9 months ago for GCC 12. No issue has been reported so far.
      
      Reference: https://github.com/msys2/MINGW-packages/blob/717d5a5a09e2370e3bd7e12b393a26dbfbe48921/mingw-w64-gcc/0010-Fix-using-large-PCH.patch
      
      
      Signed-off-by: default avatarLIU Hao <lh_mouse@126.com>
      
      gcc/ChangeLog:
      
      	PR pch/14940
      	* config/i386/host-mingw32.cc (mingw32_gt_pch_get_address):
      	Remove the size limit `pch_VA_max_size`
      
      Signed-off-by: default avatarJonathan Yong <10walls@gmail.com>
      f769d22a
    • Jonathan Yong's avatar
      harden-sls-6.c: Fix warning on LLP64 · 560f1db3
      Jonathan Yong authored
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/i386/harden-sls-6.c: Fix warning on LLP64
      	targets.
      
      Signed-off-by: default avatarJonathan Yong <10walls@gmail.com>
      560f1db3
    • Tobias Burnus's avatar
      OpenMP/Fortran: Fix handling of optional is_device_ptr + bind(C) [PR108546] · 96ff97ff
      Tobias Burnus authored
      For is_device_ptr, optional checks should only be done before calling
      libgomp, afterwards they are NULL either because of absent or, by
      chance, because it is unallocated or unassociated (for pointers/allocatables).
      
      Additionally, it fixes an issue with explicit mapping for 'type(c_ptr)'.
      
      	PR middle-end/108546
      
      gcc/fortran/ChangeLog:
      
      	* trans-openmp.cc (gfc_trans_omp_clauses): Fix mapping of
      	type(C_ptr) variables.
      
      gcc/ChangeLog:
      
      	* omp-low.cc (lower_omp_target): Remove optional handling
      	on the receiver side, i.e. inside target (data), for
      	use_device_ptr.
      
      libgomp/ChangeLog:
      
      	* testsuite/libgomp.fortran/is_device_ptr-3.f90: New test.
      	* testsuite/libgomp.fortran/use_device_ptr-optional-4.f90: New test.
      96ff97ff
Loading