Commit Graph

181856 Commits

Author SHA1 Message Date
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
Eugene Rozenfeld
abef36919f Optimize max/min pattern with comparison
gcc/
	PR tree-optimization/96708
	* match.pd: New pattern for comparing X with MAX (X, Y)
	or MIN (X, y).

gcc/testsuite
	* gcc.dg/pr96708-negative.c: New test.
	* gcc.dg/pr96708-positive.c: New test.
2020-12-01 16:26:59 -07:00
Jeff Law
db365b61c5 Fix mcore multilib specification
gcc
	* config/mcore/t-mcore (MULTILIB_EXCEPTIONS): Define.
2020-12-01 16:23:05 -07:00
Ville Voutilainen
bec21c625d Add pretty-printing support for __is_nothrow_{assignable,constructible}.
gcc/cp/ChangeLog:

	PR c++/98054
	* cxx-pretty-print.c (pp_cxx_trait_expression):
	Add support for __is_nothrow_{assignable,constructible}.
2020-12-02 00:23:41 +02:00
Martin Sebor
b76f83e385 PR middle-end/97595 - bogus -Wstringop-overflow due to DECL_SIZE_UNIT underreporting field size
gcc/ChangeLog:

	PR middle-end/97595
	* tree.c (component_ref_size): Fail when DECL_SIZE != TYPE_SIZE.
	* tree.h (DECL_SIZE, TYPE_SIZE): Update comment.

gcc/testsuite/ChangeLog:

	PR middle-end/97595
	* g++.dg/warn/Warray-bounds-14.C: New test.
	* g++.dg/warn/Wstringop-overflow-6.C: New test.
2020-12-01 15:11:23 -07:00
Jeff Law
c7e2ef1314 Fix more minor testsuite fallout from improved switch optimization
gcc/testsuite
	* gcc.dg/tree-ssa/pr96480.c: Disable jump table optimization
2020-12-01 15:10:40 -07:00
JeanHeyd Meneide
eccec86841 Feature: Macros for identifying the wide and narrow execution string literal encoding
gcc/c-family
	* c-cppbuiltin.c (c_cpp_builtins): Add predefined
	{__GNUC_EXECUTION_CHARSET_NAME} and
	_WIDE_EXECUTION_CHARSET_NAME} macros.

gcc/
	* doc/cpp.texi: Document new macros.

gcc/testsuite/
	* c-c++-common/cpp/wide-narrow-predef-macros.c: New test.

libcpp/
	* charset.c (init_iconv_desc): Initialize "to" and "from" fields.
	* directives.c (cpp_get_narrow_charset_name): New function.
	(cpp_get_wide_charset_name): Likewise.
	* include/cpplib.h (cpp_get_narrow_charset_name): Prototype.
	(cpp_get_wide_charset_name): Likewise.
	* internal.h (cset_converter): Add "to" and "from" fields.
2020-12-01 14:46:51 -07:00
Michael Weghorn
39836f8324 libstdc++: Pretty printers for _Bit_reference and _Bit_iterator
'std::_Bit_iterator' and 'std::_Bit_const_iterator' are the iterators
used by 'std::vector<bool>'.
'std::_Bit_reference' is e.g. used in range-based for loops over
'std::vector<bool>'  like

    std::vector<bool> vb {true, false, false};
    for (auto b : vb) {
        // b is of type std::_Bit_reference here
        // ...
    }

Like iterators of vectors for other types, the actual value is printed.

libstdc++-v3/ChangeLog:

	* python/libstdcxx/v6/printers.py (StdBitIteratorPrinter)
	(StdBitReferencePrinter): Add pretty-printers for
	_Bit_reference, _Bit_iterator and _Bit_const_iterator.
	* testsuite/libstdc++-prettyprinters/simple.cc: Test
	std::_Bit_reference, std::_Bit_iterator and
	std::_Bit_const_iterator.
	* testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.
2020-12-01 21:35:32 +00:00
Jeff Law
968666a011 Fix compromised tests after recent switch table improvements
gcc/testsuite
	* gcc.dg/pr46309-2.c: Add -fno-bit-tests and -fno-jump-tables
	to avoid compromising the test.
2020-12-01 14:30:08 -07:00
Jakub Jelinek
91ddf867a5 openmp: Avoid ICE on depend clause on depobj OpenMP construct [PR98072]
Since r11-5430 we ICE on the following testcase.  When parsing the depobj
directive we don't really use cp_parser_omp_all_clauses routine which ATM
disables generation of location wrappers and the newly added assertion
that there are no location wrappers thus triggers.

