Commit Graph

181833 Commits

Author SHA1 Message Date
Jason Merrill
d9288bd28e c++: Improve init handling
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-02 16:14:21 -05:00
Nathan Sidwell
07589ca2b2 c++: typename_type structural comparison
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-02 12:59:05 -08:00
Jason Merrill
4ed34c60a8 git: Tell git send-email where to send patches.
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-02 14:41:02 -05:00
Marek Polacek
69bf1c7d5e c++: Fix ICE with inline variable in template [PR97975]
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-02 14:36:26 -05:00
Marek Polacek
4192ffd74c c++: Fix tsubst ICE with invalid code [PR97993, PR97187]
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-02 14:34:38 -05:00
Nathan Sidwell
c68cae86bb C++: Module-specific tree flags
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-02 11:25:18 -08:00
Ian Lance Taylor
8f461a883b libbacktrace: correct buffer overflow tests
* dwarf.c (resolve_string): Use > rather than >= to check whether
	string index extends past buffer.
	(resolve_addr_index): Similarly for address index.
2020-12-02 11:07:59 -08:00
Martin Sebor
0a7dc4b644 Adjust test to avoid ILP32 failures after r11-5622 (PR 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-02 11:32:50 -07:00
Ilya Leoshkevich
9776b4653b IBM Z: Use llihf and oilf to load large immediates into GPRs
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-02 19:10:34 +01:00
Simon Marchi
cf44255583 Sync .gitignore with binutils-gdb
* .gitignore: Sync with binutils-gdb
2020-12-02 11:04:01 -07:00
Ian Lance Taylor
98e89dcf95 Go testsuite: update semi6.go from source repo
This should have been part of c7932d5626,
but I forgot.
2020-12-02 09:44:10 -08:00
Jonathan Wakely
dd053eea0b libstdc++: Use libatomic for tests on all 32-bit powerpc targets
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-02 16:37:56 +00:00
Nathan Sidwell
af41805138 c++: RTTI accessors for modules
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-02 08:31:37 -08:00
Ian Lance Taylor
5bd5d85117 compiler: reword "declared and not used" error message
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-02 08:30:43 -08:00
Ian Lance Taylor
ed281e4a94 compiler: improve mixed named/unnamed parameter error message
Use the same error as the current gc compiler.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/273628
2020-12-02 08:27:34 -08:00
Ian Lance Taylor
c7932d5626 compiler: don't advance past unexpected semicolon
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-02 07:47:06 -08:00
Eric Botcazou
f0a2d11f8a Upgrade ACATS testsuite to latest ACATS 2.6
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-02 16:43:27 +01:00
Nathan Sidwell
0fc6469d24 c++: Add lang_decl, type_decl API
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-02 07:40:49 -08:00
Nathan Sidwell
329ae1d775 c++: Extend build_array_type API
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-02 07:35:23 -08:00
Nathan Sidwell
744ca1bf1c c++: Fix bootstrap
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-02 07:31:40 -08:00
Richard Biener
feb93adf76 tree-optimization/97630 - fix SLP cycle memory leak
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-02 15:55:18 +01:00
Scott Snyder
bad800c03d vec.h: Fix GCC build with -std=gnu++20 [PR98059]
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-02 15:42:56 +01:00
Nathan Sidwell
05f7a2afe8 C++ Module Binding Vector
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-02 06:19:43 -08:00
Claudiu Zissulescu
6725994fe9 MAINTAINERS: Add myself as arc port maintainer
2020-12-02  Claudiu Zissulescu  <claziss@gmail.com>

	* MAINTAINERS: Add myself as arc port maintainer.
2020-12-02 16:09:21 +02:00
Martin Liska
f5850e7da9 ipa: do not DECL_IS_MALLOC for void fns
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-02 15:03:26 +01:00
H.J. Lu
694d4a6d0c Use the section flag 'o' for __patchable_function_entries
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-02 05:32:37 -08:00
H.J. Lu
a1ebd4f9f7 x86: Add the missing '.' for -mneeded
* config/i386/i386.opt: Add the missing '.' for -mneeded.
2020-12-02 05:23:02 -08:00
Jonathan Wakely
8b2c3b5af3 libstdc++: Use longer timeout for istream::gcount() overflow tests
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-02 12:34:20 +00:00
Jonathan Wakely
74270a546c libstdc++: Fix null pointer dereferences in __gnu_cxx::rope
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-02 12:29:00 +00:00
Jonathan Wakely
d38fbb5a86 libstdc++: Fix indentation in rope
libstdc++-v3/ChangeLog:

	* include/ext/rope: Fix indentation of access specifiers.
2020-12-02 12:28:22 +00:00
Martin Liska
d01ebe56c2 Add new test-case.
gcc/testsuite/ChangeLog:

	PR tree-optimization/98084
	* gcc.dg/tree-ssa/pr98094.c: New test.
2020-12-02 13:08:56 +01:00
Richard Biener
a35d5e9365 guard maybe_set_vectorized_backedge_value calls
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-02 12:39:32 +01:00
Jakub Jelinek
e34153b0e2 expansion: Fix up infinite recursion due to double-word modulo optimization
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-02 11:40:47 +01:00
Jakub Jelinek
037fe26ee1 expansion: Further improve double-word modulo, division and divmod [PR97459]
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-02 11:40:47 +01:00
Martin Liska
337d636245 Fix __builtin_clear_padding for empty struct.
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-02 11:32:54 +01:00
Martin Liska
ee42f826b9 GDB hooks: improve documentation
gcc/ChangeLog:

	* gdbinit.in: Write what each command calls
	for a debugging function.
2020-12-02 11:31:09 +01:00
Kewen Lin
82800987cb rs6000: Disable HTM for Power10 and later by default
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.
2020-12-02 01:55:34 -06:00
Uros Bizjak
018248ef6d i386: Fix abs an maxmin expanders for TARGET_PARTIAL_REG_STALL [PR98079].
QImode shold be enabled only for !TARGET_PARTIAL_REG_STALL

2020-12-02  Uroš Bizjak  <ubizjak@gmail.com>

	PR target/98079

gcc/
	* config/i386/i386.md (abs<mode>2): Enable QImode
	only for !TARGET_PARTIAL_REG_STALL.
	(*abs<mode>2_1): Ditto.
	(<maxmin:code><mode>3): Ditto.
	(*<maxmin:code><mode>3_1): Ditto.

gcc/testsuite/
	* gcc.target/i386/pr98079.c: New test.
2020-12-02 08:28:11 +01:00
Martin Liska
49ca22dd67 diagnostics: ignore -fmax-errors for ICE
Right now I see:
./xgcc -B. ~/Programming/testcases/json.i -c -O2 -fmax-errors=1
/home/marxin/Programming/testcases/json.i: In function ‘json_variant_type’:
/home/marxin/Programming/testcases/json.i:22:1: error: non-integral type switch statement
   22 | }
      | ^
