Skip to content
Snippets Groups Projects
  1. Jun 28, 2021
    • Martin Sebor's avatar
      libcc1: Add support for per-location warning groups. · 3f448890
      Martin Sebor authored
      libcc1/ChangeLog:
      
      	* libcp1plugin.cc (record_decl_address): Replace a direct use
      	of TREE_NO_WARNING with suppress_warning.
      3f448890
    • Martin Sebor's avatar
      fortran: Add support for per-location warning groups. · d5e69948
      Martin Sebor authored
      gcc/fortran/ChangeLog:
      
      	* trans-array.c (trans_array_constructor): Replace direct uses
      	of TREE_NO_WARNING with warning_suppressed_p, and suppress_warning.
      	* trans-decl.c (gfc_build_qualified_array): Same.
      	(gfc_build_dummy_array_decl): Same.
      	(generate_local_decl): Same.
      	(gfc_generate_function_code): Same.
      	* trans-openmp.c (gfc_omp_clause_default_ctor): Same.
      	(gfc_omp_clause_copy_ctor): Same.
      	* trans-types.c (get_dtype_type_node): Same.
      	(gfc_get_desc_dim_type): Same.
      	(gfc_get_array_descriptor_base): Same.
      	(gfc_get_caf_vector_type): Same.
      	(gfc_get_caf_reference_type): Same.
      	* trans.c (gfc_create_var_np): Same.
      d5e69948
    • Martin Sebor's avatar
      ada: Add support for per-location warning groups. · 8c7dfbb8
      Martin Sebor authored
      gcc/ada/ChangeLog:
      
      	* gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu):
      	Replace TREE_NO_WARNING with suppress_warning.
      	(gnat_gimplify_expr): Same.
      	* gcc-interface/utils.c (gnat_pushdecl): Same.
      8c7dfbb8
    • Ian Lance Taylor's avatar
      libbacktrace: improve XCOFF support · 42ff474e
      Ian Lance Taylor authored
      libbacktrace/ChangeLog:
      2021-06-28  Clément Chigot  <clement.chigot@atos.net>
      
      	* xcoff.c (SSUBTYP_DWRNGES): New define.
      	(xcoff_add): Use correct XCOFF DWARF section subtype
      	for DEBUG_RANGES. Remove lineoff workaround.
      	Adjust base_address.
      	(xcoff_initialize_syminfo): Adapt to new base_address.
      	(xcoff_lookup_pc): Likewise.
      	(xcoff_initialize_fileline): Likewise.
      42ff474e
    • Indu Bhagat's avatar
      libiberty: copy over .BTF section when using LTO · 9c93f6cc
      Indu Bhagat authored
      libiberty/ChangeLog:
      
      	* simple-object.c (handle_lto_debug_sections): Copy over .BTF section.
      9c93f6cc
    • Indu Bhagat's avatar
      Enable BTF generation in the BPF backend · d5cf2b5d
      Indu Bhagat authored
      This patch changes the BPF GCC backend in order to use the DWARF debug
      hooks and therefore enables the user to generate BTF debugging
      information with -gbtf.  Generating BTF is crucial when compiling BPF
      programs, since the CO-RE (compile-once, run-everwhere) mechanism
      used by the kernel BPF loader relies on it.
      
      Note that since in eBPF it is not possible to unwind frames due to the
      restrictive nature of the target architecture, we are disabling the
      generation of CFA in this target.
      
      2021-06-28  David Faust <david.faust@oracle.com>
      
      	* config/bpf/bpf.c (bpf_expand_prologue): Do not mark insns as
      	frame related.
      	(bpf_expand_epilogue): Likewise.
      	* config/bpf/bpf.h (DWARF2_FRAME_INFO): Define to 0.
      	Do not define DBX_DEBUGGING_INFO.
      d5cf2b5d
    • Indu Bhagat's avatar
      CTF/BTF documentation · 824a6a52
      Indu Bhagat authored
      This commit documents the new command line options introduced by the
      CTF and BTF debug formats.
      
      2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>
      
      	* doc/invoke.texi: Document the CTF and BTF debug info options.
      824a6a52
    • Indu Bhagat's avatar
      CTF/BTF testsuites · c1f76af4
      Indu Bhagat authored
      This commit adds a new testsuite for the CTF debug format.
      
      2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>
      	    David Faust  <david.faust@oracle.com>
      
      gcc/testsuite/
      
      	* lib/gcc-dg.exp (gcc-dg-frontend-supports-ctf): New procedure.
      	(gcc-dg-debug-runtest): Add -gctf support.
      	* gcc.dg/debug/btf/btf-1.c: New test.
      	* gcc.dg/debug/btf/btf-2.c: Likewise.
      	* gcc.dg/debug/btf/btf-anonymous-struct-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-anonymous-union-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-array-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-bitfields-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-bitfields-2.c: Likewise.
      	* gcc.dg/debug/btf/btf-bitfields-3.c: Likewise.
      	* gcc.dg/debug/btf/btf-cvr-quals-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-enum-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-forward-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-function-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-function-2.c: Likewise.
      	* gcc.dg/debug/btf/btf-int-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-pointers-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-struct-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-typedef-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-union-1.c: Likewise.
      	* gcc.dg/debug/btf/btf-variables-1.c: Likewise.
      	* gcc.dg/debug/btf/btf.exp: Likewise.
      	* gcc.dg/debug/ctf/ctf-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-anonymous-struct-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-anonymous-union-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-array-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-array-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-array-3.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-array-4.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-attr-mode-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-attr-used-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-bitfields-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-bitfields-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-bitfields-3.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-bitfields-4.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-complex-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-cvr-quals-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-cvr-quals-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-cvr-quals-3.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-cvr-quals-4.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-enum-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-enum-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-file-scope-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-float-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-forward-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-forward-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-func-index-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-function-pointers-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-function-pointers-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-function-pointers-3.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-functions-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-int-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-objt-index-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-pointers-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-pointers-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-preamble-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-skip-types-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-skip-types-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-skip-types-3.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-skip-types-4.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-skip-types-5.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-skip-types-6.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-str-table-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-struct-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-struct-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-struct-array-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-struct-pointer-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-struct-pointer-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-typedef-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-typedef-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-typedef-3.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-typedef-struct-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-typedef-struct-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-typedef-struct-3.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-union-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-variables-1.c: Likewise.
      	* gcc.dg/debug/ctf/ctf-variables-2.c: Likewise.
      	* gcc.dg/debug/ctf/ctf.exp: Likewise.
      c1f76af4
    • Indu Bhagat's avatar
      CTF/BTF debug formats · b7e215a8
      Indu Bhagat authored
      This commit introduces support for generating CTF debugging
      information and BTF debugging information from GCC.
      
      2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>
      	    David Faust  <david.faust@oracle.com>
      	    Jose E. Marchesi  <jose.marchesi@oracle.com>
      	    Weimin Pan  <weimin.pan@oracle.com>
      
      gcc/
      
      	* Makefile.in: Add ctfc.*, ctfout.c and btfout.c files to
      	GTFILES.  Add new object files.
      	* common.opt: Add CTF and BTF debug info options.
      	* btfout.c: New file.
      	* ctfc.c: Likewise.
      	* ctfc.h: Likewise.
      	* ctfout.c: Likewise.
      	* dwarf2ctf.c: Likewise.
      	* dwarf2ctf.h: Likewise.
      	* dwarf2cfi.c (dwarf2out_do_frame): Acknowledge CTF_DEBUG and
      	BTF_DEBUG.
      	* dwarf2out.c (dwarf2out_source_line): Likewise.
      	(dwarf2out_finish): Skip emitting DWARF if CTF or BTF are to
      	be generated.
      	(debug_format_do_cu): New function.
      	(dwarf2out_early_finish): Traverse DIEs and emit CTF/BTF for
      	them if	requested.
      	Include dwarf2ctf.c.
      	* final.c (dwarf2_debug_info_emitted_p): Acknowledge DWARF-based debug
      	formats.
      	* flag-types.h (enum debug_info_type): Add CTF_DEBUG and BTF_DEBUG.
      	(CTF_DEBUG): New bitmask.
      	(BTF_DEBUG): Likewise.
      	(enum ctf_debug_info_levels): New enum.
      	* gengtype.c (open_base_files): Handle ctfc.h.
      	(main): Handle uint32_t type.
      	* flags.h (btf_debuginfo_p): New definition.
      	(dwarf_based_debuginfo_p): Likewise.
      	* opts.c (debug_type_names): Add entries for CTF and BTF.
      	(btf_debuginfo_p): New function.
      	(dwarf_based_debuginfo_p): Likewise.
      	(common_handle_option): Handle -gctfN and -gbtf options.
      	(set_debug_level): Set CTF_DEBUG, BTF_DEBUG whenever appropriate.
      	* toplev.c (process_options): Inform the user and ignore -gctfLEVEL if
      	frontend is not C.
      
      include/
      
      	* ctf.h: New file.
      	* btf.h: Likewise.
      
      libiberty/
      
      	* simple-object.c (handle_lto_debug_sections): Copy over .ctf
      	sections.
      b7e215a8
    • Indu Bhagat's avatar
      dejagnu: modularize gcc-dg-debug-runtest a bit · 532617d6
      Indu Bhagat authored
      Move some functionality into a procedure of its own. This is only so that when
      the patch for ctf comes along, the gcc-dg-debug-runtest procedure looks bit
      more uniform.
      
      gcc/testsuite/ChangeLog:
      
      	* lib/gcc-dg.exp (gcc-dg-target-supports-debug-format): New procedure.
      532617d6
    • Indu Bhagat's avatar
      dwarf: externalize some DWARF internals for needs of CTF/BTF · 5783a0cc
      Indu Bhagat authored
      This patch externalizes some internal DIE structures and their attributes
      for the use of DWARF-based debug formats like CTF and BTF.
      
      The following functions which were previously defined as static in
      dwarf2out.c are now non-static, and extern prototypes for them have
      been added to dwarf2out.h:
      
      - get_AT
      - AT_int
      - AT_class
      - AT_loc
      - get_AT_ref
      - get_AT_string
      - get_AT_class
      - AT_unsigned
      - get_AT_unsigned
      - get_AT_flag
      - add_name_attribute
      - new_die_raw
      - base_type_die
      - lookup_decl_die
      - get_AT_file
      
      Note how this patch doens't change the names of these functions to
      avoid a massive renaming in dwarf2out.c, but in the future we probably
      want these functions to sport a dw_* prefix.
      
      Also, some type definitions have been moved from dwarf2out.c to
      dwarf2out.h:
      
      - dw_attr_node
      - struct dwarf_file_data
      
      Finally, three new accessor functions have been added to dwarf2out.c
      with prototypes in dwarf2out.h:
      
      - dw_get_die_child
      - dw_get_die_sib
      - dw_get_die_tag
      
      2021-06-28  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* dwarf2out.c (AT_class): Function is no longer static.
      	(AT_int): Likewise.
      	(AT_unsigned): Likewise.
      	(AT_loc): Likewise.
      	(get_AT): Likewise.
      	(get_AT_string): Likewise.
      	(get_AT_flag): Likewise.
      	(get_AT_unsigned): Likewise.
      	(get_AT_ref): Likewise.
      	(new_die_raw): Likewise.
      	(lookup_decl_die): Likewise.
      	(base_type_die): Likewise.
      	(add_name_attribute): Likewise.
      	(add_AT_int): Likewise.
      	(add_AT_unsigned): Likewise.
      	(add_AT_loc): Likewise.
      	(dw_get_die_tag): New function.
      	(dw_get_die_child): Likewise.
      	(dw_get_die_sib): Likewise.
      	(struct dwarf_file_data): Move from here to dwarf2out.h
      	(struct dw_attr_struct): Likewise.
      	* dwarf2out.h: Analogous changes.
      5783a0cc
    • Martin Jambor's avatar
      ipa-sra: Introduce a mini-DCE to tree-inline.c (PR 93385) · 2902991a
      Martin Jambor authored
      I was asked by Richi to split my fix for PR 93385 for easier review
      into IPA-SRA materialization refactoring and the actual DCE addition.
      This is the second part that actually contains the DCE of statements
      that IPA-SRA should not leave behind because they can have problematic
      side effects, even if they are useless, so that we do not depend on
      tree-dce to remove them for correctness.
      
      The patch fixes the problem by doing a def-use walk when materializing
      clones, marking which statements should not be copied and which
      SSA_NAMEs do not need to be computed because eventually they would be
      DCEd.  We do this on the original function body and tree-inline simply
      does not copy statements which are "dead."
      
      The only complication is removing dead argument calls because that
      needs to be communicated to callee redirection code using the
      infrastructure introduced by the previous patch.
      
      I added all testcases of the original patch to this one, although some
      probably test behavior introduced in the previous patch.
      
      gcc/ChangeLog:
      
      2021-05-12  Martin Jambor  <mjambor@suse.cz>
      
      	PR ipa/93385
      	* ipa-param-manipulation.h (class ipa_param_body_adjustments): New
      	members m_dead_stmts and m_dead_ssas.
      	* ipa-param-manipulation.c
      	(ipa_param_body_adjustments::mark_dead_statements): New function.
      	(ipa_param_body_adjustments::common_initialization): Call it on
      	all removed but not split parameters.
      	(ipa_param_body_adjustments::ipa_param_body_adjustments): Initialize
      	new mwmbers.
      	(ipa_param_body_adjustments::modify_call_stmt): Remove arguments that
      	are dead.
      	* tree-inline.c (remap_gimple_stmt): Do not copy dead statements, reset
      	dead debug statements.
      	(copy_phis_for_bb): Do not copy dead PHI nodes.
      
      gcc/testsuite/ChangeLog:
      
      2021-03-22  Martin Jambor  <mjambor@suse.cz>
      
      	PR ipa/93385
      	* gcc.dg/ipa/pr93385.c: New test.
      	* gcc.dg/ipa/ipa-sra-23.c: Likewise.
      	* gcc.dg/ipa/ipa-sra-24.c: Likewise.
      	* g++.dg/ipa/ipa-sra-4.C: Likewise.
      Unverified
      2902991a
    • Martin Jambor's avatar
      ipa-sra: Restructure how cloning and call redirection communicate (PR 93385) · 87467f45
      Martin Jambor authored
      I was asked by Richi to split my fix for PR 93385 for easier review
      into IPA-SRA materialization refactoring and the actual DCE addition.
      Fortunately it was mostly natural except for a temporary weird
      condition in ipa_param_body_adjustments::modify_call_stmt.
      Additionally.  In addition to the patch I posted previously, this one
      also deallocated the newly added summary in toplev::finalize and fixes
      a mistakenly uninitialized field.
      
      This is the first part which basically replaces performed_splits in
      clone_info and the code which generates it, keeps it up-to-date and
      consumes it with new edge summaries which are much nicer.  It simply
      contains 1) a mapping from the original argument indices to the actual
      indices in the call statement as it is now, 2) information needed to
      identify arguments representing pass-through IPA-SRA splits with which
      have been added to the call arguments in place of an original
      argument/reference and 3) a delta to the index where va_args may start
      - so basically directly all the information that the consumer of
      performed_splits had to compute and we also do not need the weird
      dummy declarations.
      
      The main disadvantage is that the information has to be created (and
      kept up-to-date) for all call graph edges associated with the given
      statement from all clones (including inline clones) of the clone where
      splitting or removal happened first.  But all of this happens during
      clone materialization so the only effect on WPA memory consumption is
      the removal of a pointer from clone_info.
      
      The statement modification code also has to know the statement from
      the original function in order to be able to locate the edge summaries
      which at this point are still keyed to these.  However, the code is
      already quite heavily dependant on how things are structured in
      tree-inline.c and in order to fix bugs like these it probably has to
      be.
      
      The subsequent patch needs this new information to be able to remove
      arguments from calls during materialization and communicate this
      information to the call redirection.
      
      gcc/ChangeLog:
      
      2021-05-17  Martin Jambor  <mjambor@suse.cz>
      
      	PR ipa/93385
      	* symtab-clones.h (clone_info): Removed member param_adjustments.
      	* ipa-param-manipulation.h: Adjust initial comment to reflect how we
      	deal with pass-through splits now.
      	(ipa_param_performed_split): Removed.
      	(ipa_param_adjustments::modify_call): Adjusted parameters.
      	(class ipa_param_body_adjustments): Adjusted parameters of
      	register_replacement, modify_gimple_stmt and modify_call_stmt.
      	(ipa_verify_edge_has_no_modifications): Declare.
      	(ipa_edge_modifications_finalize): Declare.
      	* cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Remove
      	performed_splits processing, pas only edge to padjs->modify_call,
      	check that call arguments were not modified if they should not have
      	been.
      	* cgraphclones.c (cgraph_node::create_clone): Do not copy performed
      	splits.
      	* ipa-param-manipulation.c (struct pass_through_split_map): New type.
      	(ipa_edge_modification_info): Likewise.
      	(ipa_edge_modification_sum): Likewise.
      	(ipa_edge_modifications): New edge summary.
      	(ipa_verify_edge_has_no_modifications): New function.
      	(transitive_split_p): Removed.
      	(transitive_split_map): Likewise.
      	(init_transitive_splits): Likewise.
      	(ipa_param_adjustments::modify_call): Adjusted to use the new edge
      	summary instead of performed_splits.
      	(ipa_param_body_adjustments::register_replacement): Drop dummy
      	parameter, set base_index of the created ipa_param_body_replacement.
      	(phi_arg_will_live_p): New function.
      	(ipa_param_body_adjustments::common_initialization): Do not create
      	IPA_SRA dummy decls.
      	(simple_tree_swap_info): Removed.
      	(remap_split_decl_to_dummy): Likewise.
      	(record_argument_state_1): New function.
      	(record_argument_state): Likewise.
      	(ipa_param_body_adjustments::modify_call_stmt): New parameter
      	orig_stmt.  Do not work with dummy decls, save necessary info about
      	changes to ipa_edge_modifications.
      	(ipa_param_body_adjustments::modify_gimple_stmt): New parameter
      	orig_stmt, pass it to modify_call_stmt.
      	(ipa_param_body_adjustments::modify_cfun_body): Adjust call to
      	modify_gimple_stmt.
      	(ipa_edge_modifications_finalize): New function.
      	* tree-inline.c (remap_gimple_stmt): Pass original statement to
      	modify_gimple_stmt.
      	(copy_phis_for_bb): Do not copy dead PHI nodes.
      	(expand_call_inline): Do not remap performed_splits.
      	(update_clone_info): Likewise.
      	* toplev.c: Include ipa-param-manipulation.h.
      	(toplev::finalize): Call ipa_edge_modifications_finalize.
      Unverified
      87467f45
    • Jonathan Wakely's avatar
      libstdc++: Remove redundant explicit instantiations · 084635aa
      Jonathan Wakely authored
      These function templates are explicitly specialized for char and wchar_t
      streambufs, so the explicit instantiations do nothing. Remove them, to
      avoid confusion.
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/streambuf.tcc (__copy_streambufs_eof): Remove
      	explicit instantiation declarations.
      	* src/c++11/streambuf-inst.cc (__copy_streambufs_eof): Remove
      	explicit instantiation definitions.
      084635aa
    • Jonathan Wakely's avatar
      libstdc++: Fix backwards logic in 17_intro/names.cc test [PR 97088] · 75f948f0
      Jonathan Wakely authored
      I meant to undef the names that clash with newlib headers for newlib,
      but I only undef'd them for non-newlib targets. This means they still
      cause errors for newlib, and aren't tested for other targets.
      
      This fixes the test to check those names for non-newlib targets, and to
      undef them to avoid errors for newlib.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/97088
      	* testsuite/17_intro/names.cc: Fix #if condition for names used
      	by newlib headers.
      75f948f0
    • Jonathan Wakely's avatar
      libstdc++: Allow unique_ptr<Incomplete[]>::operator[] [PR 101236] · b7a89c04
      Jonathan Wakely authored
      PR libstdc++/101236 shows that LLVM depends on being able to use
      unique_ptr<T[]>::operator[] when T is incomplete. This is undefined, but
      previously worked with libstdc++. When I added the conditional noexcept
      to that operator we started to diagnose the incomplete type.
      
      This change restores support for that case, by making the noexcept
      condition check that the type is complete before checking whether
      indexing on the pointer can throw.  A workaround for PR c++/101239 is
      needed to avoid a bogus error where G++ fails to do SFINAE on the
      ill-formed p[n] expression and gets an ICE. Instead of checking that the
      p[n] expression is valid in the trailing-return-type, we only check that
      the element_type is complete.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/101236
      	* include/bits/unique_ptr.h (unique_ptr<T[], D>::operator[]):
      	Fail gracefully if element_type is incomplete.
      	* testsuite/20_util/unique_ptr/cons/incomplete.cc: Clarify that
      	the standard doesn't require this test to work for array types.
      	* testsuite/20_util/unique_ptr/lwg2762.cc: Check that incomplete
      	types can be used with array specialization.
      	* testsuite/20_util/unique_ptr/101236.cc: New test.
      b7a89c04
    • Jonathan Wakely's avatar
      libstdc++: Implement LWG 415 for std::ws · e5c422b7
      Jonathan Wakely authored
      For C++11 std::ws changed to be an unformatted input function, meaning
      it constructs a sentry and sets badbit on exceptions.
      
      libstdc++-v3/ChangeLog:
      
      	* doc/xml/manual/intro.xml: Document LWG 415 change.
      	* doc/html/manual/bugs.html: Regenerate.
      	* include/bits/istream.tcc (ws): Create sentry and catch
      	exceptions.
      	* testsuite/27_io/basic_istream/ws/char/lwg415.cc: New test.
      	* testsuite/27_io/basic_istream/ws/wchar_t/lwg415.cc: New test.
      e5c422b7
    • Martin Liska's avatar
      mklog: Handle correctly long lines. · b838641b
      Martin Liska authored
      contrib/ChangeLog:
      
      	* mklog.py: Handle correctly long lines.
      	* test_mklog.py: Test it.
      b838641b
    • Andrew Pinski's avatar
      Duplicate the range information of the phi onto the new ssa_name · 9fe9c45a
      Andrew Pinski authored
      Since match_simplify_replacement uses gimple_simplify, there is a new
      ssa name created sometimes and then we go and replace the phi edge with
      this new ssa name, the range information on the phi is lost.
      Placing this in replace_phi_edge_with_variable is the best option instead
      of doing it in each time replace_phi_edge_with_variable is called which is
      what is done today.
      
      OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
      
      gcc/ChangeLog:
      
      	* tree-ssa-phiopt.c (replace_phi_edge_with_variable): Duplicate range
      	info if we're the only things setting the target PHI.
      	(value_replacement): Don't duplicate range here.
      	(minmax_replacement): Likewise.
      9fe9c45a
    • Richard Biener's avatar
      tree-optimization/101229 - fix vectorizer SLP hybrid detection with PHIs · f80c4eac
      Richard Biener authored
      This fixes the missing handling of PHIs in gimple_walk_op which causes
      the new vectorizer SLP hybrid detection scheme to fail.
      
      2021-06-28  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/101229
      	* gimple-walk.c (gimple_walk_op): Handle PHIs.
      
      	* gcc.dg/torture/pr101229.c: New testcase.
      f80c4eac
    • Martin Liska's avatar
      v850: silent 2 warnings · ad26c076
      Martin Liska authored
      Silents:
      
      /home/marxin/Programming/gcc/gcc/config/v850/v850.c: In function ‘char* construct_dispose_instruction(rtx)’:
      /home/marxin/Programming/gcc/gcc/config/v850/v850.c:2690:22: warning: ‘%s’ directive writing up to 99 bytes into a region of size between 79 and 89 [-Wformat-overflow=]
       2690 |       sprintf (buff, "dispose %d {%s}, r31", stack_bytes / 4, regs);
            |                      ^~~~~~~~~~~~~~~~~~~~~~                   ~~~~
      /home/marxin/Programming/gcc/gcc/config/v850/v850.c:2690:15: note: ‘sprintf’ output between 18 and 127 bytes into a destination of size 100
       2690 |       sprintf (buff, "dispose %d {%s}, r31", stack_bytes / 4, regs);
            |       ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      /home/marxin/Programming/gcc/gcc/config/v850/v850.c: In function ‘char* construct_prepare_instruction(rtx)’:
      /home/marxin/Programming/gcc/gcc/config/v850/v850.c:2814:22: warning: ‘%s’ directive writing up to 99 bytes into a region of size 91 [-Wformat-overflow=]
       2814 |       sprintf (buff, "prepare {%s}, %d", regs, (- stack_bytes) / 4);
            |                      ^~~~~~~~~~~~~~~~~~  ~~~~
      /home/marxin/Programming/gcc/gcc/config/v850/v850.c:2814:15: note: ‘sprintf’ output between 14 and 123 bytes into a destination of size 100
       2814 |       sprintf (buff, "prepare {%s}, %d", regs, (- stack_bytes) / 4);
            |       ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      gcc/ChangeLog:
      
      	* config/v850/v850.c (construct_dispose_instruction): Allocate
      	a bigger buffer.
      	(construct_prepare_instruction): Likewise.
      ad26c076
    • Martin Liska's avatar
      v850: add v850_can_inline_p target hook · 22069036
      Martin Liska authored
      gcc/ChangeLog:
      
      	* config/v850/v850.c (v850_option_override): Build default
      	target node.
      	(v850_can_inline_p): New.  Allow MASK_PROLOG_FUNCTION to be
      	ignored for inlining.
      	(TARGET_CAN_INLINE_P): New.
      22069036
    • Richard Biener's avatar
      tree-optimization/101207 - fix BB reduc permute elide with life stmts · 2ad71efb
      Richard Biener authored
      This fixes breakage of live lane extracts from permuted loads we elide
      from BB reduction vectorization by handling the un-permuting the same
      as in the regular eliding code - apply the reverse permute to
      both the scalar stmts and the load permutation.
      
      2021-06-28  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/101207
      	* tree-vect-slp.c (vect_optimize_slp): Do BB reduction
      	permute eliding for load permutations properly.
      
      	* gcc.dg/vect/bb-slp-pr101207.c: New testcase.
      2ad71efb
    • Richard Biener's avatar
      tree-optimization/101173 - fix interchange dependence checking · 0ad9d88a
      Richard Biener authored
      This adjusts the loop interchange dependence checking to disallow
      an outer loop dependence distance of zero.
      
      2021-06-23  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/101173
      	* gimple-loop-interchange.cc
      	(tree_loop_interchange::valid_data_dependences): Disallow outer
      	loop dependence distance of zero.
      
      	* gcc.dg/torture/pr101173.c: New testcase.
      0ad9d88a
    • liuhongt's avatar
      For 128/256-bit vec_cond_expr, When mask operands is lt reg const0_rtx, blendv... · 3f1a08d9
      liuhongt authored
      For 128/256-bit vec_cond_expr, When mask operands is lt reg const0_rtx, blendv can be used instead of avx512 mask.
      
      gcc/ChangeLog:
      
      	PR target/100648
      	* config/i386/sse.md (*avx_cmp<mode>3_lt): New
      	define_insn_and_split.
      	(*avx_cmp<mode>3_ltint): Ditto.
      	(*avx2_pcmp<mode>3_3): Ditto.
      	(*avx2_pcmp<mode>3_4): Ditto.
      	(*avx2_pcmp<mode>3_5): Ditto.
      
      gcc/testsuite/ChangeLog:
      
      	PR target/100648
      	* g++.target/i386/avx2-pr54700-2.C: Adjust testcase.
      	* g++.target/i386/avx512vl-pr54700-1a.C: New test.
      	* g++.target/i386/avx512vl-pr54700-1b.C: New test.
      	* g++.target/i386/avx512vl-pr54700-2a.C: New test.
      	* g++.target/i386/avx512vl-pr54700-2b.C: New test.
      	* gcc.target/i386/avx512vl-pr100648.c: New test.
      	* gcc.target/i386/avx512vl-blendv-1.c: New test.
      	* gcc.target/i386/avx512vl-blendv-2.c: New test.
      3f1a08d9
    • liuhongt's avatar
      Fold blendv builtins into gimple. · 28560c6d
      liuhongt authored
      Fold __builtin_ia32_pblendvb128 (a, b, c) as VEC_COND_EXPR (c < 0, b,
      a), similar for float version but with mask operand VIEW_CONVERT_EXPR
      to same sized integer vectype.
      
      gcc/ChangeLog:
      
      	* config/i386/i386-builtin.def (IX86_BUILTIN_BLENDVPD256,
      	IX86_BUILTIN_BLENDVPS256, IX86_BUILTIN_PBLENDVB256,
      	IX86_BUILTIN_BLENDVPD, IX86_BUILTIN_BLENDVPS,
      	IX86_BUILTIN_PBLENDVB128): Replace icode with
      	CODE_FOR_nothing.
      	* config/i386/i386.c (ix86_gimple_fold_builtin): Fold blendv
      	builtins.
      	* config/i386/sse.md (*<sse4_1_avx2>_pblendvb_lt_subreg_not):
      	New pre_reload splitter.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/i386/funcspec-8.c: Replace
      	__builtin_ia32_blendvpd with  __builtin_ia32_roundps_az.
      	* gcc.target/i386/blendv-1.c: New test.
      	* gcc.target/i386/blendv-2.c: New test.
      28560c6d
    • GCC Administrator's avatar
      Daily bump. · a766c79f
      GCC Administrator authored
      a766c79f
  2. Jun 27, 2021
    • Andrew Pinski's avatar
      Fix PR 101230: ICE in fold_cond_expr_with_comparison · 37ad257c
      Andrew Pinski authored
      This fixes PR 101230 where I had messed up and forgot that
      invert_tree_comparison can return ERROR_MARK if the comparsion
      is not invertable (floating point types).
      
      Committed as obvious after a bootstrap/test on x86_64-linux-gnu-gnu
      
      gcc/ChangeLog:
      
      	PR middle-end/101230
      	* fold-const.c (fold_ternary_loc): Check
      	the return value of invert_tree_comparison.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/torture/pr101230-1.c: New test.
      37ad257c
    • David Edelsohn's avatar
      aix: Add AIX 7.3 configuration and SPDX License Identifiers. · 39667263
      David Edelsohn authored
      	The anticipated release of AIX 7.3 has been announced.  This
      	patch adds the configuration bits based on AIX 7.2 configuration.
      
      gcc/ChangeLog:
      
      	* config.gcc: Add SPDX License Identifier.
      	(powerpc-ibm-aix789): Default to aix73.h.
      	(powerpc-ibm-aix7.2.*.*): New stanza.
      	* config/rs6000/aix72.h: Add SPDX License Identifier.
      	* config/rs6000/aix73.h: New file.
      39667263
    • GCC Administrator's avatar
      Daily bump. · 461f937b
      GCC Administrator authored
      461f937b
  3. Jun 26, 2021
    • Patrick Palka's avatar
      c++: access scope during partial spec matching [PR96204] · 9f26e34a
      Patrick Palka authored
      Here, when determining whether the partial specialization matches
      has_type_member<Child>, we do so from the scope of where the template-id
      appears rather than from the scope of the specialization, and this
      causes us to select the partial specialization (since Child::type is
      accessible from Parent).  When we later instantiate this partial
      specialization, we've entered the scope of the specialization and so
      substitution into e.g. the DECL_CONTEXT of has_type_member::value fails
      with access errors since the friend declaration that we relied on to
      choose the partial specialization no longer applies.
      
      It seems the appropriate access scope from which to perform partial
      specialization matching is the specialization itself (similar to how
      we check access of base-clauses), which is what this patch implements.
      
      	PR c++/96204
      
      gcc/cp/ChangeLog:
      
      	* pt.c (instantiate_class_template_1): Enter the scope of the
      	type when calling most_specialized_partial_spec.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/template/access40.C: New test.
      	* g++.dg/template/access40a.C: New test.
      9f26e34a
    • Jason Merrill's avatar
      except: remove dwarf2out.h dependency · 5b1ce655
      Jason Merrill authored
      When thinking about the CTF debug patchset dwarf2out.h split, I noticed that
      except.c only needs macros from dwarf2.h, nothing from dwarf2out.h.
      
      gcc/ChangeLog:
      
      	* except.c: #include "dwarf2.h" instead of "dwarf2out.h".
      5b1ce655
    • Jason Merrill's avatar
      c++: constexpr aggr init of empty class [PR101040] · 2168bfb8
      Jason Merrill authored
      This is basically the aggregate initializer version of PR97566; as in that
      bug, we are trying to initialize empty field 'obj' in 'single' when there's
      no CONSTRUCTOR entry for the 'single' base class subobject of 'derived'.  As
      with that bug, the fix is to stop trying to add entries for empty fields,
      this time in cxx_eval_bare_aggregate.
      
      The change to the other function isn't necessary for this version of
      the patch, but seems worthwhile for robustness anyway.
      
      	PR c++/101040
      	PR c++/97566
      
      gcc/cp/ChangeLog:
      
      	* class.c (is_empty_field): Handle null argument.
      	* constexpr.c (cxx_eval_bare_aggregate): Discard initializer
      	for empty field.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp2a/no_unique_address13.C: New test.
      2168bfb8
    • Andrew Pinski's avatar
      Lower for loops before lowering cond in genmatch · 2afe8828
      Andrew Pinski authored
      While converting some fold_cond_expr_with_comparison
      to match, I found that I wanted to use "for cnd (cond vec_cond)"
      but that was not causing the lowering of cond to happen.
      What was happening was the lowering of the for loop
      was happening after the lowering of the cond. So
      swapping was the correct thing to do but it also
      means we need to copy for_subst_vec in lower_cond.
      
      OK?  Bootstrapped and tested on x86_64-linux-gnu with no regressions.
      
      gcc/ChangeLog:
      
      	* genmatch.c (lower_cond): Copy for_subst_vec
      	for the simplify also.
      	(lower): Swap the order for lower_for and lower_cond.
      2afe8828
    • Andrew Pinski's avatar
      Reset the range info on the moved instruction in PHIOPT · fbad6c62
      Andrew Pinski authored
      I had missed this when wrote the patch which allowed the
      gimple to be moved from inside the conditional as it.  It
      was also missed in the review.  Anyways the range information
      needs to be reset for the moved gimple as it was under a
      conditional and the flow has changed to be unconditional.
      I have not seen any testcase in the wild that produces wrong code
      yet which is why there is no testcase but this is similar to what
      the other code in phiopt does so after moving those to match, there
      might be some.
      
      OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
      
      gcc/ChangeLog:
      
      	* tree-ssa-phiopt.c (match_simplify_replacement): Reset
      	flow senatitive info on the moved ssa set.
      fbad6c62
    • Andrew Pinski's avatar
      Expand the comparison argument of fold_cond_expr_with_comparison · 86fc076d
      Andrew Pinski authored
      To make things slightly easiler to convert fold_cond_expr_with_comparison
      over to match.pd, expanding the arg0 argument into 3 different arguments
      is done. Also this was simple because we don't use arg0 after grabbing
      the code and the two operands.
      Also since we do this, we don't need to fold the comparison to
      get the inverse but just use invert_tree_comparison directly.
      
      OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
      
      gcc/ChangeLog:
      
      	* fold-const.c (fold_cond_expr_with_comparison):
      	Exand arg0 into comp_code, arg00, and arg01.
      	(fold_ternary_loc): Use invert_tree_comparison
      	instead of fold_invert_truthvalue for the case
      	where we have A CMP B ? C : A.
      86fc076d
    • GCC Administrator's avatar
      Daily bump. · 90708f87
      GCC Administrator authored
      90708f87
    • Marek Polacek's avatar
      c++: Failure to delay noexcept parsing with ptr-operator [PR100752] · f9c80eb1
      Marek Polacek authored
      We weren't passing 'flags' to the recursive call to cp_parser_declarator
      in the ptr-operator case and as an effect, delayed parsing of noexcept
      didn't work as advertised.  The following change passes more than just
      CP_PARSER_FLAGS_DELAY_NOEXCEPT but that doesn't seem to break anything.
      
      I'm now also passing member_p and static_p, as a consequence, two tests
      needed small tweaks.
      
      	PR c++/100752
      
      gcc/cp/ChangeLog:
      
      	* parser.c (cp_parser_declarator): Pass flags down to
      	cp_parser_declarator.  Also pass static_p/member_p.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/noexcept69.C: New test.
      	* g++.dg/parse/saved1.C: Adjust dg-error.
      	* g++.dg/template/crash50.C: Likewise.
      f9c80eb1
  4. Jun 25, 2021
    • David Malcolm's avatar
      jit: fix test-vector-* failures · 99585d88
      David Malcolm authored
      
      Fix failures seen on i686 due to relying on exact floating-point
      equality when testing results of vector division.
      
      gcc/testsuite/ChangeLog:
      	* jit.dg/test-vector-rvalues.cc (check_div): Add specialization
      	for v4f, to avoid relying on exact floating-point equality.
      	* jit.dg/test-vector-types.cc (check_div): Likewise.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      99585d88
    • David Malcolm's avatar
      jit: fix test-asm failures on i?86 · 176289e5
      David Malcolm authored
      
      On i686, test_i386_basic_asm_4 has:
        error: inconsistent operand constraints in an 'asm'
      and test_i386_basic_asm_5 has:
        /tmp/libgccjit-9FsLie/fake.s:9: Error: bad register name `%rdi'
        /tmp/libgccjit-9FsLie/fake.s:10: Error: bad register name `%rsi'
      
      This is only intended as a smoketest of asm support, so only run
      it on x86_64.
      
      gcc/testsuite/ChangeLog:
      	* jit.dg/test-asm.c: Remove i?86-*-* from target specifier.
      	* jit.dg/test-asm.cc: Likewise.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      176289e5
Loading