aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-12-02c++: Fix late-parsed default arg contextJason Merrill3-1/+21
Jakub noticed that we weren't recognizing a default argument for a consteval member function as being in immediate function context because there was no function parameter scope to look at. Note that this patch doesn't actually push the parameters into the scope, that happens in a separate commit. gcc/cp/ChangeLog: * name-lookup.c (begin_scope): Set immediate_fn_ctx_p. * parser.c (cp_parser_late_parsing_default_args): Push sk_function_parms scope. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/consteval-defarg1.C: New test.
2020-12-03Add popcount<mode> expander to enable popcount auto vectorization under ↵Hongyu Wang5-0/+188
AVX512BITALG/AVX512POPCNTDQ target. gcc/ChangeLog PR target/97770 * config/i386/sse.md (popcount<mode>2): New expander for SI/DI vector modes. (popcount<mode>2): Likewise for QI/HI vector modes. gcc/testsuite/ChangeLog PR target/97770 * gcc.target/i386/avx512bitalg-pr97770-1.c: New test. * gcc.target/i386/avx512vpopcntdq-pr97770-1.c: Likewise. * gcc.target/i386/avx512vpopcntdq-pr97770-2.c: Likewise. * gcc.target/i386/avx512vpopcntdqvl-pr97770-1.c: Likewise.
2020-12-02introduce overridable clear_cache emitterAlexandre Oliva20-103/+159
This patch introduces maybe_emit_call_builtin___clear_cache for the builtin expander machinery and the trampoline initializers to use to clear the instruction cache, removing a source of inconsistencies and subtle errors in low-level machinery. I've adjusted all trampoline_init implementations that used to issue explicit calls to __clear_cache or similar to use this new primitive. Specifically on vxworks targets, we needed to drop the __clear_cache symbol in libgcc, for reasons related with linking that I didn't need to understand, and we wanted to call cacheTextUpdate directly, despite the different calling conventions: the second argument is a length rather than the end address. So I introduced a target hook to enable target OS-level overriding of builtin __clear_cache call emission, retaining nearly (*) the same logic to govern the decision on whether to emit a call (or nothing, or a machine-dependent insn) but enabling a call to a target system-defined function with different calling conventions to be issued, without having to modify .md files of the various architectures supported by the target system to introduce or modify clear_cache insns. (*) I write "nearly" mainly because, when not optimizing, we'd issue a call regardless, but since the call may now be overridden, I added it to the set of builtins that are not directly turned into calls when not optimizing, following the normal expansion path instead. It wouldn't be hard to skip the emission of cache-clearing insns when not optimizing, but it didn't seem very important, especially for the new uses from trampoline init. Another difference that might be relevant is that now we expand the begin and end arguments unconditionally. This might make a difference if they have side effects. That's prettty much impossible at expand time, but I thought I'd mention it. I have NOT modified targets that did not issue cache-clearing calls in trampoline init to use the new clear_cache-calling infrastructure even if it would expand to nothing. I have considered doing so, to have __builtin___clear_cache and trampoline init call cacheTextUpdate on all vxworks targets, but decided not to, since on targets that don't do any cache clearing, cacheTextUpdate ought to be a no-op, even though rs6000 seems to use icbi and dcbf instructions in the function called to initialize a trampoline, but AFAICT not in the __clear_cache builtin. Hopefully target maintainers will have a look and take advantage of this new piece of infrastructure to remove such (apparent?) inconsistencies. Not rs6000 and other that call asm-coded trampoline setup instructions, for sure, but they might wish to introduce a CLEAR_INSN_CACHE macro or a clear_cache expander if they don't have one. for gcc/ChangeLog * builtins.c (default_emit_call_builtin___clear_cache): New. (maybe_emit_call_builtin___clear_cache): New. (expand_builtin___clear_cache): Split into the above. (expand_builtin): Do not issue clear_cache call any more. * builtins.h (maybe_emit_call_builtin___clear_cache): Declare. * config/aarch64/aarch64.c (aarch64_trampoline_init): Use maybe_emit_call_builtin___clear_cache. * config/arc/arc.c (arc_trampoline_init): Likewise. * config/arm/arm.c (arm_trampoline_init): Likewise. * config/c6x/c6x.c (c6x_initialize_trampoline): Likewise. * config/csky/csky.c (csky_trampoline_init): Likewise. * config/m68k/linux.h (FInALIZE_TRAMPOLINE): Likewise. * config/tilegx/tilegx.c (tilegx_trampoline_init): Likewise. * config/tilepro/tilepro.c (tilepro_trampoline_init): Ditto. * config/vxworks.c: Include rtl.h, memmodel.h, and optabs.h. (vxworks_emit_call_builtin___clear_cache): New. * config/vxworks.h (CLEAR_INSN_CACHE): Drop. (TARGET_EMIT_CALL_BUILTIN___CLEAR_CACHE): Define. * target.def (trampoline_init): In the documentation, refer to maybe_emit_call_builtin___clear_cache. (emit_call_builtin___clear_cache): New. * doc/tm.texi.in: Add new hook point. (CLEAR_CACHE_INSN): Remove duplicate 'both'. * doc/tm.texi: Rebuilt. * targhooks.h (default_meit_call_builtin___clear_cache): Declare. * tree.h (BUILTIN_ASM_NAME_PTR): New. for libgcc/ChangeLog * config/t-vxworks (LIB2ADD): Drop. * config/t-vxworks7 (LIB2ADD): Likewise. * config/vxcache.c: Remove.
2020-12-02options.exp: unsupport tests that depend on missing languageAlexandre Oliva1-0/+5
There's a help.exp test that checks that the help message for -Wabsolute-value mentions it's available in C and ObjC, when compiling a C++ program. However, if GCC is built with the C++ language disabled, the .cc file is compiled as C, and the message [available in C...] becomes [disabled] instead, because that's the default for the flag in C. I suppose it might also be possible to disable the C language, and then the multitude of help.exp tests that name c as the source language will fail. This patch avoids these fails: it detects the message "compiler not installed" in the compiler output, and bails out as "unsupported". for gcc/testsuite/ChangeLog * lib/options.exp (check_for_options_with_filter): Detect unavailable compiler for the selected language, and bail out as unsupported.
2020-12-02Adjust tests even more to avoid ILP32 failures after r11-5622 (PR ↵Martin Sebor3-31/+25
middle-end/97373) gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/builtin-sprintf-warn-1.c: Adjust expected warnings to correctly reflect the maximum object size. * gcc.dg/tree-ssa/builtin-sprintf-warn-11.c: Same. * gcc.dg/tree-ssa/builtin-sprintf-warn-18.c: Same.
2020-12-03tree-ssa-threadbackward.c (profitable_jump_thread_path): Do not allow ↵Ilya Leoshkevich2-1/+52
__builtin_constant_p. Linux Kernel (specifically, drivers/leds/trigger/ledtrig-cpu.c) build with GCC 10 fails on s390 with "impossible constraint". Explanation by Jeff Law: ``` So what we have is a b_c_p at the start of an if-else chain. Subsequent tests on the "true" arm of the the b_c_p test may throw us off the constant path (because the constants are out of range). Once all the tests are passed (it's constant and the constant is in range) the true arm's terminal block has a special asm that requires a constant argument. In the case where we get to the terminal block on the true arm, the argument to the b_c_p is used as the constant argument to the special asm. At first glace jump threading seems to be doing the right thing. Except that we end up with two paths to that terminal block with the special asm, one for each of the two constant arguments to the b_c_p call. Naturally since that same value is used in the asm, we have to introduce a PHI to select between them at the head of the terminal block. Now the argument in the asm is no longer constant and boom we fail. ``` Fix by disallowing __builtin_constant_p on threading paths. gcc/ChangeLog: 2020-06-03 Ilya Leoshkevich <iii@linux.ibm.com> * tree-ssa-threadbackward.c (thread_jumps::profitable_jump_thread_path): Do not allow __builtin_constant_p on a threading path. gcc/testsuite/ChangeLog: 2020-06-03 Ilya Leoshkevich <iii@linux.ibm.com> * gcc.target/s390/builtin-constant-p-threading.c: New test.
2020-12-03Daily bump.GCC Administrator8-1/+572
2020-12-02c++: Treat OPAQUE_TYPE types as an aggregate type [PR97947]Peter Bergner2-0/+13
MODE_OPAQUE and the associated OPAQUE_TYPE were added to stop the optimizers from knowing how the bits in a variable with an opaque type are laid out. This makes them a kind of pseudo aggregate type and we need to treat them as such when we process the INIT initializer for variables with an opaque type. 2020-12-02 Peter Bergner <bergner@linux.ibm.com> gcc/cp/ PR c++/97947 * typeck2.c (digest_init_r): Handle OPAQUE_TYPE as an aggregate type. gcc/testsuite/ PR c++/97947 * g++.target/powerpc/pr97947.C: New test.
2020-12-03dwarf2out: Fix up add_scalar_info not to create invalid DWARFJakub Jelinek1-1/+12
As discussed in https://sourceware.org/bugzilla/show_bug.cgi?id=26987 , for very large bounds (which don't fit into HOST_WIDE_INT) GCC emits invalid DWARF. In DWARF2, DW_AT_{lower,upper}_bound were constant reference class. In DWARF3 they are block constant reference and the Static and Dynamic Properties of Types chapter says: "For a block, the value is interpreted as a DWARF expression; evaluation of the expression yields the value of the attribute." In DWARF4/5 they are constant exprloc reference class. Now, for add_AT_wide we use DW_FORM_data16 (valid in constant class) when -gdwarf-5, but otherwise just use DW_FORM_block1, which is not constant class, but block. For DWARF3 this means emitting clearly invalid DWARF, because the DW_FORM_block1 should contain a DWARF expression, not random bytes containing the constant directly. For DWARF2/DWARF4/5 it could be considered a GNU extension, but a very badly designed one when it means something different in DWARF3. The following patch uses add_AT_wide only if we know we'll be using DW_FORM_data16, and otherwise wastes 2 extra bytes and emits in there DW_OP_implicit_value <size> before the constant. 2020-12-03 Jakub Jelinek <jakub@redhat.com> * dwarf2out.c (add_scalar_info): Only use add_AT_wide for 128-bit constants and only in dwarf-5 or later, where DW_FORM_data16 is available. Otherwise use DW_FORM_block*/DW_FORM_exprloc with DW_OP_implicit_value to describe the constant.
2020-12-03c++: Implement LWG3396 Clarify point of reference for ↵Jakub Jelinek9-15/+500
source_location::current() [PR80780, PR93093] While std::source_location::current () is static consteval source_location current() noexcept; in the standard, it also says with LWG3396: "Any call to current that appears as a default member initializer ([class.mem]), or as a subexpression thereof, should correspond to the location of the constructor definition or aggregate initialization that uses the default member initializer. Any call to current that appears as a default argument ([dcl.fct.default]), or as a subexpression thereof, should correspond to the location of the invocation of the function that uses the default argument ([expr.call])." so it must work as compiler magic rather than normal immediate functions, in particular we need to defer its evaluation when parsing default arguments or nsdmis. This patch actually defers evaluation of all the calls to std::source_location::current () until genericization (or constant expression evaluation when called from constant expression contexts). I had to change constexpr.c too so that it temporarily adjusts current_function_decl from the constexpr evaluation context, but we do the same already from __builtin_FUNCTION (). 2020-12-03 Jakub Jelinek <jakub@redhat.com> PR c++/80780 PR c++/93093 * cp-tree.h (source_location_current_p): Declare. * tree.c (source_location_current_p): New function. * call.c (immediate_invocation_p): New function. (build_over_call): Use it to resolve LWG3396. * constexpr.c (cxx_eval_builtin_function_call): Temporarily set current_function_decl from ctx->call->fundef->decl if any. * cp-gimplify.c (cp_genericize_r) <case CALL_EXPR>: Fold calls to immediate function std::source_location::current (). * g++.dg/cpp2a/srcloc15.C: New test. * g++.dg/cpp2a/srcloc16.C: New test. * g++.dg/cpp2a/srcloc17.C: New test. * g++.dg/cpp2a/srcloc18.C: New test.
2020-12-02rtl-optimization: Fix data flow maintenance bug in reg-stack.c [pr97777]qing zhao2-1/+11
reg-stack pass does not maintain the data flow information correctly. call df_insn_rescan_all after the transformation is done. gcc/ PR rtl-optimization/97777 * reg-stack.c (rest_of_handle_stack_regs): call df_insn_rescan_all if reg_to_stack return true. gcc/testsuite/ PR rtl-optimization/97777 * gcc.target/i386/pr97777.c: New test.
2020-12-02libstdc++: Fix std::any pretty printer [PR 68735]Jonathan Wakely1-3/+26
This fixes errors seen on powerpc64 (big endian only) due to the printers for std::any and std::experimental::any being unable to find the manager function. libstdc++-v3/ChangeLog: PR libstdc++/65480 PR libstdc++/68735 * python/libstdcxx/v6/printers.py (function_pointer_to_name): New helper function to get the name of a function from its address. (StdExpAnyPrinter.__init__): Use it.
2020-12-02c++: Give better placeholder diagnosticJason Merrill3-1/+24
We were saying 'auto parameter not permitted' in a place where 'auto' is in fact permitted in C++20, but a class template placeholder is not. gcc/cp/ChangeLog: * decl.c (grokdeclarator): Improve diagnostic for disallowed CTAD placeholder. gcc/testsuite/ChangeLog: * g++.dg/other/pr88187.C: Adjust expected error. * g++.dg/cpp2a/class-deduction-abbrev1.C: New test.
2020-12-02c++: Improve init handlingJason Merrill1-3/+11
While looking at another issue I noticed that in a template we were failing to find the INIT_EXPR we were looking for, and so ended up doing redundant processing. No testcase, as the redundant processing ended up getting the right result. gcc/cp/ChangeLog: * decl.c (check_initializer): Also look through STMT_EXPR and BIND_EXPR.
2020-12-02c++: typename_type structural comparisonNathan Sidwell3-12/+19
For modules we need to compare structurally all the way down. This means inhibiting typename_type resolution, independent of comparing specializations. gcc/cp/ * cp-tree.h (comparing_typenames): Declare. * pt.c (comparing_typenames): Define. (spec_hasher::equal): Increment it around comparisons. * typeck.c (structural_comptypes): Adjust TYPENAME resolution check.
2020-12-02git: Tell git send-email where to send patches.Jason Merrill1-0/+4
I've been using git send-email --annotate --suppress-from --to=gcc-patches@gcc.gnu.org \ ${@:-HEAD^} ':!*/ChangeLog' ':!*configure' for sending most patches, but it occurs to me that it would be useful to put the To: address in the configury. If someone were feeling ambitious, they could write a script to analyze a patch and add the relevant maintainers to To: or CC:. contrib/ChangeLog: * gcc-git-customization.sh: Configure sendemail.to.
2020-12-02c++: Fix ICE with inline variable in template [PR97975]Marek Polacek4-6/+27
In this test, we have static inline const int c = b; in a class template, and we call store_init_value as usual. There, the value is IMPLICIT_CONV_EXPR<const float>(b) which is is_nondependent_static_init_expression but isn't is_nondependent_constant_expression (they only differ in STRICT). We call fold_non_dependent_expr, but that just returns the expression because it only instantiates is_nondependent_constant_expression expressions. Since we're not checking the initializer of a constexpr variable, we go on to call maybe_constant_init, whereupon we crash because it tries to evaluate all is_nondependent_static_init_expression expressions, which our value is, but it still contains a template code. I think the fix is to call fold_non_dependent_init instead of maybe_constant_init, and only call fold_non_dependent_expr on the "this is a constexpr variable" path so as to avoid instantiating twice in a row. Outside a template this should also avoid evaluating the value twice. gcc/cp/ChangeLog: PR c++/97975 * constexpr.c (fold_non_dependent_init): Add a tree parameter. Use it. * cp-tree.h (fold_non_dependent_init): Add a tree parameter with a default value. * typeck2.c (store_init_value): Call fold_non_dependent_expr only when checking the initializer for constexpr variables. Call fold_non_dependent_init instead of maybe_constant_init. gcc/testsuite/ChangeLog: PR c++/97975 * g++.dg/cpp1z/inline-var8.C: New test.
2020-12-02c++: Fix tsubst ICE with invalid code [PR97993, PR97187]Marek Polacek3-0/+28
I had a strong sense of deja vu when looking into this, and no wonder, since this is almost identical to c++/95728. Since r11-423 tsubst_copy_and_build/TREE_LIST uses tsubst_tree_list instead of open coding it. While the latter could return an error node wrapped in a TREE_LIST, the former can return a naked error node. That broke in tsubst_copy_and_build/NEW_EXPR, because we were accessing TREE_VALUE of an error node. gcc/cp/ChangeLog: PR c++/97187 PR c++/97993 * pt.c (tsubst_copy_and_build) <case NEW_EXPR>: Return error_mark_node if init is erroneous. gcc/testsuite/ChangeLog: PR c++/97187 PR c++/97993 * g++.dg/eh/crash2.C: New test. * g++.dg/template/crash132.C: New test.
2020-12-02C++: Module-specific tree flagsNathan Sidwell1-5/+57
gcc/cp/ * cp-tree.h (DECL_MODULE_PURVIEW_P, DECL_MODULE_IMPORT_P) (DECL_MODULE_ENTITY_P): New. (DECL_MODULE_PENDING_SPECIALIZATIONS_P): New. (DECL_MODULE_PENDING_MEMBERS_P): New. (DECL_MODULE_ATTACHMENTS_P): New. (DECL_MODULE_EXPORT_P): New. (struct lang_decl_base): Shrink sel field. Add new module-specific fields.
2020-12-02libbacktrace: correct buffer overflow testsIan Lance Taylor1-2/+2
* dwarf.c (resolve_string): Use > rather than >= to check whether string index extends past buffer. (resolve_addr_index): Similarly for address index.
2020-12-02Adjust test to avoid ILP32 failures after r11-5622 (PR middle-end/97373)Martin Sebor3-18/+33
gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/builtin-sprintf-warn-1.c: Adjust expected warnings to correctly reflect the maximum object size. * gcc.dg/tree-ssa/builtin-sprintf-warn-11.c: Same. * gcc.dg/tree-ssa/builtin-sprintf-warn-18.c: Same.
2020-12-02IBM Z: Use llihf and oilf to load large immediates into GPRsIlya Leoshkevich5-0/+83
Currently GCC loads large immediates into GPRs from the literal pool, which is not as efficient as loading two halves with llihf and oilf. gcc/ChangeLog: 2020-11-30 Ilya Leoshkevich <iii@linux.ibm.com> * config/s390/s390-protos.h (s390_const_int_pool_entry_p): New function. * config/s390/s390.c (s390_const_int_pool_entry_p): New function. * config/s390/s390.md: Add define_peephole2 that produces llihf and oilf. gcc/testsuite/ChangeLog: 2020-11-30 Ilya Leoshkevich <iii@linux.ibm.com> * gcc.target/s390/load-imm64-1.c: New test. * gcc.target/s390/load-imm64-2.c: New test.
2020-12-02Sync .gitignore with binutils-gdbSimon Marchi1-0/+7
* .gitignore: Sync with binutils-gdb
2020-12-02Go testsuite: update semi6.go from source repoIan Lance Taylor1-5/+3
This should have been part of c7932d5626a81a35686a3992b5a02570aba5cd0b, but I forgot.
2020-12-02libstdc++: Use libatomic for tests on all 32-bit powerpc targetsJonathan Wakely1-4/+5
In addition to the existing powerpc targets, powerpc64 needs libatomic for 64-bit atomics when testing the 32-bit multilib with -m32. Adjust the existing target checks to match all 32-bit powerpc targets, but not 64-bit ones. libstdc++-v3/ChangeLog: * testsuite/lib/dg-options.exp (add_options_for_libatomic): Replace powerpc-ibm-aix* and powerpc*-*-darwin* with check for powerpc && ilp32.
2020-12-02c++: RTTI accessors for modulesNathan Sidwell2-4/+38
The module machinery needs to serialize tinfo types and vars by meaning, not literally. This adds the necessary pieces to rtti. gcc/cp/ * cp-tree.h (DECL_TINFO_P): Also for TYPE_DECLs. (get_tinfo_decl_direct): Declare. (get_pseudo_tinfo_index, get_pseudo_tinfo_type): Declare. * rtti.c (get_tinfo_decl_direct): Externalize. (get_tinfo_desc): Set DECL_TINFO_P on the typedef. (get_pseudo_tinfo_index, get_pseudo_tinfo_type): New.
2020-12-02compiler: reword "declared and not used" error messageIan Lance Taylor5-18/+8
This is a gofrontend copy of https://golang.org/cl/203282. From the CL 203282 description: "declared and not used" is technically correct, but might confuse the user. Switching "and" to "but" will hopefully create the contrast for the users: they did one thing (declaration), but not the other --- actually using the variable. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273629
2020-12-02compiler: improve mixed named/unnamed parameter error messageIan Lance Taylor3-5/+5
Use the same error as the current gc compiler. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273628
2020-12-02compiler: don't advance past unexpected semicolonIan Lance Taylor2-2/+1
We've already read the unexpected semicolon, so advancing again causes us to skip the next token, causing future errors to be out of sync. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/274439
2020-12-02Upgrade ACATS testsuite to latest ACATS 2.6Eric Botcazou30-484/+3475
This upgrades the ACATS tesuite present in ada/acats from 2.5 to latest 2.6, removing 3 tests and adding 11 tests, some of them written very recently. gcc/testsuite/ChangeLog: * ada/acats/support/acats25.lst: Delete. * ada/acats/support/acats26.lst: New file. * ada/acats/support/fcndecl.ada: Minor tweak. * ada/acats/support/impdef.a: Add commentary. * ada/acats/support/impdefg.a (Negative_Zero return): Simplify. * ada/acats/support/macro.dfs (TASK_STORAGE_SIZE): Bump. * ada/acats/support/repbody.ada: Upgrade to ACATS 2.6. * ada/acats/support/tctouch.ada: Likewise. * ada/acats/tests/c3/c352001.a: New file. * ada/acats/tests/c4/c433001.a: Correct error messages. * ada/acats/tests/c4/c453001.a: New file. * ada/acats/tests/c4/c45622a.ada: Delete. * ada/acats/tests/c4/c45624a.ada: Likewise. * ada/acats/tests/c4/c45624b.ada: Likewise. * ada/acats/tests/c4/c460013.a: New file. * ada/acats/tests/c4/c460014.a: Likewise. * ada/acats/tests/c6/c620001.a: Likewise. * ada/acats/tests/c6/c620002.a: Likewise. * ada/acats/tests/c7/c761006.a: Redo Unchecked_Deallocation case. * ada/acats/tests/c9/c96004a.ada: Adjust for Ada 2005. * ada/acats/tests/c9/c96007a.ada: Likewise. * ada/acats/tests/cb/cb41004.a: Adjust for AI95-0044. * ada/acats/tests/cc/cc3016f.ada: Minor tweak. * ada/acats/tests/cd/cd30011.a: New file. * ada/acats/tests/cd/cd30012.a: Likewise. * ada/acats/tests/cd/cd90001.a: Fix comparison. * ada/acats/tests/cxa/cxa3004.a: New file. * ada/acats/tests/cxa/cxa5013.a: Likewise. * ada/acats/tests/cxa/cxac005.a: Adjust for return-by-reference. * ada/acats/tests/cxb/cxb30061.am: New file. * ada/acats/tests/cxf/cxf2001.a: Fix failure message.
2020-12-02c++: Add lang_decl, type_decl APINathan Sidwell2-7/+8
We need to call the lang_decl and type_decl creators from the module loading machinery. This makes them reachable. gcc/cp/ * cp-tree.h (maybe_add_lang_decl_raw, maybe_add_lang_type_raw): Declare. * lex.c (maybe_add_lang_decl_raw, maybe_add_lang_type_raw): Externalize, reformat.
2020-12-02c++: Extend build_array_type APINathan Sidwell2-12/+20
The modules machinery needs to construct array types, and that wanted to determine type dependency. That doesn't work during loading, but the module loader can stream that fact too and tell the array builder. Thus this extends the API to allow a caller to specify the dependency explicitly. The call in cp_build_qualified_type_real is unreachable during the loading, so that one's ok as is. gcc/cp/ * cp-tree.h (build_cplus_array_type): Add defaulted DEP parm. * tree.c (set_array_type_common): Add DEP parm. (build_cplus_array_type): Add DEP parm, determine dependency if needed. (cp_build_qualified_type_real): Adjust array-building call. (strip_typedefs): Likewise.
2020-12-02c++: Fix bootstrapNathan Sidwell1-3/+3
I made the prefix for dumping a binding-vector slightly too small. Fixed thusly. gcc/cp/ * ptree.c (cxx_print_xnode): Increase binding-vector prefix size.
2020-12-02tree-optimization/97630 - fix SLP cycle memory leakRichard Biener3-10/+39
This fixes SLP cycles leaking memory by maintaining a double-linked list of allocatd SLP nodes we can zap when we free the alloc pool. 2020-12-02 Richard Biener <rguenther@suse.de> PR tree-optimization/97630 * tree-vectorizer.h (_slp_tree::next_node, _slp_tree::prev_node): New. (vect_slp_init): Declare. (vect_slp_fini): Likewise. * tree-vectorizer.c (vectorize_loops): Call vect_slp_init/fini. (pass_slp_vectorize::execute): Likewise. * tree-vect-slp.c (vect_slp_init): New. (vect_slp_fini): Likewise. (slp_first_node): New global. (_slp_tree::_slp_tree): Link node into the SLP tree list. (_slp_tree::~_slp_tree): Delink node from the SLP tree list.
2020-12-02vec.h: Fix GCC build with -std=gnu++20 [PR98059]Scott Snyder1-1/+1
Apparently vec.h doesn't build with -std=c++20/gnu++20, since the DR2237 r11-532 change. template <typename T> class auto_delete_vec { private: auto_vec_delete<T> (const auto_delete_vec<T> &) = delete; }; which vec.h uses is invalid C++20, one needs to use auto_vec_delete (const auto_delete_vec &) = delete; instead which is valid all the way back to C++11 (and without = delete to C++98). 2020-12-02 Scott Snyder <sss@li-snyder.org> PR plugins/98059 * vec.h (auto_delete_vec): Use DISABLE_COPY_AND_ASSIGN(auto_delete_vec) instead of DISABLE_COPY_AND_ASSIGN(auto_delete_vec<T>) to make it valid C++20 after DR2237.
2020-12-02C++ Module Binding VectorNathan Sidwell6-2/+185
This adds the vector necessary to hold different module's namespace bindings. We add a new tree-node 'tree_binding_vec', which contains a sparse array, indexed by module number. To avoid space wasting, this is allocated in clusters using 'unsigned short' as the index value (so that's one of the upper bounds on module importing). If there are only bindings from the current TU, there is no vector, so we have the same representation as a non-module compilation. To support lazy loading, a binding slot can contain either a tree (the binding), or a cookie that the module machinery uses to load the required binding on demand. The first 2 or 3 slots end up being reserved for fixed meanings. There are a couple of flags we have to record on a binding, to know whether the same declaration could appear in two different slots. gcc/cp/ * cp-tree.def (BINDING_VECTOR): New. * name-lookup.h (struct binding_slot): New. (BINDING_VECTOR_SLOTS_PER_CLUSTER): New. (struct binding_index, struct binding_cluster): New. (BINDING_VECTOR_ALLOC_CLUSTERS, BINDING_VECTOR_CLUSTER_BASE) (BINDING_VECTOR_CLUSTER): New. (struct tree_binding_vec): New. (BINDING_VECTOR_NAME, BINDING_VECTOR_GLOBAL_DUPS_P) (BINDING_VECTOR_PARTITION_DUPS_P): New. (BINDING_BINDING_GLOBAL_P, BINDING_BINDING_PARTITION_P): New. (BINDING_VECTOR_PENDING_SPECIALIZATIONS) (BINDING_VECTOR_PENDING_IS_HEADER_P) (BINDING_VECTOR_PENDING_IS_PARTITION_P): New. * cp-tree.h (enum cp_tree_node_structure_enum): Add TS_CP_BINDING_VECTOR. (union lang_tree_node): Add binding_vec field. (make_binding_vec): Declare. (named_decl_hash::hash, named_decl_hash::equal): Check for binding vector. * decl.c (cp_tree_node_structure): Add BINDING_VECTOR case. * ptree.c (cxx_print_xnode): Add BINDING_VECTOR case. * tree.c (make_binding_vec): New.
2020-12-02MAINTAINERS: Add myself as arc port maintainerClaudiu Zissulescu1-0/+1
2020-12-02 Claudiu Zissulescu <claziss@gmail.com> * MAINTAINERS: Add myself as arc port maintainer.
2020-12-02ipa: do not DECL_IS_MALLOC for void fnsMartin Liska3-1/+34
gcc/ChangeLog: PR ipa/98075 * cgraph.c (cgraph_node::dump): Dump decl_is_malloc flag. * ipa-pure-const.c (propagate_malloc): Do not set malloc attribute for void functions. gcc/testsuite/ChangeLog: PR ipa/98075 * g++.dg/ipa/pr98075.C: New test.
2020-12-02Use the section flag 'o' for __patchable_function_entriesH.J. Lu10-2/+180
This commit in GNU binutils 2.35: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=b7d072167715829eed0622616f6ae0182900de3e added the section flag 'o' to .section directive: .section __patchable_function_entries,"awo",@progbits,foo which specifies the symbol name which the section references. Assembler creates a unique __patchable_function_entries section with the section, where foo is defined, as its linked-to section. Linker keeps a section if its linked-to section is kept during garbage collection. This patch checks assembler support for the section flag 'o' and uses it to implement __patchable_function_entries section. Since Solaris may use GNU assembler with Solairs ld. Even if GNU assembler supports the section flag 'o', it doesn't mean that Solairs ld supports it. This feature is disabled for Solairs targets. gcc/ PR middle-end/93195 PR middle-end/93197 * configure.ac (HAVE_GAS_SECTION_LINK_ORDER): New. Define 1 if the assembler supports the section flag 'o' for specifying section with link-order. * output.h (SECTION_LINK_ORDER): New. Defined to 0x8000000. (SECTION_MACH_DEP): Changed from 0x8000000 to 0x10000000. * targhooks.c (default_print_patchable_function_entry): Pass SECTION_LINK_ORDER to switch_to_section if the section flag 'o' works. Pass current_function_decl to switch_to_section. * varasm.c (default_elf_asm_named_section): Use 'o' flag for SECTION_LINK_ORDER if assembler supports it. * config.in: Regenerated. * configure: Likewise. * doc/sourcebuild.texi: Document o_flag_in_section. gcc/testsuite/ PR middle-end/93195 * g++.dg/pr93195a.C: New test. * g++.dg/pr93195b.C: Likewise. * lib/target-supports.exp (check_effective_target_o_flag_in_section): New proc.
2020-12-02x86: Add the missing '.' for -mneededH.J. Lu1-1/+1
* config/i386/i386.opt: Add the missing '.' for -mneeded.
2020-12-02libstdc++: Use longer timeout for istream::gcount() overflow testsJonathan Wakely2-0/+2
On targets with 32-bit poitners these tests do extra work, so give them longer to run. libstdc++-v3/ChangeLog: * testsuite/27_io/basic_istream/ignore/char/94749.cc: Add dg-timeout-factor for ilp32 targets. * testsuite/27_io/basic_istream/ignore/wchar_t/94749.cc: Likewise.
2020-12-02libstdc++: Fix null pointer dereferences in __gnu_cxx::ropeJonathan Wakely2-23/+31
This fixes UBsan errors like: /usr/include/c++/10/ext/ropeimpl.h:593:9: runtime error: member access within null pointer of type 'struct _RopeRep' /usr/include/c++/10/ext/ropeimpl.h:593:9: runtime error: member call on null pointer of type 'struct _Rope_rep_base' /usr/include/c++/10/ext/rope:556:17: runtime error: reference binding to null pointer of type 'struct allocator_type' /usr/include/c++/10/ext/ropeimpl.h:593:9: runtime error: reference binding to null pointer of type 'struct allocator_type' /usr/include/c++/10/ext/rope:1700:30: runtime error: member call on null pointer of type 'struct new_allocator' /usr/include/c++/10/ext/new_allocator.h:105:29: runtime error: member call on null pointer of type 'struct new_allocator' /usr/include/c++/10/ext/rope:1702:26: runtime error: reference binding to null pointer of type 'const struct allocator' /usr/include/c++/10/bits/allocator.h:148:34: runtime error: reference binding to null pointer of type 'const struct new_allocator' /usr/include/c++/10/ext/rope:1664:39: runtime error: reference binding to null pointer of type 'const struct allocator' /usr/include/c++/10/ext/rope:1665:9: runtime error: reference binding to null pointer of type 'const struct allocator_type' /usr/include/c++/10/ext/rope:725:36: runtime error: reference binding to null pointer of type 'const struct allocator_type' /usr/include/c++/10/ext/rope:614:64: runtime error: reference binding to null pointer of type 'const struct allocator_type' The problem is calling r->_M_get_allocator() when r is null. libstdc++-v3/ChangeLog: * include/ext/rope (rope::_S_concat_char_iter) (rope::_S_destr_concat_char_iter): Add allocator parameter. (rope::push_back, rope::append, rope::insert, operator+): Pass allocator. * include/ext/ropeimpl.h (rope::_S_concat_char_iter) (rope::_S_destr_concat_char_iter): Add allocator parameter and use it. (_Rope_char_ref_proxy::operator=(_CharT)): Pass allocator.
2020-12-02libstdc++: Fix indentation in ropeJonathan Wakely1-4/+4
libstdc++-v3/ChangeLog: * include/ext/rope: Fix indentation of access specifiers.
2020-12-02Add new test-case.Martin Liska1-0/+21
gcc/testsuite/ChangeLog: PR tree-optimization/98084 * gcc.dg/tree-ssa/pr98094.c: New test.
2020-12-02guard maybe_set_vectorized_backedge_value callsRichard Biener1-11/+13
This makes sure to not call maybe_set_vectorized_backedge_value when we did not vectorize the latch def candidate. 2020-12-02 Richard Biener <rguenther@suse.de> * tree-vect-loop.c (vect_transform_loop_stmt): Return whether we vectorized a stmt. (vect_transform_loop): Only call maybe_set_vectorized_backedge_value when we vectorized the stmt.
2020-12-02expansion: Fix up infinite recursion due to double-word modulo optimizationJakub Jelinek5-38/+53
Jeff has reported that my earlier patch broke rl78-elf, e.g. with unsigned short foo (unsigned short x) { return x % 7; } when compiled with -O2 -mg14. The problem is that rl78 is a BITS_PER_WORD == 8 target which doesn't have 8-bit modulo or divmod optab, but has instead 16-bit divmod, so my patch attempted to optimize it, then called expand_divmod to do 8-bit modulo and that in turn tried to do 16-bit modulo again. The following patch fixes it in two ways. One is to not perform the optimization when we have {u,s}divmod_optab handler for the double-word mode, in that case it is IMHO better to just do whatever we used to do before. This alone should fix the infinite recursion. But I'd be afraid some other target might have similar problem and might not have a divmod pattern, but only say a library call. So the patch also introduces a methods argument to expand_divmod such that normally we allow everything that was allowed before (using libcalls and widening), but when called from these expand_doubleword*mod routines we restrict it to no widening and no libcalls. 2020-12-02 Jakub Jelinek <jakub@redhat.com> * expmed.h (expand_divmod): Only declare if GCC_OPTABS_H is defined. Add enum optabs_method argument defaulted to OPTAB_LIB_WIDEN. * expmed.c: Include expmed.h after optabs.h. (expand_divmod): Add methods argument, if it is not OPTAB_{,LIB_}WIDEN, don't choose a wider mode, and pass it to other calls instead of hardcoded OPTAB_LIB_WIDEN. Avoid emitting libcalls if not OPTAB_LIB or OPTAB_LIB_WIDEN. * optabs.c: Include expmed.h after optabs.h. (expand_doubleword_mod, expand_doubleword_divmod): Pass OPTAB_DIRECT as last argument to expand_divmod. (expand_binop): Punt if {s,u}divmod_optab has handler for double-word int_mode. * expr.c: Include expmed.h after optabs.h. * explow.c: Include expmed.h after optabs.h.
2020-12-02expansion: Further improve double-word modulo, division and divmod [PR97459]Jakub Jelinek10-34/+414
The following patch implements what Thomas wrote about, in particular that we can handle also double-word divison by the constants for which the earlier patch optimized modulo (if it would be otherwise a library call) and that we can also easily handle such constants shifted to the left. Unfortunately, seems CSE isn't able to optimize away the two almost identical sequences (one to compute remainder, one to compute quotient), probably because of the ADD_OVERFLOW introduced jumps, so the patch also adjusts expand_DIVMOD. 2020-12-02 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/97459 * optabs.h (expand_doubleword_divmod): Declare. * optabs.c (expand_doubleword_divmod): New function. (expand_binop): Use it. * internal-fn.c (expand_DIVMOD): Likewise. * gcc.target/i386/pr97282.c (foo): Use 123456 divisor instead of 10. * gcc.dg/pr97459-1.c (TESTS): Add tests for 10, 12 and 6144. * gcc.dg/pr97459-2.c (TESTS): Likewise. * gcc.dg/pr97459-3.c: New test. * gcc.dg/pr97459-4.c: New test. * gcc.dg/pr97459-5.c: New test. * gcc.dg/pr97459-6.c: New test.
2020-12-02Fix __builtin_clear_padding for empty struct.Martin Liska2-0/+16
gcc/ChangeLog: PR c/98087 * gimple-fold.c (clear_padding_type): Do not divide by zero. gcc/testsuite/ChangeLog: PR c/98087 * gcc.c-torture/compile/pr98087.c: New test.
2020-12-02GDB hooks: improve documentationMartin Liska1-19/+19
gcc/ChangeLog: * gdbinit.in: Write what each command calls for a debugging function.
2020-12-02rs6000: Disable HTM for Power10 and later by defaultKewen Lin2-6/+9
Power ISA 3.1 has dropped transactional memory support, this patch is to disable HTM feature for power10 and later by default. Bootstrapped/regtested on powerpc64le-linux-gnu P8 and P10. gcc/ChangeLog: * config/rs6000/rs6000.c (rs6000_option_override_internal): Use OPTION_MASK_DIRECT_MOVE for Power8 target_enable instead of OPTION_MASK_HTM. * config/rs6000/rs6000-cpus.def (ISA_2_7_MASKS_SERVER): Remove OPTION_MASK_HTM. (RS6000_CPU): Add OPTION_MASK_HTM to power8, power9 and powerpc64le entries.