int *
switch (v_2(D)) <default: <L16> [INV], case 0B: <L11> [INV], case 5B: <L12> [INV], case 6B: <L13> [INV], case 7B: <L14> [INV], case 8B: <L15> [INV]>
compilation terminated due to -fmax-errors=1.

with the patch I get:

./xgcc -B. ~/Programming/testcases/json.i -c -O2 -fmax-errors=1 -c
/home/marxin/Programming/testcases/json.i: In function ‘json_variant_type’:
/home/marxin/Programming/testcases/json.i:22:1: error: non-integral type switch statement
   22 | }
      | ^
int *
switch (v_2(D)) <default: <L16> [INV], case 0B: <L11> [INV], case 5B: <L12> [INV], case 6B: <L13> [INV], case 7B: <L14> [INV], case 8B: <L15> [INV]>
during GIMPLE pass: iftoswitch
/home/marxin/Programming/testcases/json.i:22:1: internal compiler error: verify_gimple failed
0xe4478c verify_gimple_in_cfg(function*, bool)
	/home/marxin/Programming/gcc/gcc/tree-cfg.c:5467
0xd201cf execute_function_todo
	/home/marxin/Programming/gcc/gcc/passes.c:2042
0xd2101c do_per_function
	/home/marxin/Programming/gcc/gcc/passes.c:1687
