Skip to content
Snippets Groups Projects
  1. Aug 18, 2021
    • Iain Sandoe's avatar
      configure: Allow host fragments to react to --enable-host-shared. · d39367fa
      Iain Sandoe authored
      
      This makes the host_shared value available to host makefile
      fragments.
      
      It uses this to adjust Darwin's mdynamic-no-pic in the case that
      shared host resources are required.
      
      Signed-off-by: default avatarIain Sandoe <iain@sandoe.co.uk>
      
      ChangeLog:
      
      	* Makefile.in: Regenerate.
      	* Makefile.tpl: Make the state of the configured host
      	shared flag available to makefile fragements.
      
      config/ChangeLog:
      
      	* mh-darwin: Require a non-shared host configuration to
      	enable  mdynamic-no-pic where that is supported.
      d39367fa
    • Iain Sandoe's avatar
      Objective-C: fix crash with -fobjc-nilcheck · d2aa4e0b
      Iain Sandoe authored
      
      When -fobjc-nilcheck is enabled, messages that result in a struct type should
      yield a zero-initialized struct when sent to nil.  Currently, the frontend
      crashes when it encounters this situation.  This patch fixes the crash by
      generating the tree for the `{}` initializer.
      
      Signed-off-by: default avatarIain Sandoe <iain@sandoe.co.uk>
      Co-authored-by: default avatarMatt Jacobson <mhjacobson@me.com>
      
      	PR objc/101666
      
      gcc/objc/ChangeLog:
      
      	* objc-act.c (objc_build_constructor): Handle empty constructor
      	lists.
      	* objc-next-runtime-abi-02.c (build_v2_objc_method_fixup_call):
      	Handle nil receivers.
      	(build_v2_build_objc_method_call): Likewise.
      
      gcc/testsuite/ChangeLog:
      
      	* obj-c++.dg/pr101666-0.mm: New test.
      	* obj-c++.dg/pr101666-1.mm: New test.
      	* obj-c++.dg/pr101666.inc: New.
      	* objc.dg/pr101666-0.m: New test.
      	* objc.dg/pr101666-1.m: New test.
      	* objc.dg/pr101666.inc: New.
      d2aa4e0b
    • Iain Sandoe's avatar
      libiberty, Darwin : Fix simple-object LTO table for cross-endian case. · 220c4101
      Iain Sandoe authored
      
      We encapsulate streamed IR in three special sections with a table
      that describes their entries.  The table is expected to be written
      with native endianness for the target, but for cross-endian cross-
      compilation the swapping was omitted.  Fixed thus.
      
      Signed-off-by: default avatarIain Sandoe <iain@sandoe.co.uk>
      
      libiberty/ChangeLog:
      
      	* simple-object-mach-o.c (simple_object_mach_o_write_segment):
      	Arrange to swap the LTO index tables where needed.
      220c4101
    • Iain Sandoe's avatar
      Darwin: Handle the -rpath command line option. · 15bdae01
      Iain Sandoe authored
      
      This handles the command line '-rpath' option by passing it through
      to the static linker.
      
      Signed-off-by: default avatarIain Sandoe <iain@sandoe.co.uk>
      
      gcc/ChangeLog:
      
      	* config.gcc: Include rpath.opt for Darwin.
      	* config/darwin.h (DRIVER_SELF_SPECS): Handle -rpath.
      15bdae01
    • Ankur Saini's avatar
      analyzer: detect and analyze virtual function calls · 1b342485
      Ankur Saini authored
      2021-08-15  Ankur Saini  <arsenic@sourceware.org>
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/97114
      	* region-model.cc (region_model::get_rvalue_1): Add case for
      	OBJ_TYPE_REF.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/97114
      	* g++.dg/analyzer/vfunc-2.C: New test.
      	* g++.dg/analyzer/vfunc-3.C: New test.
      	* g++.dg/analyzer/vfunc-4.C: New test.
      	* g++.dg/analyzer/vfunc-5.C: New test.
      1b342485
    • Ankur Saini's avatar
      analyzer: detect and analyze calls via function pointer · aef703cf
      Ankur Saini authored
      2021-07-29  Ankur Saini  <arsenic@sourceware.org>
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/100546
      	* analysis-plan.cc (analysis_plan::use_summary_p): Don't use call
      	summaries if there is no callgraph edge
      	* checker-path.cc (call_event::call_event): Handle calls events that
      	are not represented by a supergraph call edge
      	(return_event::return_event): Likewise.
      	(call_event::get_desc): Work with new call_event structure.
      	(return_event::get_desc): Likeise.
      	* checker-path.h (call_event::m_src_snode): New field.
      	(call_event::m_dest_snode): New field.
      	(return_event::m_src_snode): New field.
      	(return_event::m_dest_snode): New field.
      	* diagnostic-manager.cc
      	(diagnostic_manager::prune_for_sm_diagnostic)<case EK_CALL_EDGE>:
      	Refactor to work with edges without callgraph edge.
      	(diagnostic_manager::prune_for_sm_diagnostic)<case EK_RETURN_EDGE>:
      	Likewise.
      	* engine.cc (dynamic_call_info_t::update_model): New function.
      	(dynamic_call_info_t::add_events_to_path): New function.
      	(exploded_graph::create_dynamic_call): New function.
      	(exploded_graph::process_node): Work with dynamically discovered calls.
      	* exploded-graph.h (class dynamic_call_info_t): New class.
      	(exploded_graph::create_dynamic_call): New decl.
      	* program-point.cc (program_point::push_to_call_stack): New function.
      	(program_point::pop_from_call_stack): New function.
      	* program-point.h (program_point::push_to_call_stack): New decl.
      	(program_point::pop_from_call_stack): New decl.
      	* program-state.cc (program_state::push_call): New function.
      	(program_state::returning_call): New function.
      	* program-state.h (program_state::push_call): New decl.
      	(program_state::returning_call): New decl.
      	* region-model.cc (region_model::update_for_gcall) New function.
      	(region_model::update_for_return_gcall): New function.
      	(egion_model::update_for_call_superedge): Get the underlying gcall and
      	update for gcall.
      	(region_model::update_for_return_superedge): Likewise.
      	* region-model.h (region_model::update_for_gcall): New decl.
      	(region_model::update_for_return_gcall): New decl.
      	* state-purge.cc (state_purge_per_ssa_name::process_point): Update to
      	work with calls without underlying cgraph edge.
      	* supergraph.cc (supergraph::supergraph) Split snodes at every callsite.
      	* supergraph.h (supernode::get_returning_call) New accessor.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/100546
      	* gcc.dg/analyzer/function-ptr-4.c: New test.
      	* gcc.dg/analyzer/pr100546.c: New test.
      aef703cf
    • Thomas Schwinge's avatar
      Make 'gcc/hash-map-tests.c:test_map_of_type_with_ctor_and_dtor_expand' work on... · bb04a03c
      Thomas Schwinge authored
      Make 'gcc/hash-map-tests.c:test_map_of_type_with_ctor_and_dtor_expand' work on 32-bit architectures [PR101959]
      
      Bug fix for recent commit e4f16e9f
      "Add more self-tests for 'hash_map' with Value type with non-trivial
      constructor/destructor".
      
      	gcc/
      	PR bootstrap/101959
      	* hash-map-tests.c (test_map_of_type_with_ctor_and_dtor_expand):
      	Use an 'int_hash'.
      bb04a03c
    • Jonathan Wright's avatar
      aarch64: Fix float <-> int errors in vld4[q]_lane intrinsics · 640df4ef
      Jonathan Wright authored
      A previous commit "aarch64: Remove macros for vld4[q]_lane Neon
      intrinsics" introduced some float <-> int type conversion errors.
      This patch fixes those errors.
      
      gcc/ChangeLog:
      
      2021-08-18  Jonathan Wright  <jonathan.wright@arm.com>
      
      	* config/aarch64/arm_neon.h (vld3_lane_f64): Use float RTL
      	pattern and type cast.
      	(vld4_lane_f32): Use float RTL pattern.
      	(vld4q_lane_f64): Use float type cast.
      640df4ef
    • Jonathan Wakely's avatar
      libstdc++: Improve doxygen documentation for std::unique_ptr · 4fb471af
      Jonathan Wakely authored
      
      Add more detailed documentation for unique_ptr and related components.
      
      The new alias templates for the _MakeUniq SFINAE helper make the
      generated docs look better too.
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/unique_ptr.h (default_delete): Add @since tag.
      	(unique_ptr, unique_ptr<T[]>): Likewise. Improve @brief.
      	(make_unique, make_unique_for_overwrite): Likewise. Add @tparam,
      	@param, and @returns.
      	(_MakeUniq): Move to __detail namespace. Add alias template
      	helpers.
      4fb471af
    • Jonathan Wakely's avatar
      libstdc++: Improve doxygen comments in <bits/stl_function.h> · 828176ba
      Jonathan Wakely authored
      
      Add notes about deprecation and modern replacements. Fix bogus
      "memory_adaptors" group name. Use markdown for formatting.
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/stl_function.h: Improve doxygen comments.
      828176ba
    • Jonathan Wakely's avatar
      libstdc++: Enable doxygen processing for C++20 components · aba938d6
      Jonathan Wakely authored
      
      Improve grouping, add @since and @deprecated information.
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* doc/doxygen/user.cfg.in (PREDEFINED): Enable doxygen
      	processing for C++20 components and components that depend on
      	compiler features.
      	* include/bits/stl_algo.h (random_shuffle): Use @deprecated.
      	* include/std/type_traits: Improve doxygen comments for C++20
      	traits.
      aba938d6
    • Jonathan Wakely's avatar
      libstdc++: Simplify n-ary arithmetic promotion traits · 37620d57
      Jonathan Wakely authored
      
      The std::complex partial specializations have been unnecessary since
      774c3d86
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* include/ext/type_traits.h (__promote_2, __promote_3)
      	(__promote_4): Redfine as alias templates using __promoted_t.
      	* include/std/complex (__promote_2): Remove partial
      	specializations for std::complex.
      37620d57
    • Jonathan Wakely's avatar
      libstdc++: Minor optimization for min/max/minmax · de44eee5
      Jonathan Wakely authored
      
      The debug mode checks for a valid range are redundant when we have an
      initializer_list argument, because we know it's a valid range already.
      By making std::min(initialier_list<T>) call the internal __min_element
      function directly we avoid a function call and skip those checks. The
      same can be done for the overload taking a comparison function, and also
      for the std::max and std::minmax overloads for initializer_list
      arguments.
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/stl_algo.h (min(initializer_list<T>))
      	(min(initializer_list<T>, Compare)): Call __min_element directly to
      	avoid redundant debug checks for valid ranges.
      	(max(initializer_list<T>), max(initializer_list<T>, Compare)):
      	Likewise, for __max_element.
      	(minmax(initializer_list<T>), minmax(initializer_list<T>, Compare)):
      	Likewise, for __minmax_element.
      de44eee5
    • Jonathan Wakely's avatar
      libstdc++: Fix CTAD for debug sequence containers · 085c2f8f
      Jonathan Wakely authored
      
      This fixes some 23_containers/*/cons/deduction.cc failures seen with
      -std=c++17/-D_GLIBCXX_DEBUG, caused by non-immediate errors when
      substituting template arguments into an incorrect specialization of the
      std::__cxx1998 base class. This happens because the size_type member of
      the debug container is _Base_type::size_type, so is non-deducible, and
      the deduced types get substituted into _Base_type, triggering the
      static_assert that checks the allocator's value_type matches the
      container's.
      
      The solution is to make the C(size_type, const T&, const Alloc&)
      constructors of the debug sequence containers non-deducible. In order to
      make CTAD work again deduction guides that use std::size_t for the first
      argument are added.
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* include/debug/deque (deque(size_type, const T&, const A&)):
      	Prevent class template argument deduction and replace with a
      	deduction guide.
      	* include/debug/forward_list (forward_list(size_type, const T&, const A&)):
      	Likewise.
      	* include/debug/list (list(size_type, const T&, const A&)):
      	Likewise.
      	* include/debug/vector (vector(size_type, const T&, const A&)):
      	Likewise.
      085c2f8f
    • Jonathan Wakely's avatar
      libstdc++: Fix vector<bool> printer tests to work in debug mode · c883d1dc
      Jonathan Wakely authored
      
      This fixes a compilation error in debug mode, due to std::_Bit_reference
      not being defined, because it's in namespace std::__cxx1998 instead. We
      can refer to it as vector<bool>::reference instead, which always works.
      
      That fixes some compilation errors in debug mode, but the tests fail at
      run-time instead because the printers for vector<bool> helpers are only
      registered for the std namespace, not std::__cxx1998. That is fixed by
      using add_container to register the printers instead of add_version, as
      the former registers them in the std and std::__cxx1998 namespaces.
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      
      libstdc++-v3/ChangeLog:
      
      	* python/libstdcxx/v6/printers.py (StdBitReferencePrinter): Use
      	'std::vector<bool>::reference' as type name, not _Bit_reference.
      	(build_libstdcxx_dictionary): Register printers for vector<bool>
      	types in debug mode too.
      	* testsuite/libstdc++-prettyprinters/simple.cc: Adjust expected
      	output for invalid _Bit_reference. Use vector<bool>::reference
      	instead of _Bit_reference.
      	* testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.
      c883d1dc
    • Tobias Burnus's avatar
      Fortran: Add OpenMP's nothing directive support · f74433e7
      Tobias Burnus authored
      Fortran version of commit 5079b778
      
      gcc/fortran/ChangeLog:
      
      	* match.h (gfc_match_omp_nothing): New.
      	* openmp.c (gfc_match_omp_nothing): New.
      	* parse.c (decode_omp_directive): Match 'nothing' directive.
      
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/nothing-1.f90: New test.
      	* gfortran.dg/nothing-2.f90: New test.
      f74433e7
    • Patrick Palka's avatar
      c++: aggregate CTAD and brace elision [PR101344] · be4a4fb5
      Patrick Palka authored
      Here the problem is ultimately that collect_ctor_idx_types always
      recurses into an eligible sub-CONSTRUCTOR regardless of whether the
      corresponding pair of braces was elided in the original initializer.
      This causes us to reject some completely-braced forms of aggregate
      CTAD as in the first testcase below, because collect_ctor_idx_types
      effectively assumes that the original initializer is always minimally
      braced (and so the aggregate deduction candidate is given a function
      type that's incompatible with the original completely-braced initializer).
      
      In order to fix this, collect_ctor_idx_types needs to somehow know the
      shape of the original initializer when iterating over the reshaped
      initializer.  To that end this patch makes reshape_init flag sub-ctors
      that were built to undo brace elision in the original ctor, so that
      collect_ctor_idx_types that determine whether to recurse into a sub-ctor
      by simply inspecting this flag.
      
      This happens to also fix PR101820, which is about aggregate CTAD using
      designated initializers, for much the same reasons.
      
      A curious case is the "intermediately-braced" initialization of 'e3'
      (which we reject) in the first testcase below.  It seems to me we're
      behaving as specified here (according to [over.match.class.deduct]/1)
      because the initializer element x_1={1, 2, 3, 4} corresponds to the
      subobject e_1=E::t, hence the type T_1 of the first function parameter
      of the aggregate deduction candidate is T(&&)[2][2], but T can't be
      deduced from x_1 using this parameter type (as opposed to say T(&&)[4]).
      
      	PR c++/101344
      	PR c++/101820
      
      gcc/cp/ChangeLog:
      
      	* cp-tree.h (CONSTRUCTOR_BRACES_ELIDED_P): Define.
      	* decl.c (reshape_init_r): Set it.
      	* pt.c (collect_ctor_idx_types): Recurse into a sub-CONSTRUCTOR
      	iff CONSTRUCTOR_BRACES_ELIDED_P.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp2a/class-deduction-aggr11.C: New test.
      	* g++.dg/cpp2a/class-deduction-aggr12.C: New test.
      be4a4fb5
    • Patrick Palka's avatar
      c++: ignore explicit dguides during NTTP CTAD [PR101883] · a6b3db3e
      Patrick Palka authored
      Since (template) argument passing is a copy-initialization context,
      we mustn't consider explicit deduction guides when deducing a CTAD
      placeholder type of an NTTP.
      
      	PR c++/101883
      
      gcc/cp/ChangeLog:
      
      	* pt.c (convert_template_argument): Pass LOOKUP_IMPLICIT to
      	do_auto_deduction.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp2a/nontype-class49.C: New test.
      a6b3db3e
    • Eric Botcazou's avatar
      Fix thinko in latest change for GNAT encodings · 88ef1a14
      Eric Botcazou authored
       gcc/ada/
      	* gcc-interface/decl.c (gnat_to_gnu_entity) <discrete_type>: Fix
      	thinko in latest change.
      88ef1a14
    • Jan Hubicka's avatar
      Add EAF_NOREAD check to tree-ssa-uninit · e12946df
      Jan Hubicka authored
      gcc/ChangeLog:
      
      2021-08-18  Jan Hubicka  <hubicka@ucw.cz>
      
      	* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Check also
      	EAF_NOREAD.
      e12946df
    • Thomas Schwinge's avatar
      Add more self-tests for 'hash_map' with Value type with non-trivial constructor/destructor · e4f16e9f
      Thomas Schwinge authored
      ... to document the current behavior.
      
      	gcc/
      	* hash-map-tests.c (test_map_of_type_with_ctor_and_dtor): Extend.
      	(test_map_of_type_with_ctor_and_dtor_expand): Add function.
      	(hash_map_tests_c_tests): Call it.
      e4f16e9f
    • Thomas Schwinge's avatar
      Turn 'bool force_collect' parameter to 'ggc_collect' into an 'enum ggc_collect mode' · 602fca42
      Thomas Schwinge authored
      
      ... to make the meaning more explicit to the reader of the code.
      
      Follow-up to recent commit 0edf2e81
      "Turn global 'ggc_force_collect' variable into 'force_collect' parameter to
      'ggc_collect'".
      
      	gcc/
      	* ggc.h (enum ggc_collect): New.
      	(ggc_collect): Use it.
      	* ggc-page.c: Adjust.
      	* ggc-common.c: Likewise.
      	* ggc-tests.c: Likewise.
      	* read-rtl-function.c: Likewise.
      	* selftest-run-tests.c: Likewise.
      	* doc/gty.texi (Invoking the garbage collector): Likewise.
      
      Suggested-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      602fca42
    • Tobias Burnus's avatar
      Fortran/OpenMP: Add memory routines existing for C/C++ · 76bb3c50
      Tobias Burnus authored
      This patch adds the Fortran interface for omp_alloc/omp_free
      and the omp_target_* memory routines, which were added in
      OpenMP 5.0 for C/C++ but only OpenMP 5.1 added them for Fortran.
      
      Those functions use BIND(C), i.e. on the libgomp side, the same
      interface as for C/C++ is used.
      
      Note: By using BIND(C) in omp_lib.h, files including this file
      no longer compiler with -std=f95 but require at least -std=f2003.
      
      libgomp/ChangeLog:
      
      	* omp_lib.f90.in (omp_alloc, omp_free, omp_target_alloc,
      	omp_target_free. omp_target_is_present, omp_target_memcpy,
      	omp_target_memcpy_rect, omp_target_associate_ptr,
      	omp_target_disassociate_ptr): Add interface.
      	* omp_lib.h.in (omp_alloc, omp_free, omp_target_alloc,
      	omp_target_free. omp_target_is_present, omp_target_memcpy,
      	omp_target_memcpy_rect, omp_target_associate_ptr,
      	omp_target_disassociate_ptr): Add interface.
      	* testsuite/libgomp.fortran/alloc-1.F90: Remove local
      	interface block for omp_alloc + omp_free.
      	* testsuite/libgomp.fortran/alloc-4.f90: Likewise.
      	* testsuite/libgomp.fortran/refcount-1.f90: New test.
      	* testsuite/libgomp.fortran/target-12.f90: New test.
      76bb3c50
    • Jakub Jelinek's avatar
      openmp: Add nothing directive support · 5079b778
      Jakub Jelinek authored
      As has been clarified, it is intentional that nothing directive is accepted
      in substatements of selection and looping statements and after labels and
      is handled as if the directive just isn't there, so that
      void
      foo (int x)
      {
        if (x)
          #pragma omp metadirective when (...:nothing) when (...:parallel)
          bar ();
      }
      behaves consistently; declarative and stand-alone directives aren't allowed
      at that point, but constructs are parsed with the following statement as
      the construct body and nothing or missing default on metadirective therefore
      should handle the following statement as part of the if substatement instead
      of having nothing as the substatement and bar done unconditionally after the
      if.
      
      2021-08-18  Jakub Jelinek  <jakub@redhat.com>
      
      gcc/c-family/
      	* c-pragma.h (enum pragma_kind): Add PRAGMA_OMP_NOTHING.
      	* c-pragma.c (omp_pragmas): Add nothing directive.
      	* c-omp.c (omp_directives): Uncomment nothing directive entry.
      gcc/c/
      	* c-parser.c (c_parser_omp_nothing): New function.
      	(c_parser_pragma): Handle PRAGMA_OMP_NOTHING.
      gcc/cp/
      	* parser.c (cp_parser_omp_nothing): New function.
      	(cp_parser_pragma): Handle PRAGMA_OMP_NOTHING.
      gcc/testsuite/
      	* c-c++-common/gomp/nothing-1.c: New test.
      	* g++.dg/gomp/attrs-1.C (bar): Add nothing directive test.
      	* g++.dg/gomp/attrs-2.C (bar): Likewise.
      	* g++.dg/gomp/attrs-9.C: Likewise.
      libgomp/
      	* testsuite/libgomp.c-c++-common/nothing-1.c: New test.
      5079b778
    • Martin Liska's avatar
      commit-mklog: Add --co argument. · 0684c8d3
      Martin Liska authored
      The argument can be used for addition of Co-Authored-By lines
      with --trailer='Co-Authored-By=Mona Lisa Octocat <mona@github.com>'.
      
      contrib/ChangeLog:
      
      	* gcc-git-customization.sh: Wrap $@ in quotes.
      	* git-commit-mklog.py: Add new argument --co.
      	* mklog.py: Skip the Co-Authored-By lines.
      0684c8d3
    • Jakub Jelinek's avatar
      openmp: Actually ignore pragma_stmt pragmas for which c_parser_pragma returns false · 1bf976a5
      Jakub Jelinek authored
      Unlike the C++ FE, the C FE ignored pragmas (as if they weren't there) in
      pragma_stmt contexts if c*_parser_pragma returns false only when after labels,
      not inside of substatements of selection or loop statements.
      After making just that change, several gomp/goacc testcases started failing,
      because extra diagnostics has been emitted (in C, in C++ it was emitted
      already before).  Say
      void
      foo (int x)
      {
        if (x)
          #pragma omp barrier
      }
      used to in C emit just an error that the pragma is not allowed in such
      contexts, but in C++ emitted both that and a parsing error that
        if (x)
      }
      is invalid.  So, the rest of this patch is mostly about returning true
      after we report that that certain pragma is not allowed in pragma_stmt
      contexts, because for error-recovery it seems better to treat the
      pragma in that case as something that is the substatement of such if etc.
      c*_parser_pragma return value is only ever used for pragma_stmt context,
      in which false means act as if the pragma isn't there (e.g. has been handled
      already by preprocessor etc.), and true which means it was there.
      
      2021-08-18  Jakub Jelinek  <jakub@redhat.com>
      
      gcc/c/
      	* c-parser.c (c_parser_statement_after_labels): Add restart label
      	near the start of the function.  If c_parser_pragma returns false,
      	goto restart.
      	(c_parser_pragma): For PRAGMA_OMP_CANCELLATION_POINT return what
      	c_parser_omp_cancellation_point returned.  For PRAGMA_OMP_DECLARE
      	return what c_parser_omp_declare returned.  Return true instead of
      	false after emitting errors that the directive is not allowed in
      	pragma_stmt context.
      	(c_parser_omp_ordered): Return true instead of
      	false after emitting errors that the directive is not allowed in
      	pragma_stmt context.
      	(c_parser_omp_target_update): Likewise.
      	(c_parser_omp_target_enter_data, c_parser_omp_target_exit_data):
      	Change return type from tree to bool, return false if the
      	directive should be ignored in pragma_stmt contexts.
      	(c_parser_omp_target): Adjust callers of c_parser_omp_target_*_data,
      	return their result directly.
      	(c_parser_omp_cancellation_point): Change return type from void to
      	bool, return false if the directive should be ignored in pragma_stmt
      	contexts.
      	(c_parser_omp_declare): Likewise.
      gcc/cp/
      	* parser.c (cp_parser_omp_ordered): Return true instead of
      	false after emitting errors that the directive is not allowed in
      	pragma_stmt context.
      	(cp_parser_omp_target_update): Likewise.
      	(cp_parser_omp_cancellation_point): Change return type from void to
      	bool, return false if the directive should be ignored in pragma_stmt
      	contexts.
      	(cp_parser_omp_target_enter_data, cp_parser_omp_target_exit_data):
      	Change return type from tree to bool, return false if the
      	directive should be ignored in pragma_stmt contexts.
      	(cp_parser_omp_target): Adjust callers of cp_parser_omp_target_*_data,
      	return their result directly.
      	(cp_parser_pragma): For PRAGMA_OMP_CANCELLATION_POINT return what
      	cp_parser_omp_cancellation_point returned.  Return true instead of
      	false after emitting errors that the directive is not allowed in
      	pragma_stmt context.
      gcc/testsuite/
      	* c-c++-common/gomp/pr63326.c: Don't expect extra "before" errors
      	in C++.
      	* g++.dg/gomp/attrs-7.C: Don't expect one extra error.
      	* g++.dg/gomp/barrier-2.C: Likewise.
      	* gcc.dg/gomp/declare-simd-5.c: Likewise.
      	* gcc.dg/gomp/barrier-2.c: Likewise.
      	* gcc.dg/gomp/declare-variant-2.c: Likewise.
      1bf976a5
    • liuhongt's avatar
      Add x86 tune to enable v2df vector reduction by paddpd. · 97d51c17
      liuhongt authored
      The tune is disabled by default.
      
      gcc/ChangeLog:
      
      	PR target/97147
      	* config/i386/i386.h (TARGET_V2DF_REDUCTION_PREFER_HADDPD):
      	New macro.
      	* config/i386/sse.md (*sse3_haddv2df3_low): Add
      	TARGET_V2DF_REDUCTION_PREFER_HADDPD.
      	(*sse3_hsubv2df3_low): Ditto.
      	* config/i386/x86-tune.def
      	(X86_TUNE_V2DF_REDUCTION_PREFER_HADDPD): New tune.
      
      gcc/testsuite/ChangeLog:
      
      	PR target/97147
      	* gcc.target/i386/pr54400.c: Adjust testcase.
      	* gcc.target/i386/pr94147.c: New test.
      97d51c17
    • GCC Administrator's avatar
      Daily bump. · 2d14d64b
      GCC Administrator authored
      2d14d64b
  2. Aug 17, 2021
    • Andrew MacLeod's avatar
      Add GORI tracing faciltiies. · 4759e1e0
      Andrew MacLeod authored
      Debugging range-ops and gori unwinding needed some help.
      
      	* gimple-range-gori.cc (gori_compute::gori_compute): Enable tracing.
      	(gori_compute::compute_operand_range): Add tracing.
      	(gori_compute::logical_combine): Ditto.
      	(gori_compute::compute_logical_operands): Ditto.
      	(gori_compute::compute_operand1_range): Ditto.
      	(gori_compute::compute_operand2_range): Ditto.
      	(gori_compute::outgoing_edge_range_p): Ditto.
      	* gimple-range-gori.h (class gori_compute): Add range_tracer.
      4759e1e0
    • Andrew MacLeod's avatar
      Change evrp-mode options. · 0bb74a28
      Andrew MacLeod authored
      Remove tracing in hybrid mode. Add trace/gori/cache tracing options.
      tracing options are now  'trace', 'gori', 'cache', or all combined in 'debug'
      
      	* flag-types.h (enum evrp_mode): Adjust evrp-mode values.
      	* gimple-range-cache.cc (DEBUG_RANGE_CACHE): Relocate from.
      	* gimple-range-trace.h (DEBUG_RANGE_CACHE): Here.
      	* params.opt (--param=evrp-mode): Adjust options.
      0bb74a28
    • Andrew MacLeod's avatar
      Abstract tracing routines into a class. · e68c8280
      Andrew MacLeod authored
      Generalize range tracing into a class and integrae it with gimple_ranger.
      Remove the old derived trace_ranger class.
      
      	* Makefile.in (OBJS): Add gimple-range-trace.o.
      	* gimple-range-cache.h (enable_new_values): Remove unused prototype.
      	* gimple-range-fold.cc: Adjust headers.
      	* gimple-range-trace.cc: New.
      	* gimple-range-trace.h: New.
      	* gimple-range.cc (gimple_ranger::gimple_ranger): Enable tracer.
      	(gimple_ranger::range_of_expr): Add tracing.
      	(gimple_ranger::range_on_entry): Ditto.
      	(gimple_ranger::range_on_exit): Ditto.
      	(gimple_ranger::range_on_edge): Ditto.
      	(gimple_ranger::fold_range_internal): Ditto.
      	(gimple_ranger::dump_bb): Do not calculate edge range twice.
      	(trace_ranger::*): Remove.
      	(enable_ranger): Never create a trace_ranger.
      	(debug_seed_ranger): Move to gimple-range-trace.cc.
      	(dump_ranger): Ditto.
      	(debug_ranger): Ditto.
      	* gimple-range.h: Include gimple-range-trace.h.
      	(range_on_entry, range_on_exit): No longer virtual.
      	(class trace_ranger): Remove.
      	(DEBUG_RANGE_CACHE): Move to gimple-range-trace.h.
      e68c8280
    • Martin Sebor's avatar
      Move more warning code to gimple-ssa-warn-access etc. · b48d4e68
      Martin Sebor authored
      Also resolves:
      PR middle-end/101854 - Invalid warning -Wstringop-overflow wrong argument
      
      gcc/ChangeLog:
      
      	PR middle-end/101854
      	* builtins.c (expand_builtin_alloca): Move warning code to check_alloca
      	in gimple-ssa-warn-access.cc.
      	* calls.c (alloc_max_size): Move code to check_alloca.
      	(get_size_range): Move to pointer-query.cc.
      	(maybe_warn_alloc_args_overflow): Move to gimple-ssa-warn-access.cc.
      	(get_attr_nonstring_decl): Move to tree.c.
      	(fntype_argno_type): Move to gimple-ssa-warn-access.cc.
      	(append_attrname): Same.
      	(maybe_warn_rdwr_sizes): Same.
      	(initialize_argument_information): Move code to
      	gimple-ssa-warn-access.cc.
      	* calls.h (maybe_warn_alloc_args_overflow): Move to
      	gimple-ssa-warn-access.h.
      	(get_attr_nonstring_decl): Move to tree.h.
      	(maybe_warn_nonstring_arg):  Move to gimple-ssa-warn-access.h.
      	(enum size_range_flags): Move to pointer-query.h.
      	(get_size_range): Same.
      	* gimple-ssa-warn-access.cc (has_location): Remove unused overload
      	to avoid Clang -Wunused-function.
      	(get_size_range): Declare static.
      	(maybe_emit_free_warning): Rename...
      	(maybe_check_dealloc_call): ...to this for consistency.
      	(class pass_waccess): Add members.
      	(pass_waccess::~pass_waccess): Defined.
      	(alloc_max_size): Move here from calls.c.
      	(maybe_warn_alloc_args_overflow): Same.
      	(check_alloca): New function.
      	(check_alloc_size_call): New function.
      	(check_strncat): Handle another warning flag.
      	(pass_waccess::check_builtin): Handle alloca.
      	(fntype_argno_type): Move here from calls.c.
      	(append_attrname): Same.
      	(maybe_warn_rdwr_sizes): Same.
      	(pass_waccess::check_call): Define.
      	(check_nonstring_args): New function.
      	(pass_waccess::check): Call new member functions.
      	(pass_waccess::execute): Enable ranger.
      	* gimple-ssa-warn-access.h (get_size_range): Move here from calls.h.
      	(maybe_warn_nonstring_arg): Same.
      	* gimple-ssa-warn-restrict.c: Remove #include.
      	* pointer-query.cc (get_size_range): Move here from calls.c.
      	* pointer-query.h (enum size_range_flags): Same.
      	(get_size_range): Same.
      	* tree.c (get_attr_nonstring_decl): Move here from calls.c.
      	* tree.h (get_attr_nonstring_decl): Move here from calls.h.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/attr-alloc_size-5.c: Adjust optimization to -O1.
      	* gcc.dg/attr-alloc_size-7.c: Use #pragmas to adjust optimization.
      	* gcc.dg/attr-alloc_size-8.c: Adjust optimization to -O1.
      
      	PR middle-end/101854
      	* gcc.dg/Wstringop-overflow-72.c: New test.
      b48d4e68
    • Jakub Jelinek's avatar
      c++: Implement P0466R5 __cpp_lib_is_layout_compatible compiler helpers [PR101539] · 32c3a753
      Jakub Jelinek authored
      The following patch implements __is_layout_compatible trait and
      __builtin_is_corresponding_member helper function for the
      std::is_corresponding_member template function.
      
      As the current definition of layout compatible type has various problems,
      which result e.g. in corresponding members in layout compatible types having
      different member offsets, the patch anticipates some changes to the C++
      standard:
      1) class or enumeral types aren't layout compatible if they have different
         alignment or size
      2) if two members have different offsets, they can't be corresponding members
         ([[no_unique_address]] with empty types can change that, or alignas
         on the member decls)
      3) in unions, bitfields can't correspond to non-unions, or bitfields can't
         correspond to bitfields with different widths, or members with
         [[no_unique_address]] can't correspond to members without that attribute
      
      __builtin_is_corresponding_member for anonymous structs (GCC extension) will
      recurse into the anonymous structs.  For anonymous unions it will emit
      a sorry if it can't prove such member types can't appear in the
      anonymous unions or anonymous aggregates in that union, because
      corresponding member is defined only using common initial sequence which is
      only defined for std-layout non-union class types and so I have no idea what
      to do otherwise in that case.
      
      2021-08-17  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/101539
      gcc/c-family/
      	* c-common.h (enum rid): Add RID_IS_LAYOUT_COMPATIBLE.
      	* c-common.c (c_common_reswords): Add __is_layout_compatible.
      gcc/cp/
      	* cp-tree.h (enum cp_trait_kind): Add CPTK_IS_LAYOUT_COMPATIBLE.
      	(enum cp_built_in_function): Add CP_BUILT_IN_IS_CORRESPONDING_MEMBER.
      	(fold_builtin_is_corresponding_member, next_common_initial_seqence,
      	layout_compatible_type_p): Declare.
      	* parser.c (cp_parser_primary_expression): Handle
      	RID_IS_LAYOUT_COMPATIBLE.
      	(cp_parser_trait_expr): Likewise.
      	* cp-objcp-common.c (names_builtin_p): Likewise.
      	* constraint.cc (diagnose_trait_expr): Handle
      	CPTK_IS_LAYOUT_COMPATIBLE.
      	* decl.c (cxx_init_decl_processing): Register
      	__builtin_is_corresponding_member builtin.
      	* constexpr.c (cxx_eval_builtin_function_call): Handle
      	CP_BUILT_IN_IS_CORRESPONDING_MEMBER builtin.
      	* semantics.c (is_corresponding_member_union,
      	is_corresponding_member_aggr, fold_builtin_is_corresponding_member):
      	New functions.
      	(trait_expr_value): Handle CPTK_IS_LAYOUT_COMPATIBLE.
      	(finish_trait_expr): Likewise.
      	* typeck.c (next_common_initial_seqence, layout_compatible_type_p):
      	New functions.
      	* cp-gimplify.c (cp_gimplify_expr): Fold
      	CP_BUILT_IN_IS_CORRESPONDING_MEMBER.
      	(cp_fold): Likewise.
      	* tree.c (builtin_valid_in_constant_expr_p): Handle
      	CP_BUILT_IN_IS_CORRESPONDING_MEMBER.
      	* cxx-pretty-print.c (pp_cxx_trait_expression): Handle
      	CPTK_IS_LAYOUT_COMPATIBLE.
      	* class.c (remove_zero_width_bit_fields): Remove.
      	(layout_class_type): Don't call it.
      gcc/testsuite/
      	* g++.dg/cpp2a/is-corresponding-member1.C: New test.
      	* g++.dg/cpp2a/is-corresponding-member2.C: New test.
      	* g++.dg/cpp2a/is-corresponding-member3.C: New test.
      	* g++.dg/cpp2a/is-corresponding-member4.C: New test.
      	* g++.dg/cpp2a/is-corresponding-member5.C: New test.
      	* g++.dg/cpp2a/is-corresponding-member6.C: New test.
      	* g++.dg/cpp2a/is-corresponding-member7.C: New test.
      	* g++.dg/cpp2a/is-corresponding-member8.C: New test.
      	* g++.dg/cpp2a/is-layout-compatible1.C: New test.
      	* g++.dg/cpp2a/is-layout-compatible2.C: New test.
      	* g++.dg/cpp2a/is-layout-compatible3.C: New test.
      32c3a753
    • Matt Jacobson's avatar
      Objective-C: Default flag_objc_sjlj_exceptions off for NeXT ABI >= 2. · 79866639
      Matt Jacobson authored
      
      Signed-off-by: default avatarMatt Jacobson <mhjacobson@me.com>
      
      gcc/c-family/ChangeLog:
      
      	* c-opts.c (c_common_post_options): Default to
      	flag_objc_sjlj_exceptions = 1 only when flag_objc_abi < 2.
      
      gcc/objc/ChangeLog:
      
      	* objc-next-runtime-abi-02.c
      	(objc_next_runtime_abi_02_init): Warn about and reset
      	flag_objc_sjlj_exceptions regardless of flag_objc_exceptions.
      	(next_runtime_02_initialize): Use a checking assert that
      	flag_objc_sjlj_exceptions is off.
      79866639
    • Thomas Schwinge's avatar
      libstdc++: Avoid illegal argument to verbose in dg-test callback, continued · 60b94d8b
      Thomas Schwinge authored
      This is a follow-up to commit 697b94cf
      "libstdc++: Avoid illegal argument to verbose in dg-test callback".
      I'm confirming the original problem, but on one system, it's not
      resolved by this change, because instead we get:
      
          extra_tool_flags are:
          ERROR: tcl error sourcing [...]/libstdc++-v3/testsuite/libstdc++-dg/conformance.exp.
          ERROR: usage: send [args] string
              while executing
          "send_log "$message\n""
              (procedure "verbose" line 48)
              invoked from within
          "verbose -log -- $extra_tool_flags"
              (procedure "libstdc++-dg-test" line 45)
              invoked from within
          "${tool}-dg-test $prog [lindex ${dg-do-what} 0] "$tool_flags ${dg-extra-tool-flags}""
              (procedure "saved-dg-test" line 115)
              invoked from within
          [...]
      
      That's Ubuntu's dejagnu 1.5-3ubuntu1 being so old that it doesn't include
      DejaGnu commit 57c22601afe43d2c2b8819df4f2ecacb034516fd "Protect from leading
      dash in message".  (I suppose that's what'd make this work, but have not
      verified.)
      
      	libstdc++-v3/
      	* testsuite/lib/libstdc++.exp: Avoid illegal argument to verbose,
      	continued.
      60b94d8b
    • Iain Sandoe's avatar
      Darwin, libcc1: Handle hosts with mdynamic-no-pic support. · b240450b
      Iain Sandoe authored
      
      The default for building host-side binaries for mdynamic-no-pic
      hosts is to enable this.  However, it is not compatible with
      dynamic libraries, so must be switched off for libcc1.
      
      Signed-off-by: default avatarIain Sandoe <iain@sandoe.co.uk>
      
      libcc1/ChangeLog:
      
      	* Makefile.am: Switch mdynamic-no-pic to fPIC.
      	* Makefile.in: Regenerated.
      b240450b
    • Thomas Schwinge's avatar
      Turn global 'ggc_force_collect' variable into 'force_collect' parameter to 'ggc_collect' · 0edf2e81
      Thomas Schwinge authored
      This simplifies the interface and gets us rid of a global variable.
      No change in behavior.
      
      Clean-up for 2004-09-02 CVS commit (Subversion r86974,
      Git commit 07724022)
      "Better memory statistics, take 2".
      
      	gcc/
      	* ggc.h (ggc_collect): Add 'force_collect' parameter.
      	* ggc-page.c (ggc_collect): Use that one instead of global
      	'ggc_force_collect'.  Adjust all users.
      	* doc/gty.texi (Invoking the garbage collector): Update.
      	* ggc-internal.h (ggc_force_collect): Remove.
      	* ggc-common.c (ggc_force_collect): Likewise.
      	* selftest.h (forcibly_ggc_collect): Remove.
      	* ggc-tests.c (selftest::forcibly_ggc_collect): Likewise.
      	* read-rtl-function.c (test_loading_labels): Adjust.
      	* selftest-run-tests.c (run_tests): Likewise.
      0edf2e81
    • Thomas Schwinge's avatar
      Restore 'gcc.dg/pr78213.c' testing · a42467bd
      Thomas Schwinge authored
      ... after it had gotten disabled in r243681 (Git
      commit ecfc21ff)
      "Introduce selftest::locate_file".
      
      	gcc/testsuite/
      	* gcc.dg/pr78213.c: Restore testing.
      a42467bd
    • Iain Sandoe's avatar
      Darwin: Reset section names table at the end of compile. · 2d9da1c8
      Iain Sandoe authored
      
      For a single use (typical compile) this vector will be reclaimed
      as GGC.  For JIT this is not sufficient since it does not reset
      the pointer to NULL (and thus we think the the vector is already
      allocated when a context is reused).
      
      The clears the vector and sets the pointer to NULL at the end
      of object output.
      
      Signed-off-by: default avatarIain Sandoe <iain@sandoe.co.uk>
      
      gcc/ChangeLog:
      
      	* config/darwin.c (darwin_file_end): Reset and reclaim the
      	section names table at the end of compile.
      2d9da1c8
    • Iain Sandoe's avatar
      Darwin, X86, config: Adjust 'as' command lines [PR100340]. · 743b8dd6
      Iain Sandoe authored
      
      Versions of the assembler using clang from XCode 12.5/12.5.1
      have a bug which produces different code layout between debug and
      non-debug input, leading to a compare fail for default configure
      parameters.
      
      This is a workaround fix to disable the optimisation that is
      responsible for the bug.
      
      Signed-off-by: default avatarIain Sandoe <iain@sandoe.co.uk>
      
      PR target/100340 - Bootstrap fails with Clang 12.0.5 (XCode 12.5)
      
      	PR target/100340
      
      gcc/ChangeLog:
      
      	* config.in: Regenerate.
      	* config/i386/darwin.h (EXTRA_ASM_OPTS): New
      	(ASM_SPEC): Pass options to disable branch shortening where
      	needed.
      	* configure: Regenerate.
      	* configure.ac: Detect versions of 'as' that support the
      	optimisation which has the bug.
      743b8dd6
Loading