Skip to content
Snippets Groups Projects
  1. May 22, 2020
  2. May 21, 2020
    • Jason Merrill's avatar
      c++: Check constant array bounds later. · c37b1442
      Jason Merrill authored
      We give a better diagnostic for non-constant array bounds in
      compute_array_index_type_loc, we don't need to diagnose it in the parser.
      But to avoid a regression on parse/varmod1.C we need to actually check
      non-dependent expressions in a template.
      
      gcc/cp/ChangeLog:
      
      	* decl.c (compute_array_index_type_loc): Diagnose expressions
      	in a template that can't be constant.
      	* parser.c (cp_parser_direct_declarator): Don't check
      	non-constant array bounds here.
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/gomp/depend-iterator-2.c: Adjust.
      	* g++.dg/ext/vla1.C: Adjust.
      	* g++.dg/template/array9.C: Adjust.
      	* g++.dg/template/error41.C: Adjust.
      c37b1442
    • Jason Merrill's avatar
      c++: Constant expression parsing and parameters. · beb019d3
      Jason Merrill authored
      The difference between a "potential" constant-expression and a regular
      constant-expression is the treatment of parameters; in a constexpr function,
      a parameter is potentially constant when evaluating a call to that function,
      but it is not constant during parsing of the function.
      cp_parser_constant_expression should check the latter rather than the
      former.
      
      gcc/cp/ChangeLog:
      
      	* cp-tree.h (is_rvalue_constant_expression): Declare.
      	* constexpr.c (is_rvalue_constant_expression): New.
      	* parser.c (cp_parser_constant_expression): Use it.
      	* decl.c (cp_finish_decl): Try to treat a constexpr initializer in a
      	template as constant.
      beb019d3
    • Jason Merrill's avatar
      c++: Improve error recovery for =. · 4f602147
      Jason Merrill authored
      In a template we were happily embedding error_mark_node in a MODOP_EXPR,
      leading to confusion later.
      
      gcc/cp/ChangeLog:
      
      	* typeck.c (build_x_modify_expr): Handle error_mark_node arguments.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/lambda/lambda-ice30.C: Adjust.
      	* g++.dg/cpp0x/lambda/lambda-ice31.C: Adjust.
      	* g++.dg/ext/fixed1.C: Adjust.
      	* g++.dg/template/crash107.C: Adjust.
      	* g++.dg/template/error35.C: Adjust.
      	* g++.dg/template/sizeof-template-argument.C: Adjust.
      4f602147
    • Jason Merrill's avatar
      c++: Improve error-recovery for parms. · f7272c8a
      Jason Merrill authored
      If a parameter is erroneous, we currently drop it, leading to "too many
      arguments" errors later.  Treating the function as (...) avoids those
      errors.
      
      gcc/cp/ChangeLog:
      
      	* decl.c (grokparms): Return NULL_TREE if any parms were erroneous.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/parse/error33.C: Adjust.
      f7272c8a
    • Iain Sandoe's avatar
      coroutines: Partial reversion of r11-437-g5ef067eb14d4. · f898793b
      Iain Sandoe authored
      co_returns are statements, not expressions; they do not need
      to be wrapped in an EXPR_STMT.
      
      gcc/cp/ChangeLog:
      
      	* coroutines.cc (finish_co_return_stmt): Revert change to use
      	finish_expr_stmt.
      f898793b
    • Rainer Orth's avatar
      Include memmodel.h in adjust-alignment.c · 149c8c7c
      Rainer Orth authored
      Commit dfa4fcdb broke SPARC bootstrap:
      
      In file included from ./tm_p.h:4,
                       from /vol/gcc/src/hg/master/local/gcc/adjust-alignment.c:28:
      /vol/gcc/src/hg/master/local/gcc/config/sparc/sparc-protos.h:45:47: error: use of enum 'memmodel' without previous declaration
       extern void sparc_emit_membar_for_model (enum memmodel, int, int);
                                                     ^~~~~~~~
      
      Fixed by including memmodel.h.  Bootstrapped on sparc-sun-solaris2.11
      and i386-pc-solaris2.11.
      
      2020-05-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
      
      	gcc/
      	* adjust-alignment.c: Include memmodel.h.
      149c8c7c
    • H.J. Lu's avatar
      config/i386/cpuid.h: Use hexadecimal in comments · a74630f3
      H.J. Lu authored
      Since Intel SDM uses hexadecimal, use hexadecimal in comments.
      
      	PR target/95260
      	* config/i386/cpuid.h: Use hexadecimal in comments.
      a74630f3
    • Matthias Kretz's avatar
      libstdc++: Enable simple invocation of runtest in testsuite · bc7a4f2f
      Matthias Kretz authored
      
      2020-05-21  Matthias Kretz  <kretz@kde.org>
      
      	* testsuite/Makefile.am: Remove dup target_triplet and set tool,
      	allowing runtest to work without arguments.
      	* testsuite/Makefile.in: Regenerate.
      
      Signed-off-by: default avatarJonathan Wakely <jwakely@redhat.com>
      bc7a4f2f
    • Patrick Palka's avatar
      c++: template instantiation during fold_for_warn [PR94038] · f65a3299
      Patrick Palka authored
      Unfortunately, the previous fix to PR94038 is fragile.  When the
      argument to fold_for_warn is a bare CALL_EXPR, then all is well: the
      result of maybe_constant_value from fold_for_warn (with
      uid_sensitive=true) is reused via the cv_cache in the subsequent call to
      maybe_constant_value from cp_fold (with uid_sensitive=false), so we
      avoid instantiating bar<int>.
      
      But when the argument to fold_for_warn is more complex, e.g. an
      INDIRECT_REF of a CALL_EXPR, as in the testcase below (due to bar<int>()
      returning const int& which we need to decay to int) then from
      fold_for_warn we call maybe_constant_value on the INDIRECT_REF, and from
      cp_fold we call it on the CALL_EXPR, so there is no reuse via the
      cv_cache and we therefore end up instantiating bar<int>.
      
      So for a more robust solution to this general issue of warning flags
      affecting code generation, it seems that we need a way to globally avoid
      template instantiation during constexpr evaluation whenever we're
      performing warning-dependent folding.
      
      To that end, this patch replaces the flag constexpr_ctx::uid_sensitive
      with a global flag uid_sensitive_constexpr_evaluation_p, and enables it
      during fold_for_warn using an RAII helper.
      
      The patch also adds a counter that keeps track of the number of times
      uid_sensitive_constexpr_evaluation_p is called and returned true, and we
      use this to determine whether the result of constexpr evaluation
      was restricted by the flag.  This lets us safely update the cv_cache and
      fold_cache from fold_for_warn in the most common case where the flag
      did not restrict constexpr evaluation.
      
      gcc/cp/ChangeLog:
      
      	PR c++/94038
      	* constexpr.c (constexpr_ctx::uid_sensitive): Remove field.
      	(uid_sensitive_constexpr_evaluation_value): Define.
      	(uid_sensitive_constexpr_evaluation_true_counter): Define.
      	(uid_sensitive_constexpr_evaluation_p): Define.
      	(uid_sensitive_constexpr_evaluation_sentinel): Define its
      	constructor.
      	(uid_sensitive_constexpr_evaluation_checker): Define its
      	constructor and its evaluation_restricted_p method.
      	(get_fundef_copy): Remove 'ctx' parameter.  Use u_s_c_e_p
      	instead of constexpr_ctx::uid_sensitive.
      	(cxx_eval_call_expression): Use u_s_c_e_p instead, and test it
      	last.  Adjust call to get_fundef_copy.
      	(instantiate_cx_fn_r): Test u_s_c_e_p so that we increment the
      	counter if necessary.
      	(cxx_eval_outermost_constant_expr): Remove 'uid_sensitive'
      	parameter.  Adjust function body accordingly.
      	(maybe_constant_value): Remove 'uid_sensitive' parameter and
      	adjust function body accordingly.  Set up a
      	uid_sensitive_constexpr_evaluation_checker, and use it to
      	conditionally update the cv_cache.
      	* cp-gimplify.c (cp_fold): Set up a
      	uid_sensitive_constexpr_evaluation_checker, and use it to
      	conditionally update the fold_cache.
      	* cp-tree.h (maybe_constant_value): Update declaration.
      	(struct uid_sensitive_constexpr_evaluation_sentinel): Define.
      	(struct sensitive_constexpr_evaluation_checker): Define.
      	* expr.c (fold_for_warn): Set up a
      	uid_sensitive_constexpr_evaluation_sentinel before calling
      	the folding subroutines.  Drop all but the first argument to
      	maybe_constant_value.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/94038
      	* g++.dg/warn/pr94038-2.C: New test.
      f65a3299
    • H.J. Lu's avatar
      libgcc: Move FEATURE_AVX512VP2INTERSECT after FEATURE_AVX512BF16 · 5855bdfa
      H.J. Lu authored
      Move FEATURE_AVX512VP2INTERSECT after FEATURE_AVX512BF16 to avoid
      changing libgcc ABI.
      
      gcc/
      
      	PR target/95212
      	* config/i386/i386-builtins.c (processor_features): Move
      	F_AVX512VP2INTERSECT after F_AVX512BF16.
      	(isa_names_table): Likewise.
      
      libgcc/
      
      	PR target/95212
      	* config/i386/cpuinfo.h (processor_features): Move
      	FEATURE_AVX512VP2INTERSECT after FEATURE_AVX512BF16.
      5855bdfa
    • Martin Liska's avatar
      Fix a test-case warning. · 2f20c704
      Martin Liska authored
      	PR target/95229
      	* g++.target/i386/pr95229.C: Fix
      	error: unnamed type with no linkage used
      	to declare variable ‘<unnamed class> e’ with linkage
      	with -std=gnu++98.
      2f20c704
    • Nathan Sidwell's avatar
      Remove accidental testcase commit · ea097d14
      Nathan Sidwell authored
      	* c-c++-common/cpp/cmd-1.c: Delete.
      	* c-c++-common/cpp/cmd-1.h: Delete.
      ea097d14
    • H.J. Lu's avatar
      libgfortran: Use __builtin_cpu_is/__builtin_cpu_supports · 8ebc2f5e
      H.J. Lu authored
      	* m4/matmul.m4: Don't include <config/i386/cpuinfo.h>.  Use
      	__builtin_cpu_is/__builtin_cpu_supports
      	* generated/matmul_c10.c: Regenerated.
      	* generated/matmul_c16.c: Likewise.
      	* generated/matmul_c4.c: Likewise.
      	* generated/matmul_c8.c: Likewise.
      	* generated/matmul_i1.c: Likewise.
      	* generated/matmul_i16.c: Likewise.
      	* generated/matmul_i2.c: Likewise.
      	* generated/matmul_i4.c: Likewise.
      	* generated/matmul_i8.c: Likewise.
      	* generated/matmul_r10.c: Likewise.
      	* generated/matmul_r16.c: Likewise.
      	* generated/matmul_r4.c: Likewise.
      	* generated/matmul_r8.c: Likewise.
      8ebc2f5e
    • Martin Liska's avatar
      Add outline-atomics to target attribute. · 9e02b45f
      Martin Liska authored
      	* common/config/aarch64/aarch64-common.c (aarch64_handle_option):
      	Handle OPT_moutline_atomics.
      	* config/aarch64/aarch64.c: Add outline-atomics to
      	aarch64_attributes.
      
      	* doc/extend.texi: Document the newly added target attribute.
      
      	* gcc.target/aarch64/target_attr_20.c: New test.
      	* gcc.target/aarch64/target_attr_21.c: New test.
      9e02b45f
    • Martin Liska's avatar
      Prepare git_update_version.py for real usage. · 62b5b53e
      Martin Liska authored
      	* gcc-changelog/git_update_version.py: Prepare the script, the
      	only missing piece is pushing of the updated branches.
      62b5b53e
    • Martin Liska's avatar
      Support DR entries for gcc-changelog. · 9722b139
      Martin Liska authored
      	* gcc-changelog/git_commit.py: Support DR entries/
      	* gcc-changelog/test_email.py: New test for it.
      	* gcc-changelog/test_patches.txt: New patch for it.
      9722b139
    • Martin Liska's avatar
      mklog: support parsing of DR. · e7c7cdc5
      Martin Liska authored
      	* mklog.py: Support DR parsing.
      	* test_mklog.py: New test for DR parsing.
      e7c7cdc5
    • Jonathan Wakely's avatar
      libstdc++: Avoid constraint recursion with iterator_traits (PR 93983) · f094665d
      Jonathan Wakely authored
      Checking whether a filesystem::path constructor argument is an iterator
      requires instantiating std::iterator_traits. In C++20 that checks for
      satisfaction of std::iterator_traits constraints, which checks if the
      type is copyable, which can end up recursing back to the path
      constructor. The fix in LWG 3420 is to reorder the cpp17-iterator
      concept's constraints to check if the type looks vaguely like an
      iterator before checking copyable. That avoids the recursion for types
      which definitely aren't iterators, but isn't foolproof.
      
      	PR libstdc++/93983
      	* include/bits/iterator_concepts.h (__detail::__cpp17_iterator):
      	Reorder constraints to avoid recursion when constructors use
      	iterator_traits (LWG 3420).
      	* testsuite/24_iterators/customization_points/lwg3420.cc: New test.
      f094665d
    • GCC Administrator's avatar
      Daily bump. · 48c28b17
      GCC Administrator authored
      48c28b17
    • Jonathan Wakely's avatar
      libstdc++: Use macro for nodiscard attribute · 0a1baad8
      Jonathan Wakely authored
      	* include/experimental/socket (basic_socket::is_open()
      	(basic_socket_acceptor::is_open()): Use _GLIBCXX_NODISCARD macro.
      0a1baad8
  3. May 20, 2020
    • Jonathan Wakely's avatar
      libstdc++: Better requirements checking in Networking TS · b780db2e
      Jonathan Wakely authored
      Define concepts and traits for checking type requirements.
      
      	* include/experimental/bits/net.h (__endpoint, __protocol)
      	(__acceptable_protocol, __inet_protocol): New concepts.
      	(__detail::__is_endpoint): Move trait from <experimental/socket>.
      	(__is_protocol, __is_acceptable_protocol, __is_inet_protocol): New
      	traits.
      	(__endpoint, __protocol, __acceptable_protocol): New variable
      	templates.
      	* include/experimental/socket (__is_endpoint): Move to net.h header.
      	(basic_socket, basic_socket_acceptor): Check requirements.
      b780db2e
    • Jonathan Wakely's avatar
      libstdc++: Fix net::basic_socket::close(error_code&) · d9d34449
      Jonathan Wakely authored
      Also add some missing member functions, nodiscard attributes, and
      noexcept-specifiers.
      
      	* include/experimental/executor (use_future_t::use_future_t()): Fix
      	incorrect noexcept-specifier.
      	* include/experimental/internet (basic_resolver_results): Adjust
      	whitespace.
      	* include/experimental/socket (__basic_socket_impl::release): Add
      	member function.
      	(basic_socket(io_context&, const endpoint_type&)): Fix argument to
      	target constructor.
      	(basic_socket::release(), basic_socket::release(error_code&)): Add
      	missing member functions.
      	(basic_socket::is_open()): Add nodiscard attribute.
      	(basic_socket::close(error_code&)): Pass argument to base function.
      	(basic_socket_acceptor::release())
      	(basic_socket_acceptor::release(error_code&)): Add missing member
      	functions.
      	(basic_socket_acceptor::is_open()): Add nodiscard attribute.
      	(basic_socket_streambuf::error()): Add noexcept.
      	(basic_socket_iostream::error()): Likewise.
      	* testsuite/experimental/net/socket/basic_socket.cc: New test.
      d9d34449
    • Jonathan Wakely's avatar
      libstdc++: Use 'using' for types in Networking TS headers · f26e72d8
      Jonathan Wakely authored
      	* include/experimental/buffer: Replace typedefs with
      	alias-declarations.
      	* include/experimental/executor: Likewise.
      	* include/experimental/internet: Likewise.
      	* include/experimental/socket: Likewise.
      	* include/experimental/timer: Likewise.
      f26e72d8
    • Uros Bizjak's avatar
      i386: Do not use commutative operands with (use) RTX [PR95238] · 7797f5ec
      Uros Bizjak authored
      2020-05-21  Uroš Bizjak  <ubizjak@gmail.com>
      
      gcc/ChangeLog:
      	PR target/95218
      
      	* config/i386/mmx.md (*mmx_<code>v2sf): Do not mark
      	operands 1 and 2 commutative.  Manually swap operands.
      	(*mmx_nabsv2sf2): Ditto.
      
      	Partially revert:
      
      	* config/i386/i386.md (*<code>tf2_1):
      	Mark operands 1 and 2 commutative.
      	(*nabstf2_1): Ditto.
      	* config/i386/sse.md (*<code><mode>2): Mark operands 1 and 2
      	commutative.  Do not swap operands.
      	(*nabs<mode>2): Ditto.
      7797f5ec
    • Jozef Lawrynowicz's avatar
      Fix premature omission of ChangeLog entry in ChangeLog file.. · 14984ea1
      Jozef Lawrynowicz authored
      	* g++.dg/warn/Wconversion-null-2.C: Add explicit declarations for l()
      	and g() with int, long, long long and __int20 arguments.
      	* g++.dg/warn/Wconversion-null.C: Likewise.
      14984ea1
    • Jozef Lawrynowicz's avatar
      TESTSUITE: Fix Wconversion-null*.C tests for aarch64 -mabi=ilp32 · edd482f3
      Jozef Lawrynowicz authored
      This fixes regressions for aarch64 with -mabi=ilp32 of the
      Wconversion-null*.C tests, introduced by 92ea8e1b.
      
      The "g (int)" declaration is required for that target where
      sizeof(int) == sizeof(long) == sizeof(void *).
      
      To handle the msp430/-mlarge case, an explicit declaration of
      "g (__int20)" is required.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/warn/Wconversion-null-2.C: Add explicit declarations for l()
      	and g() with int, long, long long and __int20 arguments.
      	* g++.dg/warn/Wconversion-null.C: Likewise.
      edd482f3
    • Marek Polacek's avatar
      c++: C++20 DR 2237, disallow simple-template-id in cdtor. · 4b38d56d
      Marek Polacek authored
      This patch implements DR 2237 which says that a simple-template-id is
      no longer valid as the declarator-id of a constructor or destructor;
      see [diff.cpp17.class]#2.  It is not explicitly stated but out-of-line
      destructors with a simple-template-id are also meant to be ill-formed
      now.  (Out-of-line constructors like that are invalid since DR1435 I
      think.)  This change only applies to C++20; it is not a DR against C++17.
      
      I'm not crazy about the diagnostic in constructors but ISTM that
      cp_parser_constructor_declarator_p shouldn't print errors.
      
      	DR 2237
      	* parser.c (cp_parser_unqualified_id): Reject simple-template-id as
      	the declarator-id of a destructor.
      	(cp_parser_constructor_declarator_p): Reject simple-template-id as
      	the declarator-id of a constructor.
      
      	* g++.dg/DRs/dr2237.C: New test.
      	* g++.dg/parse/constructor2.C: Add dg-error for C++20.
      	* g++.dg/parse/dtor12.C: Likewise.
      	* g++.dg/parse/dtor4.C: Likewise.
      	* g++.dg/template/dtor4.C: Adjust dg-error.
      	* g++.dg/template/error34.C: Likewise.
      	* g++.old-deja/g++.other/inline15.C: Only run for C++17 and lesses.
      	* g++.old-deja/g++.pt/ctor2.C: Add dg-error for C++20.
      4b38d56d
    • Nathan Sidwell's avatar
      preprocessor: Revert premature change · 38a4db21
      Nathan Sidwell authored
      This part of the cleanup patch turns out to require more pieces to
      function correctly.  I must have got confused over which tree I was
      testing.  The very first map has a different pointer to the file name,
      so doesn't match with a pointer compare. We were relying on that.
      
      	* c-common.c (try_to_locate_new_include_insertion_point): Revert change.
      38a4db21
    • Nathan Sidwell's avatar
      preprocessor: cleanups in c-common handling · c22027a0
      Nathan Sidwell authored
      	* c-common.c (try_to_locate_new_include_insertion_point): Use
      	strcmp to compare filenames.
      	* c-lex.c (init_c_lex): Move declaration to initialization.
      	* c-opts.c (handle_deferred_opts): Move cpp_get_deps call into
      	deferred count loop.
      c22027a0
    • Marek Polacek's avatar
      c++: Implement DR 2289, Uniqueness of structured binding names [PR94553] · 2a8565fa
      Marek Polacek authored
      DR 2289 clarified that since structured bindings have no C compatibility
      implications, they should be unique in their declarative region, see
      [basic.scope.declarative]/4.2.
      
      The duplicate_decls hunk is the gist of the patch, but that alone would
      not be enough to detect the 'A' case: cp_parser_decomposition_declaration
      uses
      
      13968       tree decl2 = start_decl (declarator, &decl_specs, SD_INITIALIZED,
      13969                                NULL_TREE, NULL_TREE, &elt_pushed_scope);
      
      to create the 'A' VAR_DECL but in this start_decl's grokdeclarator we
      don't do fit_decomposition_lang_decl because the declarator kind is not
      cdk_decomp, so then when start_decl calls maybe_push_decl, the decl 'A'
      isn't DECL_DECOMPOSITION_P and we don't detect this case.  So I needed a
      way to signal to start_decl that it should fit_decomposition_lang_decl.
      In this patch, I'm adding SD_DECOMPOSITION flag to say that the variable
      is initialized and it should also be marked as DECL_DECOMPOSITION_P.
      
      	DR 2289
      	PR c++/94553
      	* cp-tree.h (SD_DECOMPOSITION): New flag.
      	* decl.c (duplicate_decls): Make sure a structured binding is unique
      	in its declarative region.
      	(start_decl): If INITIALIZED is SD_DECOMPOSITION, call
      	fit_decomposition_lang_decl.
      	(grokdeclarator): Compare INITIALIZED directly to SD_* flags.
      	* parser.c (cp_parser_decomposition_declaration): Pass SD_DECOMPOSITION
      	to start_decl.
      
      	* g++.dg/cpp1z/decomp52.C: New test.
      2a8565fa
    • Uros Bizjak's avatar
      i386: Fix zero/sign extend expanders [PR95229] · 3872a519
      Uros Bizjak authored
      2020-05-20  Uroš Bizjak  <ubizjak@gmail.com>
      
      gcc/ChangeLog:
      	PR target/95229
      	* config/i386/sse.md (<code>v8qiv8hi2): Use
      	simplify_gen_subreg instead of simplify_subreg.
      	(<code>v8qiv8si2): Ditto.
      	(<code>v4qiv4si2): Ditto.
      	(<code>v4hiv4si2): Ditto.
      	(<code>v8qiv8di2): Ditto.
      	(<code>v4qiv4di2): Ditto.
      	(<code>v2qiv2di2): Ditto.
      	(<code>v4hiv4di2): Ditto.
      	(<code>v2hiv2di2): Ditto.
      	(<code>v2siv2di2): Ditto.
      
      gcc/testsuite/ChangeLog:
      	PR target/95229
      	* g++.target/i386/pr95229.C: New test.
      3872a519
    • Uros Bizjak's avatar
      i386: Fix *pushsi2_rex64 constraints [PR95238] · 2cf6f315
      Uros Bizjak authored
      2020-05-20  Uroš Bizjak  <ubizjak@gmail.com>
      
      gcc/ChangeLog:
      	PR target/95238
      	* config/i386/i386.md (*pushsi2_rex64):
      	Use "e" constraint instead of "i".
      2cf6f315
    • Martin Liska's avatar
      git_email.py: fix duplicate author_lines. · 2f809e77
      Martin Liska authored
      	* gcc-changelog/git_commit.py: Add author_tuple
      	only if not present in author_lines.
      	* gcc-changelog/test_email.py: New test.
      	* gcc-changelog/test_patches.txt: Add new patch.
      2f809e77
    • Jan Hubicka's avatar
      Avoid SCC hashing on unmergeable trees · 03d90a20
      Jan Hubicka authored
      This is new incarantion of patch to identify unmergeable tree at streaming out
      time rather than streaming in and to avoid pickling them to sccs with with hash
      codes.
      
      Building cc1 plus this patch reduces:
      
      [WPA] read 4452927 SCCs of average size 1.986030
      [WPA] 8843646 tree bodies read in total
      [WPA] tree SCC table: size 524287, 205158 elements, collision ratio: 0.505204
      [WPA] tree SCC max chain length 43 (size 1)
      [WPA] Compared 947551 SCCs, 780270 collisions (0.823460)
      [WPA] Merged 944038 SCCs
      [WPA] Merged 5253521 tree bodies
      [WPA] Merged 590027 types
      ...
      [WPA] Size of mmap'd section decls: 99229066 bytes
      [WPA] Size of mmap'd section function_body: 18398837 bytes
      [WPA] Size of mmap'd section refs: 733678 bytes
      [WPA] Size of mmap'd section jmpfuncs: 2965981 bytes
      [WPA] Size of mmap'd section pureconst: 170248 bytes
      [WPA] Size of mmap'd section profile: 17985 bytes
      [WPA] Size of mmap'd section symbol_nodes: 3392736 bytes
      [WPA] Size of mmap'd section inline: 2693920 bytes
      [WPA] Size of mmap'd section icf: 435557 bytes
      [WPA] Size of mmap'd section offload_table: 0 bytes
      [WPA] Size of mmap'd section lto: 4320 bytes
      [WPA] Size of mmap'd section ipa_sra: 651660 bytes
      
      ... to ...
      
      [WPA] read 3312246 unshared trees
      [WPA] read 1144381 mergeable SCCs of average size 4.833785
      [WPA] 8843938 tree bodies read in total
      [WPA] tree SCC table: size 524287, 197767 elements, collision ratio: 0.506446
      [WPA] tree SCC max chain length 43 (size 1)
      [WPA] Compared 946614 SCCs, 775077 collisions (0.818789)
      [WPA] Merged 943798 SCCs
      [WPA] Merged 5253336 tree bodies
      [WPA] Merged 590105 types
      ....
      [WPA] Size of mmap'd section decls: 81262144 bytes
      [WPA] Size of mmap'd section function_body: 14702611 bytes
      [WPA] Size of mmap'd section ext_symtab: 0 bytes
      [WPA] Size of mmap'd section refs: 733695 bytes
      [WPA] Size of mmap'd section jmpfuncs: 2332150 bytes
      [WPA] Size of mmap'd section pureconst: 170292 bytes
      [WPA] Size of mmap'd section profile: 17986 bytes
      [WPA] Size of mmap'd section symbol_nodes: 3393358 bytes
      [WPA] Size of mmap'd section inline: 2567939 bytes
      [WPA] Size of mmap'd section icf: 435633 bytes
      [WPA] Size of mmap'd section lto: 4320 bytes
      [WPA] Size of mmap'd section ipa_sra: 651824 bytes
      
      so results in about 22% reduction in global decl stream and 24% reduction on
      function bodies stream (which is read mostly by ICF)
      
      Martin, the zstd compression breaks the compression statistics (it works when
      GCC is configured for zlib)
      
      At first ltrans I get:
      
      [LTRANS] Size of mmap'd section decls: 3734248 bytes
      [LTRANS] Size of mmap'd section function_body: 4895962 bytes
      
      ... to ...
      
      [LTRANS] Size of mmap'd section decls: 3479850 bytes
      [LTRANS] Size of mmap'd section function_body: 3722935 bytes
      
      So 7% reduction of global stream and 31% reduction of function bodies.
      
      Stream in seems to get about 3% faster and stream out about 5% but it is
      close to noise factor of my experiment.  I expect bigger speedups on
      Firefox but I did not test it today since my Firefox setup broke again.
      GCC is not very good example on the problem with anonymous namespace
      types since we do not have so many of them.
      
      Sice of object files in gcc directory is reduced by 11% (because hash
      numbers do not compress well I guess).
      
      The patch makes DFS walk to recognize trees that are not merged (anonymous
      namespace, local function/variable decls, anonymous types etc).  As discussed
      on IRC this is now done during the SCC walk rather than during the hash
      computation.  When local tree is discovered we know that SCC components of everything that is on
      the stack reffers to it and thus is also local. Moreover we mark trees into hash set in output block
      so if we get a cross edge referring to local tree it gets marked too.
      
      Patch also takes care of avoiding SCC wrappers around some trees. In particular
       1) singleton unmergeable SCCs are now streamed inline in global decl stream
          This includes INTEGER_CSTs and IDENTIFIER_NODEs that are shared by different
          code than rest of tree merging.
       2) We use LTO_trees instead of LTO_tree_scc to wrap unmergeable SCC components.
          It is still necessary to mark them because of forward references.  LTO_trees
          has simple header with number of trees and then things are streamed same way
          as for LTO_tree_scc. That is tree headers first followed by pickled references
          so things may point to future.
      
          Of course it is not necessary for LTO_tree_scc to be single component and
          streamer out may group more components together, but I decided to not snowball
          the patch even more
       3) In local streams when lto_output_tree is called and the topmost SCC components
          turns out to be singleton we stream the tree directly
          instead of LTO_tree_scc, hash code, pickled tree, reference to just stremaed tree.
      
          LTO_trees is used to wrap all trees needed to represent tree being streamed.
          It would make sense again to use only one LTO_trees rather than one per SCC
          but I think this can be done incrementally.
      
      In general local trees are now recognized by new predicate local_tree_p
      
      Bit subtle is handing of TRANLSATION_UNIT_DECL, INTEGER_CST and
      IDENTIFIER_NODE.
      
      TRANSLATION_UNIT_DECL a local tree but references to it does not make
      other trees local (because we also understand local decls now).
      So I check for it later after localness propagation is done.
      
      INTEGER_CST and IDENTIFIER_NODEs are merged but not via the tree merging
      machinery. So it makes sense to stream them as unmergeable trees but we
      still need to compute their hashes so SCCs referring them do not get too
      large collision chains.  For this reason they are checked just prior
      stream out.
      
      lto-bootstrapped/regteted x86_64-linux, OK?
      
      gcc/ChangeLog:
      
      2020-05-19  Jan Hubicka  <hubicka@ucw.cz>
      
      	* lto-streamer-in.c (lto_input_scc): Add SHARED_SCC parameter.
      	(lto_input_tree_1): Strenghten sanity check.
      	(lto_input_tree): Update call of lto_input_scc.
      	* lto-streamer-out.c: Include ipa-utils.h
      	(create_output_block): Initialize local_trees if merigng is going
      	to happen.
      	(destroy_output_block): Destroy local_trees.
      	(DFS): Add max_local_entry.
      	(local_tree_p): New function.
      	(DFS::DFS): Initialize and maintain it.
      	(DFS::DFS_write_tree): Decide on streaming format.
      	(lto_output_tree): Stream inline singleton SCCs
      	* lto-streamer.h (enum LTO_tags): Add LTO_trees.
      	(struct output_block): Add local_trees.
      	(lto_input_scc): Update prototype.
      
      gcc/lto/ChangeLog:
      
      2020-05-19  Jan Hubicka  <hubicka@ucw.cz>
      
      	* lto-common.c (compare_tree_sccs_1): Sanity check that we never
      	read TRANSLATION_UNIT_DECL.
      	(process_dref): Break out from ...
      	(unify_scc): ... here.
      	(process_new_tree): Break out from ...
      	(lto_read_decls): ... here; handle streaming of singleton trees.
      	(print_lto_report_1): Update statistics.
      03d90a20
    • Mark Eggleston's avatar
      Fortran : ProcPtr function results: 'ppr@' in error message PR39695 · eb069ae8
      Mark Eggleston authored
      The value 'ppr@' is set in the name of result symbol, the actual
      name of the symbol is in the procedure name symbol pointed
      to by the result symbol's namespace (ns). When reporting errors for
      symbols that have the proc_pointer attribute check whether the
      result attribute is set and set the name accordingly.
      
      2020-05-20  Mark Eggleston  <markeggleston@gcc.gnu.org>
      
      gcc/fortran/
      
      	PR fortran/39695
      	* resolve.c (resolve_fl_procedure): Set name depending on
      	whether the result attribute is set.  For PROCEDURE/RESULT
      	conflict use the name in sym->ns->proc_name->name.
      	* symbol.c (gfc_add_type): Add check for function and result
      	attributes use sym->ns->proc_name->name if both are set.
      	Where the symbol cannot have a type use the name in
      	sym->ns->proc_name->name.
      
      2020-05-20  Mark Eggleston  <markeggleston@gcc.gnu.org>
      
      gcc/testsuite/
      
      	PR fortran/39695
      	* gfortran.dg/pr39695_1.f90: New test.
      	* gfortran.dg/pr39695_2.f90: New test.
      	* gfortran.dg/pr39695_3.f90: New test.
      	* gfortran.dg/pr39695_4.f90: New test.
      eb069ae8
    • Nathan Sidwell's avatar
      preprocessor: Replace some flags with a single enum · 4623a6f2
      Nathan Sidwell authored
      _cpp_find_file has 3 bool arguments, at most one of which is ever set.
      Ripe for replacing with a 4-state enum.  Also, this is C++, so
      'typedef struct Foo Foo' is unnecessary.
      
      	* internal.h (typedef _cpp_file): Delete, unnecessary in C++.
      	(enum _cpp_find_file_kind): New.
      	(_cpp_find_file): Use it, not 3 bools.
      	* files.c (_cpp_find_file): Use _cpp_find_file_kind enum, not
      	bools.
      	(cpp_make_system_header): Break overly long line.
      	(_cpp_stack_include, _cpp_fake_include)
      	(_cpp_do_file_change, _cpp_compare_file_date, _cpp_has_header): Adjust.
      	* init.c (cpp_read_main): Adjust _cpp_find_file call.
      4623a6f2
    • Patrick Palka's avatar
      c++: spec_hasher and TYPENAME_TYPE resolution [PR95223] · 610ae2db
      Patrick Palka authored
      After enabling sanitization of the specialization tables, we are
      triggering one of the hash table sanity checks in the below testcase.
      
      The reason is that when looking up the specialization j<int> in the
      type_specializations table, the sanity check finds that the existing
      entry j<n<t>::m> compares equal to j<int> but hashes differently.
      
      The discrepancy is due to structural_comptypes looking through
      TYPENAME_TYPEs (via resolve_typename_type), something which
      iterative_hash_template_arg doesn't do.  So the TYPENAME_TYPE n<t>::m is
      considered equal to int, but the hashes of these two template arguments
      are different.
      
      It seems wrong for the result of a specialization table lookup to depend
      on the current scope, so this patch makes structural_comptypes avoid
      calling resolve_typename_type when comparing_specializations.
      
      In order for the below testcase to deterministically trigger the
      sanitization error without this patch, we also need to fix the location
      of the call to hash_table::verify within hash_table::find_with_hash.
      
      gcc/ChangeLog:
      
      	PR c++/95223
      	* hash-table.h (hash_table::find_with_hash): Move up the call to
      	hash_table::verify.
      
      gcc/cp/ChangeLog:
      
      	PR c++/95223
      	* typeck.c (structural_comptypes): Don't perform
      	context-dependent resolution of TYPENAME_TYPEs when
      	comparing_specializations.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/95223
      	* g++.dg/template/typename23.C: New test.
      610ae2db
    • Martin Liska's avatar
      Fill up {,un}compression stats for ZSTD in LTO. · 053dc901
      Martin Liska authored
      	* lto-compress.c (lto_compression_zstd): Fill up
      	num_compressed_il_bytes.
      	(lto_uncompression_zstd): Likewise for num_uncompressed_il_bytes here.
      053dc901
    • Srinath Parvathaneni's avatar
Loading