0xd2101c execute_todo
	/home/marxin/Programming/gcc/gcc/passes.c:2096
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

gcc/ChangeLog:

	* diagnostic.c (diagnostic_report_diagnostic): ICE causes to
	terminate compiler immediately, so I guess it should be printed
	always.
2020-12-02 08:21:25 +01:00
Martin Liska
c961e94901 if-to-switch: Support chain with 2 BBs.
As seen in the test-case, even 2 BBs can handle interesting
cases covered by a jump table or a bit-test.

gcc/ChangeLog:

	PR tree-optimization/88702
	* gimple-if-to-switch.cc (pass_if_to_switch::execute):
	Require at least 2 BBs.
	* gimple-if-to-switch.cc (find_conditions): Require
	equal precision for low and high of a range.

gcc/testsuite/ChangeLog:

	PR tree-optimization/88702
	* gcc.dg/tree-ssa/if-to-switch-9.c: New test.
2020-12-02 08:18:18 +01:00
Martin Liska
e4c02ce4ab if-to-switch: consider only integral types
gcc/ChangeLog:

	PR tree-optimization/98084
	* gimple-if-to-switch.cc (find_conditions): Consider only
	integral types.

gcc/testsuite/ChangeLog:

	PR tree-optimization/98084
	* gcc.dg/tree-ssa/pr98084.c: New test.
2020-12-02 08:17:25 +01:00
Jeff Law
7da97411b0 Use add/sub/neg insns to eliminate compare/test insns on H8
gcc/

	* config/h8300/addsub.md (addqi3_clobber_flags): Rename to
	addqi3_flags and annotate with a <cczn> for define_subst.
	(addhi3_h8sx_clobber_flags): Likewise.
	(subqi3_clobber_flags, sub<mode>3_clobber_flags): Likewise.
	(neg<mode2>_clobber_flags): Similarly.
	(addsi3_clobber_flags): Similarly.  Update last argument to
	output_plussi to distinguish when we need flags or do not need
	flags.
	(addhi3_clobber_flags): Similarly.  Twiddle code for cases
	+-1, +-2 and +-4.
	* config/h8300/h8300.md: Define iterators, mode attributes and
	substitutions for use in compare/test elimination.
	* config/h8300/jumpcall.md (branch, branch_1): Use H8cc mode
	iterator to cover the different modes for the CC register.
	(branch_1_false): Likewise.

gcc/testsuite
	* gcc.target/h8300/add.c: New test.
	* gcc.target/h8300/add-2.c: New test.
	* gcc.target/h8300/add-3.c: New test.
	* gcc.target/h8300/sub.c: New test.
	* gcc.target/h8300/sub-2.c: New test.
	* gcc.target/h8300/sub-3.c: New test.
2020-12-01 21:49:10 -07:00
Maciej W. Rozycki
4bdf1e53a8 loop-iv: Fix typo in `iv_analyze_expr' description
gcc/
	* loop-iv.c: Fix a typo, s/bu/by/, in the `iv_analyze_expr'
	description in the introduction.
2020-12-02 04:28:26 +00:00
Ian Lance Taylor
eacc335bf9 go-test.exp: permit trailing */ on ERROR line
* go.test/go-test.exp (errchk): Permit trailing */ on ERROR line.
2020-12-01 18:20:22 -08:00
H.J. Lu
6fbec038f7 Use SHF_GNU_RETAIN to preserve symbol definitions
In assemly code, the section flag 'R' sets the SHF_GNU_RETAIN flag to
indicate that the section must be preserved by the linker.