Fixed by adding the location wrappers suppression sentinel.

Longer term, we should handle location wrappers inside of OpenMP clauses.

2020-12-01  Jakub Jelinek  <jakub@redhat.com>

	PR c++/98072
	* parser.c (cp_parser_omp_depobj): Suppress location wrappers when
	parsing depend clause.

	* c-c++-common/gomp/depobj-2.c: New test.
2020-12-01 21:46:03 +01:00
Martin Sebor
d02c41dd41 PR middle-end/97373 - missing warning on sprintf into allocated destination
gcc/ChangeLog:

	PR middle-end/97373
	* builtins.c (compute_objsize): Rename...
	(compute_objsize_r): to this.  Change order and types of arguments.
	Use new argument.  Adjust calls to self.
	(access_ref::get_ref): New member function.
	(pointer_query::pointer_query): New member function.
	(pointer_query::get_ref): Same.
	(pointer_query::put_ref): Same.
	(handle_min_max_size): Change order and types of arguments.
	(maybe_emit_free_warning): Add a test.
	* builtins.h (class pointer_query): New class.
	(compute_objsize): Declare an overload.
	* gimple-ssa-sprintf.c (get_destination_size): Add argument.
	(handle_printf_call): Change argument type.
	* tree-ssa-strlen.c (adjust_last_stmt): Add an argument and use it.
	(maybe_warn_overflow): Same.
	(handle_builtin_strcpy): Same.
	(maybe_diag_stxncpy_trunc): Same.
	(handle_builtin_memcpy): Change argument type.  Adjust calls.
	(handle_builtin_strcat): Same.
	(handle_builtin_memset): Same.
	(handle_store): Same.
	(strlen_check_and_optimize_call): Same.
	(check_and_optimize_stmt): Same.
	(strlen_dom_walker): Add new data members.
	(strlen_dom_walker::before_dom_children): Use new member.
	(printf_strlen_execute): Dump cache performance counters.  Remove
	objsize pass cleanup.
	* tree-ssa-strlen.h (maybe_diag_stxncpy_trunc): Add argument.
	(handle_printf_call): Change argument type.

gcc/testsuite/ChangeLog:

	PR middle-end/97373
	* gcc.dg/tree-ssa/builtin-sprintf-warn-25.c: New test.
2020-12-01 13:39:46 -07:00
Eric Botcazou
b3147c02dc Make -fzero-call-used-regs work on the SPARC
This contains both a generic fixlet for targets implementing the leaf
register optimization (SPARC and Xtensa) and the implementation of the
target hook TARGET_ZERO_CALL_USED_REGS which is needed to make this work
on the SPARC.

gcc/ChangeLog:
	* function.c (gen_call_used_regs_seq): In a function subject to the
	leaf register optimization, skip registers that are not present.
	* config/sparc/sparc.c (TARGET_ZERO_CALL_USED_REGS): Define to...
	(sparc_zero_call_used_regs): ...this.  New function.
2020-12-01 21:15:53 +01:00
Martin Liska
986bb15d5b testsuite: replace .* with a better regex
gcc/testsuite/ChangeLog:

	* g++.dg/tree-ssa/if-to-switch-1.C: Do not allow newlines
	in .* pattern.
	* gcc.dg/tree-ssa/if-to-switch-1.c: Likewise.
	* gcc.dg/tree-ssa/if-to-switch-2.c: Likewise.
	* gcc.dg/tree-ssa/if-to-switch-3.c: Likewise.
	* gcc.dg/tree-ssa/if-to-switch-5.c: Likewise.
2020-12-01 21:03:54 +01:00
Iain Sandoe
9c17474c1e Darwin, D : Adjust the X spec to cater for duplicate use.
The '-X' flag is an obsolete spelling for a command to tell the
linker to 'strip local symbols'.  This has been the default action
for a long time - but, as per the usual GCC approach, although the
flag is retired, we have not removed it; rather, we just delete it
in the driver self-spec.

The D language adds this flag as a front end option (to emit json)
which means that deleting it in the driver disables that function
in D.

This patch works around the duplication by removing the unused flag
in the link_spec instead of the driver self-spec.

gcc/ChangeLog:

	* config/darwin.h: Remove unused 'X' specs in the link spec
	rather than driver self-specs.