Add SECTION_RETAIN to indicate a section should be retained by the linker
and set SECTION_RETAIN on section for the preserved symbol if assembler
supports SHF_GNU_RETAIN.  All retained symbols are placed in separate
sections with

	.section .data.rel.local.preserved_symbol,"awR"
preserved_symbol:
...
	.section .data.rel.local,"aw"
not_preserved_symbol:
...

to avoid

	.section .data.rel.local,"awR"
preserved_symbol:
...
not_preserved_symbol:
...

which places not_preserved_symbol definition in the SHF_GNU_RETAIN
section.

gcc/

2020-12-01  H.J. Lu  <hjl.tools@gmail.com>

	* configure.ac (HAVE_GAS_SHF_GNU_RETAIN): New.  Define 1 if
	the assembler supports marking sections with SHF_GNU_RETAIN flag.
	* output.h (SECTION_RETAIN): New.  Defined as 0x4000000.
	(SECTION_MACH_DEP): Changed from 0x4000000 to 0x8000000.
	(default_unique_section): Add a bool argument.
	* varasm.c (get_section): Set SECTION_RETAIN for the preserved
	symbol with HAVE_GAS_SHF_GNU_RETAIN.
	(resolve_unique_section): Used named section for the preserved
	symbol if assembler supports SHF_GNU_RETAIN.
	(get_variable_section): Handle the preserved common symbol with
	HAVE_GAS_SHF_GNU_RETAIN.
	(default_elf_asm_named_section): Require the full declaration and
	use the 'R' flag for SECTION_RETAIN.
	* config.in: Regenerated.
	* configure: Likewise.
	* doc/sourcebuild.texi: Document R_flag_in_section.

gcc/testsuite/

2020-12-01  H.J. Lu  <hjl.tools@gmail.com>
	    Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* c-c++-common/attr-used.c: Check the 'R' flag.
	* c-c++-common/attr-used-2.c: Likewise.
	* c-c++-common/attr-used-3.c: New test.
	* c-c++-common/attr-used-4.c: Likewise.
	* gcc.c-torture/compile/attr-used-retain-1.c: Likewise.
	* gcc.c-torture/compile/attr-used-retain-2.c: Likewise.
	* lib/target-supports.exp
	(check_effective_target_R_flag_in_section): New proc.
2020-12-01 16:42:50 -08:00
Jonathan Wakely
670f5095e4 libstdc++: Make preprocessor checks for __cpp_lib_atomic_wait consistent
This changes some #ifdef checks to use #if instead.

libstdc++-v3/ChangeLog:

	* include/bits/atomic_timed_wait.h: Use #if instead of #ifdef.
	* include/bits/semaphore_base.h: Likewise.
	* include/std/version: Remove trailing whitespace.
2020-12-02 00:39:22 +00:00
Jonathan Wakely
a70384f94c libstdc++: Fix filesystem::path pretty printer test failure
On some systems libstdc++-prettyprinters/cxx17.cc FAILs with this error:

skipping: Python Exception <type 'exceptions.AttributeError'> 'gdb.Type' object has no attribute 'name': ^M
got: $27 = filesystem::path "/dir/."^M
FAIL: libstdc++-prettyprinters/cxx17.cc print path2

The gdb.Type.name attribute isn't present in GDB 7.6, so we get an
exception from StdPathPrinter._iterator.__next__ trying to use it.
The StdPathPrinter._iterator is already passed the type's name in its
constructor, so we can just store that and use it instead of
gdb.Type.name.

libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py (StdExpPathPrinter): Store the
	name of the type and pass it to the iterator.
	(StdPathPrinter): Likewise.
	* testsuite/libstdc++-prettyprinters/filesystem-ts.cc: New test.
2020-12-02 00:39:21 +00:00
H.J. Lu
54967b02c1 x86: Add -mneeded for GNU_PROPERTY_X86_ISA_1_V[234] marker
GCC 11 supports -march=x86-64-v[234] to enable x86 micro-architecture ISA
levels:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97250

Binutils has been updated to support GNU_PROPERTY_X86_ISA_1_V[234] marker:

https://gitlab.com/x86-psABIs/x86-64-ABI/-/merge_requests/13

with

commit b0ab06937385e0ae25cebf1991787d64f439bf12
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Oct 30 06:49:57 2020 -0700

    x86: Support GNU_PROPERTY_X86_ISA_1_BASELINE marker

and

commit 32930e4edbc06bc6f10c435dbcc63131715df678
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Oct 9 05:05:57 2020 -0700

    x86: Support GNU_PROPERTY_X86_ISA_1_V[234] marker

in x86 ELF binaries.

Add -mneeded to emit GNU_PROPERTY_X86_ISA_1_NEEDED property to indicate
the micro-architecture ISA level required to execute the binary.

gcc/

	* config.gcc: Replace cet.o with gnu-property.o.  Replace
	i386/t-cet with i386/t-gnu-property.
	* config/i386/cet.c: Renamed to ...
	* config/i386/gnu-property.c: This.
	(emit_gnu_property): New function.
	(file_end_indicate_exec_stack_and_cet): Renamed to ...
	(file_end_indicate_exec_stack_and_gnu_property): This.  Call
	emit_gnu_property to generate GNU_PROPERTY_X86_FEATURE_1_AND and
	GNU_PROPERTY_X86_ISA_1_NEEDED properties.
	* config/i386/i386.opt (mneeded): New.
	* config/i386/linux-common.h (file_end_indicate_exec_stack_and_cet):
	Renamed to ...
	(file_end_indicate_exec_stack_and_gnu_property): This.
	(TARGET_ASM_FILE_END): Updated.
	* config/i386/t-cet: Renamed to ...
	* config/i386/t-gnu-property: This.
	(cet.o): Renamed to ...
	(gnu-property.o): This.
	* doc/invoke.texi: Document -mneeded.

gcc/testsuite/

	* gcc.target/i386/x86-needed-1.c: New test.
	* gcc.target/i386/x86-needed-2.c: Likewise.
	* gcc.target/i386/x86-needed-3.c: Likewise.
2020-12-01 16:33:10 -08:00
GCC Administrator
e0f5e79267 Daily bump. 2020-12-02 00:16:41 +00:00
Thomas Rodgers
6591e42269 Add feature test macro for atomic<T>::wait
Adds __cpp_lib_atomic_wait feature test macro which was overlooked in
the initial commit of this feature. Replaces uses of
_GLIBCXX_HAVE_ATOMIC_WAIT.

libstdc++-v3/ChangeLog:

	* include/bits/atomic_base.h: Replace usage of
	_GLIBCXX_HAVE_ATOMIC_WAIT with __cpp_lib_atomic_wait.
	* include/bits/atomic_timed_wait.h: Likewise.
	* include/bits/atomic_wait.h: Define __cpp_lib_atomic_wait
	feature test macro.
	* include/bits/semaphore_base.h: Replace usage of
	_GLIBCXX_HAVE_ATOMIC_WAIT with __cpp_lib_atomic_wait.
	* include/std/atomic: Likewise.
	* include/std/latch: Likewise.
	* include/std/semaphore: Likewise.
	* include/std/version: Define __cpp_lib_atomic wait
	feature test macro and replace usage of
	_GLIBCXX_HAVE_ATOMIC_WAIT.
	* testsuite/29_atomics/atomic/wait_notify/1.cc: New test.
	* testsuite/29_atomics/atomic/wait_notify/2.cc: Likewise.
2020-12-01 15:43:17 -08:00