2020-12-01 19:58:21 +00:00
Martin Liska
efd1d4f8ae if-to-switch: Fix test-suite patterns.
gcc/testsuite/ChangeLog:

	PR testsuite/98085
	* g++.dg/tree-ssa/if-to-switch-1.C: Do not expect precise number
	of BBs.
	* gcc.dg/tree-ssa/if-to-switch-1.c: Likewise.
	* gcc.dg/tree-ssa/if-to-switch-2.c: Likewise. Find better name
	for the function.
	* gcc.dg/tree-ssa/if-to-switch-3.c: Likewise. Find better name
	for the function.
	* gcc.dg/tree-ssa/if-to-switch-5.c: Likewise.
2020-12-01 20:53:04 +01:00
Nathan Sidwell
41676a36a0 C++ Module keywords
This adds the module keywords.  These are special internal tokens
generated by the preprocessor's module-control-line token peeking
logic.  Spelling them with a space means that they turn back into
regular tokens in preprocessor output (but do skew the column
numbering :()

	gcc/c-family/
	* c-common.c (module, import, export): New internal tokens (with
	trailing space).
	* c-common.h (RID__MODULE, RID__IMPORT & RID__EXPORT): Enumerate
	them.
	(D_CXX_MODULES, D_CXX_MODULES_FLAGS): Enable them.
	* c-cppbuiltin.c (c_cpp_builtins): Feature macro.
	gcc/cp/
	* lex.c (init_reswords): Maybe enable module keywords.
2020-12-01 11:47:32 -08:00
Nathan Sidwell
6e3603e62a C++ Module parameters & timers
Here is the new parameter and instrumentation timers for modules.

	gcc/
	* params.opt (lazy-modules): New.
	* timevar.def (TV_MODULE_IMPORT, TV_MODULE_EXPORT)
	(TV_MODULE_MAPPER): New.
2020-12-01 11:39:38 -08:00
Nathan Sidwell
10ee6da64c C++ Module options
This adds the C++ module options, and wires them into lang-specs.  The
options are not connected to any machinery.  The options! They do
nothing!

	gcc/c-family/
	* c-opts.c (c_common_init_options): Ask for module dependencies.
	(c_common_handle_option): Handle -Mmodules -Mno-modules.
	* c-pch.c (c_common_valid_pch): ... does not play with C++
	modules.
	* c.opt (Mmodules, Mno-modules): New preprocessor dependency
	options.
	(fmodules-ts, fmodule-header, fmodule-implicit-inline)
	(fmodule-only, fmodule-mapper, fmodule-lazy)
	(fmodule-version-ignore, Winvalid-imported-macros)
	(flang-info-include-translate, flang-info-include-translate-not):
	New options
	gcc/cp/
	* lang-specs.h: Add module-related options.
2020-12-01 10:32:50 -08:00
Jakub Jelinek
855bb43f6d Improve double-word mod even on powerpc [PR97459]
I have noticed that while my (already committed, thanks for review)
patch works on x86, it doesn't work on powerpc*.  The problem is that
we don't have lshr double-word optab (neither TImode nor for -m32 DImode),
but as expander has code for double-word shift, that doesn't really matter.
As the implementation is prepared to punt whenever something can't be
expanded with OPTAB_DIRECT and in the end also punts if any library calls
would be emitted, the optab_handler checks were just to save compile time.

On the other side, for even divisors, we know that (1 << bit) % (2 * x)
for bit > 0 will never be equal to 1, because both dividend and divisor
are even and so remainder will be even too, so we can save some compile time
by adding an early exit.

The even divisors can be handled with the approach Thomas wrote about
(perhaps generalized into divisors equal to what expand_doubleword_mod
can handle times some power of two where we can handle power of two modulo
cheaply), but that would be done in a different function...
And we could use ctz to find the power of two...

2020-12-01  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/97459
	* optabs.c (expand_doubleword_mod): Punt early for even op1.
	(expand_binop): Don't require lshr_optab double-word handler.
2020-12-01 16:25:06 +01:00
Jakub Jelinek
404d0ca782 loop-invariant: JUMP_INSNs aren't loop invariant [PR97954]
The following testcase ICEs because loop invariant motion moves asm goto
with a single output as invariant.
Normally, jumps aren't really moved, because if they are single set,
they have their SET_DEST (pc) and pc_rtx has VOIDmode on which one of the
functions find_invariant_insn calls bails out.  The code already punts on
insns that can throw or trap.  And for asm goto without outputs, it isn't
single set, or asm goto with two or more outputs it isn't single set either.

2020-12-01  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/97954
	* loop-invariant.c (find_invariant_insn): Punt on JUMP_P insns.

	* gcc.dg/pr97954.c: New test.
2020-12-01 16:23:59 +01:00
Iain Sandoe
2133e773ab configury : Fix LEB128 support for non-GNU assemblers.
The current configuration test for LEB128 support in the assembler is
(a) specific to GNU assemblers and (b) only checks that the directives
are accepted, not that they give correct output.

The patch extends the asm test to cover one failure case present in
assemblers based off an older version of GAS (where a 64 bit value with
the MSB set presented to a .uleb128 directive causes a fail).

The test is now generalized such that it does not make use of any
specific test for assembler source/version, but checks that the output
is as expected.  We cater for scanning the object with objdump (either
binutils or LLVM) or Darwin otool.

gcc/ChangeLog:

	* configure.ac (check leb128 support): Check that assemblers both
	accept the LEB128 directives and also give the expected output.
	Add a test for uleb128 with the MSB set for a 64 bit value.
	* configure: Regenerated.
2020-12-01 14:41:09 +00:00
Jonathan Wakely
6aa1227400 libstdc++: Simplify detection of built-in functions
This fixes a regression affecting the Intel compiler. Because that
compiler defines __GNUC__ to match whatever version of GCC it finds on
the host system, it might claim to be a brand new GCC despite not
actually supporting all the built-ins that the latest GCC supports. This
means the config checks for __GNUC__ don't work. Most recently this
broke when r11-3569-g73ae6eb572515ad627b575a7fbdfdd47a4368e1c switched
us from using __is_same_as to __is_same when __GNUC__ >= 11.

Because __has_builtin is supported by all of GCC, Clang, and Intel we can
use that to reliably detect whether a given built-in is supported,
instead of hardcoding anything based on __GNUC__. The big caveat is
that for versions of Clang <= 9.0.0 and for (as far as I can tell) all
released versions of Intel icc, __has_builtin only evaluates to true for
built-ins with a name starting "__builtin_". For __is_aggregate,
__is_same, and __has_unique_object_representations it's necessary to use
__is_identifier to check if it's a valid identifeir token instead.

The solution used in this patch is to define _GLIBCXX_HAS_BUILTIN and
use that instead of using __has_builtin directly. For compilers that
define __is_identifier as well as __has_builtin we use both, so that if
__has_builtin evaluates to false we try again using !__is_identifier.

libstdc++-v3/ChangeLog:

	* include/bits/c++config (_GLIBCXX_HAS_BUILTIN): Define macro to
	work around different implementations of __has_builtin.
	(_GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP)
	(_GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE)
	(_GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED)
	(_GLIBCXX_HAVE_BUILTIN_IS_SAME, _GLIBCXX_HAVE_BUILTIN_LAUNDER):
	Define using _GLIBCXX_HAS_BUILTIN.
2020-12-01 14:14:18 +00:00
Iain Sandoe
6ea5a23766 Regenerate a configure script omitted in r11-5520.
Additional change for : hppa64-hpux11 build to remove source paths
from embedded path.

gcc/ChangeLog:

	* configure: Regnerated.
2020-12-01 13:52:28 +00:00
Matthew Malcomson
d66db7412e testsuite: Correct check_effective_target_hwaddress_exec
This test should ensure that we can compile with hwasan, that such a compiled
binary runs as expected, *and* that we're running on a kernel which implements
the capability to ignore the top bytes of pointers in syscalls.

It was expected that a basic test of `int main(void) { return 0; }` would check
this, since there is a check called during `__hwasan_init` in libhwasan to
ensure that the kernel we're running on provides a `prctl` to request the
relaxed ABI.

Unfortunately, the check in libhwasan has a bug in it, and does not correctly
fail when the kernel feature is not around.  This means that check is not
automatically provided by the runtime.

The sanitizer runtime will be fixed but would like to install this fix here in
case fixing the library is not quick enough for the release (and so that people
running the testsuite do not see spurious errors in the meantime).

Tested by running testsuite on an AArch64 machine with and without the required
kernel.
Observed that the test does indeed fail when the kernel feature is unavailable
and pass when the feature is available.

Note that this test is directly targetting AArch64 by using `prctl` numbers
specific to it.  That's unfortunate, but once the runtime fix has gone in we
will be able to remove that requirement.

Ok for trunk?

gcc/testsuite/ChangeLog:

	* lib/hwasan-dg.exp (check_effective_target_hwaddress_exec): Fix
	check for correct kernel version.
2020-12-01 11:40:18 +00:00
Iain Sandoe
31f76c9065 C++ : Adjust warning for misplaced attributes.
This removes the reference to Objective-C++ for the warning that
attributes may not be placed before linkage specifications.  It also
adds a note that they may be placed after that.

gcc/cp/ChangeLog:

	* parser.c (cp_parser_declaration): Add a not about where
	attributes may be placed.
2020-12-01 11:25:03 +00:00
Ilya Leoshkevich
3940daff12 Introduce can_vec_cmp_compare_p
This is the same as dcd2ca63ec ("Introduce can_vcond_compare_p
function"), but for vec_cmp.  The reason it's needed is that since
5d9ade39b8 ("IBM Z: Fix PR97326: Enable fp compares in vec_cmp")
and 4acba48590 ("IBM Z: Restrict vec_cmp<m><n> on z13") s390's vec_cmp
expander advertises that it supports floating point comparisons except
signaling ones on z13, but the common code ignores the latter
restriction.

gcc/ChangeLog:

2020-11-25  Ilya Leoshkevich  <iii@linux.ibm.com>

	* optabs-tree.c (vec_cmp_icode_p): New function.
	(vec_cmp_eq_icode_p): New function.
	(expand_vec_cmp_expr_p): Use vec_cmp_icode_p and
	vec_cmp_eq_icode_p.
	(vcond_icode_p): Use get_rtx_code_1, just to be uniform with
	vec_cmp_icode_p.
	* optabs.c (unsigned_optab_p): New function.
	(insn_predicate_matches_p): New function.
	(can_vec_cmp_compare_p): New function.
	(can_vcond_compare_p): Use unsigned_optab_p and
	insn_predicate_matches_p.
	(get_rtx_code): Use get_rtx_code_1.
	(get_rtx_code_1): Version of get_rtx_code that returns UNKNOWN
	instead of asserting.
	* optabs.h (can_vec_cmp_compare_p): New function.
	(get_rtx_code_1): New function.
2020-12-01 12:03:30 +01:00
Jonathan Wakely
0fb378761f libstdc++: Use longer timeout for slow running tests
libstdc++-v3/ChangeLog:

	* testsuite/27_io/basic_istream/get/char/lwg3464.cc: Add
	dg-timeout-factor directive.
	* testsuite/27_io/basic_istream/get/wchar_t/lwg3464.cc:
	Likewise.
2020-12-01 10:51:25 +00:00
Martin Liska
03eb09292e Add if-chain to switch conversion pass.
gcc/ChangeLog:

	PR tree-optimization/14799
	PR ipa/88702
	* Makefile.in: Add gimple-if-to-switch.o.
	* dbgcnt.def (DEBUG_COUNTER): Add new debug counter.
	* passes.def: Include new pass_if_to_switch pass.
	* timevar.def (TV_TREE_IF_TO_SWITCH): New timevar.
	* tree-pass.h (make_pass_if_to_switch): New.
	* tree-ssa-reassoc.c (struct operand_entry): Move to the header.
	(dump_range_entry): Move to header file.
	(debug_range_entry): Likewise.
	(no_side_effect_bb): Make it global.
	* tree-switch-conversion.h (simple_cluster::simple_cluster):
	Add inline for couple of functions in order to prevent error
	about multiple defined symbols.
	* gimple-if-to-switch.cc: New file.
	* tree-ssa-reassoc.h: New file.

gcc/testsuite/ChangeLog:

	PR tree-optimization/14799
	PR ipa/88702
	* gcc.dg/tree-ssa/pr96480.c: Disable if-to-switch conversion.
	* gcc.dg/tree-ssa/reassoc-32.c: Likewise.
	* g++.dg/tree-ssa/if-to-switch-1.C: New test.
	* gcc.dg/tree-ssa/if-to-switch-1.c: New test.
	* gcc.dg/tree-ssa/if-to-switch-2.c: New test.
	* gcc.dg/tree-ssa/if-to-switch-3.c: New test.
	* gcc.dg/tree-ssa/if-to-switch-4.c: New test.
	* gcc.dg/tree-ssa/if-to-switch-5.c: New test.
	* gcc.dg/tree-ssa/if-to-switch-6.c: New test.
	* gcc.dg/tree-ssa/if-to-switch-7.c: New test.
	* gcc.dg/tree-ssa/if-to-switch-8.c: New test.
2020-12-01 11:43:25 +01:00