180727 Commits

Author SHA1 Message Date
Patrick Palka
64817472be libstdc++: Correct PR number in ChangeLog entry 2020-10-29 09:28:43 -04:00
Richard Biener
e4b3d2a4c2 Consistently pass the vector type for scalar SLP cost compute
This avoids randomly (based on whether the stmt is
SLP_TREE_REPRESENTATIVE and not a pattern stmt) passing a vector
type or NULL to the add_stmt_cost hook for scalar code cost
compute.  For example the x86 backend uses only the vector type to
decide on the scalar computation mode which makes costing off.

So the following explicitely passes the vector type and uses
SLP_TREE_VECTYPE for this purpose.

2020-10-29  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_bb_slp_scalar_cost): Pass
	SLP_TREE_VECTYPE to record_stmt_cost.
2020-10-29 13:09:49 +01:00
Jonathan Wakely
eb6b71b83c libstdc++: Fix some warnings in headers
These are usually suppressed without -Wsystem-headers.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable_policy.h (_Local_iterator_base): Cast
	value to avoid -Wsign-compare warnings.
	* include/bits/regex.h (sub_match::_M_str): Avoid narrowing
	conversion.
	* include/bits/regex_compiler.tcc (_Compiler::_M_quantifier):
	Initialize variable to avoid -Wmaybe-uninitialized warning.
	* include/bits/shared_ptr_base.h (_Sp_counted_deleter::_Impl):
	Reorder mem-initializer-list to avoid -Wreorder warning.
	* include/bits/stl_tree.h (_Rb_tree_impl): Explicitly
	initialize base class in copy constructor.
	* include/debug/safe_iterator.h (_Safe_iterator): Likewise.
	* include/ext/debug_allocator.h: Reorder mem-initializer-list
	to avoid -Wreorder warning.
	* include/ext/throw_allocator.h (throw_allocator_limit)
	(throw_allocator_random): Add user-declared assignment operators
	to avoid -Wdeprecated-copy warnings.
2020-10-29 11:43:55 +00:00
Olivier Hainque
9df44b9403 Fix the logic conditioning VX_ENTER/LEAVE_TLS_DTOR
Fix a basic #if/#ifdef confusion which leads to improper
choices in some configurations.

2020-10-28  Olivier Hainque  <hainque@adacore.com>

libgcc/
	* config/gthr-vxworks-tls.c: Fix preprocessor logic
	controlling the definition of VX_ENTER_TLS_DTOR and
	VX_LEAVE_TLS_DTOR based on a version major check.
2020-10-29 10:59:11 +00:00
Olivier Hainque
291d920395 Fix conditional inclusion guard in gthr-vxworks-thread.c
This fixes the name of the macro used to condition the
inclusion of an actual implementation of some of the gthread
support services for VxWorks, to agree with the side
defining that macro based on tests against the targetted
VxWorks version major.

2020-10-28  Olivier Hainque  <hainque@adacore.com>

libgcc/
	* config/gthr-vxworks-thread.c: Fix name of macro used
	to condition the inclusion of an actual implementation.
2020-10-29 10:59:11 +00:00
Martin Liska
bafcf452c7 opts: Sanity check for param names.
gcc/ChangeLog:

	* optc-gen.awk: Check that params start with -param=.
	* params.opt: Fix ipa-jump-function-lookups.
2020-10-29 11:53:59 +01:00
Alexandre Oliva
53dede0f04 CSE conversions within sincos
On platforms in which Aux_[Real_Type] involves non-NOP conversions
(e.g., between single- and double-precision, or between short float
and float), the conversions before the calls are CSEd too late for
sincos to combine calls.

This patch enables the sincos pass to CSE type casts used as arguments
to eligible calls before looking for other calls using the same
operand.


for  gcc/ChangeLog

	* tree-ssa-math-opts.c (sincos_stats): Add conv_removed.
	(execute_cse_conv_1): New.
	(execute_cse_sincos_1): Call it.  Fix return within
	FOR_EACH_IMM_USE_STMT.
	(pass_cse_sincos::execute): Report conv_inserted.

for  gcc/testsuite/ChangeLog

	* gnat.dg/sin_cos.ads: New.
	* gnat.dg/sin_cos.adb: New.
	* gcc.dg/sin_cos.c: New.
2020-10-29 06:30:50 -03:00
Jonathan Wakely
68990ed13d libstdc++: Rename _UniformRandomNumberGenerator parameters
The paper P0346R1 renamed uniform random number generators to
uniform random bit generators, to describe their purpose more
accurately. This makes that same change in one of the relevant
files (but not the others).

libstdc++-v3/ChangeLog:

	* include/bits/uniform_int_dist.h (uniform_int_distribution):
	Rename _UniformRandomNumberGenerator template parameters to
	_UniformRandomBitGenerator, as per P0346R1.
2020-10-29 09:09:44 +00:00
liuhongt
632a2f50b8 Enable GCC to support Intel Key Locker ISA
gcc/ChangeLog

2018-12-15  Xuepeng Guo  <xuepeng.guo@intel.com>
	    Hongyu Wang  <hongyu.wang@intel.com>
	    Hongtao Liu  <hongtao.liu@intel.com>

	* common/config/i386/cpuinfo.h (get_available_features):
	Detect KL, AESKLE and WIDEKL features.
	* common/config/i386/i386-common.c
	(OPTION_MASK_ISA_KL_SET): New.
	(OPTION_MASK_ISA_WIDEKL_SET): Likewise.
	(OPTION_MASK_ISA_KL_UNSET): Likewise.
	(OPTION_MASK_ISA_WIDEKL_UNSET): Likewise.
	(OPTION_MASK_ISA2_AVX2_UNSET): Likewise.
	(OPTION_MASK_ISA2_AVX_UNSET): Likewise.
	(OPTION_MASK_ISA2_SSE4_2_UNSET): Likewise.
	(OPTION_MASK_ISA2_SSE4_1_UNSET): Likewise.
	(OPTION_MASK_ISA2_SSE4_UNSET): Likewise.
	(OPTION_MASK_ISA2_SSSE3_UNSET): Likewise.
	(OPTION_MASK_ISA2_SSE3_UNSET): Likewise.
	(OPTION_MASK_ISA2_SSE2_UNSET): Likewise.
	(OPTION_MASK_ISA2_SSE_UNSET): Likewise.
	(ix86_handle_option): Handle kl and widekl, add dependency chain
	for KL and SSE2.
	* common/config/i386/i386-cpuinfo.h (enum processor_features):
	(FEATURE_KL, FEATURE_AESKLE, FEATURE_WIDEKL): New.
	* common/config/i386/i386-isas.h: Add ISA_NAMES_TABLE_ENTRY
	for KL, AESKLE and WIDEKL.
	* config.gcc: Add keylockerintrin.h.
	* doc/invoke.texi: Document new option -mkl and -mwidekl.
	* doc/extend.texi: Document kl and widekl.
	* config/i386/cpuid.h (bit_KL, bit_AESKLE, bit_WIDEKL): New.
	* config/i386/i386-builtin-types.def ((UINT, UINT, V2DI, V2DI, PVOID),
	(UINT, UINT, V2DI, PVOID), (VOID, V2DI, V2DI, V2DI, UINT),
	(UINT8, PV2DI, V2DI, PCVOID), (UINT8, PV2DI, PCV2DI, PCVOID)): New
	function types.
	* config/i386/i386-builtin.def: Add
	__builtin_ia32_loadiwkey,
	__builtin_ia32_aesdec128kl_u8,
	__builtin_ia32_aesdec256kl_u8,
	__builtin_ia32_aesenc128kl_u8,
	__builtin_ia32_aesenc256kl_u8,
	__builtin_ia32_aesdecwide128kl_u8,
	__builtin_ia32_aesdecwide256kl_u8,
	__builtin_ia32_aesencwide128kl_u8,
	__builtin_ia32_aesencwide256kl_u8,
	__builtin_ia32_encodekey128_u32,
	__builtin_ia32_encodekey256_u32.
	* config/i386/i386-c.c (ix86_target_macros_internal): Handle
	kl and widekl.
	* config/i386/i386-options.c (isa2_opts): Add -mkl and -mwidekl.
	(ix86_option_override_internal): Handle KL and WIDEKL.
	(ix86_valid_target_attribute_inner_p): Add attribute for kl and widekl.
	* config/i386/i386-expand.c
	(ix86_expand_builtin): Expand Keylocker Builtins.
	* config/i386/i386.h (TARGET_KL): New.
	(TARGET_KL_P): Likewise.
	(TARGET_WIDEKL): Likewise.
	(TARGET_WIDEKL_P): Likewise.
	(PTA_KL): Likewise.
	(PTA_WIDEKL): Likewise.
	(PTA_TIGERLAKE): Add PTA_KL, PTA_WIDEKL.
	(PTA_ALDERLAKE): Likewise.
	* config/i386/i386.opt: Add new option mkl and mwidekl.
	* config/i386/keylockerintrin.h: New header file for Keylocker.
	* config/i386/immintrin.h: Include keylockerintrin.h.
	* config/i386/predicates.md (encodekey128_operation): New
	predicate.
	(encodekey256_operation): Likewise.
	(aeswidekl_operation): Likewise.
	* config/i386/sse.md (UNSPECV_LOADIWKEY): New.
	(UNSPECV_AESDEC128KLU8): Likewise.
	(UNSPECV_AESENC128KLU8): Likewise.
	(UNSPECV_AESDEC256KLU8): Likewise.
	(UNSPECV_AESENC256KLU8): Likewise.
	(UNSPECV_AESDECWIDE128KLU8): Likewise.
	(UNSPECV_AESENCWIDE128KLU8): Likewise.
	(UNSPECV_AESDECWIDE256KLU8): Likewise.
	(UNSPECV_AESENCWIDE256KLU8): Likewise.
	(UNSPECV_ENCODEKEY128U32): Likewise.
	(UNSPECV_ENCODEKEY256U32): Likewise.
	(encodekey128u32): New expander.
	(encodekey256u32): Likewise.
	(aes<aeswideklvariant>u8): Likewise.
	(loadiwkey): New insn pattern.
	(*encodekey128u32): Likewise.
	(*encodekey256u32): Likewise.
	(aes<aesklvariant>u8): Likewise.
	(*aes<aeswideklvariant>u8): Likewise.

gcc/testsuite/ChangeLog

	* gcc.target/i386/keylocker-aesdec128kl.c: New test.
	* gcc.target/i386/keylocker-aesdec256kl.c: Likewise.
	* gcc.target/i386/keylocker-aesdecwide128kl.c: Likewise.
	* gcc.target/i386/keylocker-aesdecwide256kl.c: Likewise.
	* gcc.target/i386/keylocker-aesenc128kl.c: Likewise.
	* gcc.target/i386/keylocker-aesencwide128kl.c: Likewise.
	* gcc.target/i386/keylocker-aesencwide256kl.c: Likewise.
	* gcc.target/i386/keylocker-encodekey128.c: Likewise.
	* gcc.target/i386/keylocker-encodekey256.c: Likewise.
	* gcc.target/i386/keylocker-loadiwkey.c: Likewise.
	* g++.dg/other/i386-2.C: Add -mkl and -mwidekl.
	* g++.dg/other/i386-3.C: Likewise.
	* gcc.target/i386/sse-12.c: Likewise.
	* gcc.target/i386/sse-13.c: Likewise.
	* gcc.target/i386/sse-14.c: Likewise.
	* gcc.target/i386/sse-22.c: Add kl and widekl.
	* gcc.target/i386/sse-23.c: Likewise.
	* gcc.target/i386/funcspec-56.inc: Add new target attribute test.
2020-10-29 16:42:47 +08:00
Richard Biener
1e1e1edf88 More BB vectorization tweaks
This tweaks the op build from splats to allow loads marked as not
vectorizable.  It also amends some dump prints with the address of
the SLP node or the instance to better be able to debug things.

2020-10-29  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_build_slp_tree_2): Allow splatting
	not vectorizable loads.
	(vect_build_slp_instance): Amend dumping with address.
	(vect_slp_convert_to_external): Likewise.

	* gcc.dg/vect/bb-slp-pr65935.c: Adjust.
2020-10-29 09:40:03 +01:00
Andrew MacLeod
0162d00d12 Call infer_non_null() directly when checking for non-null.
Simply call infer_non_null directly and avoid uneccessary checks of
the statement being modified.

	gcc/
	PR tree-optimization/97609
	* gimple-range-cache.cc (non_null_ref::process_name): Call
	infer_nonnull_range directly instead of infer_value_range.
	gcc/testsuite/
	* g++.dg/pr97609.C: New.
2020-10-28 22:02:45 -04:00
Jonathan Wakely
c6bfc4eb3c libstdc++: Fix new basic_stringbuf constructor
libstdc++-v3/ChangeLog:

	* include/std/sstream (basic_stringbuf(__string_type&&, openmode)):
	Call _M_init_syncbuf to set up get/put areas. Also qualify
	std::move.
2020-10-29 01:28:12 +00:00
Nikhil Benesch
0cdde1e7ae libgo: handle linking to NetBSD's versioned symbols
On NetBSD, for backwards compatibility, various libc symbols are
renamed to a symbol with a version suffix. For example, this is the
(abbreviated) definition of sigaction:

    int sigaction(...) __asm__ ("__sigaction14")

This poses a challenge for libgo, which attempts to link sigaction by
way of an "//extern" comment:

    //extern sigaction
    func sigaction(...)

This results in a reference to the deprecated compatibility symbol
"sigaction", rather than the desired "__sigaction14" symbol.

This patch introduces a new "//extern-sysinfo" comment to handle this
situation. The new mklinknames.awk script scans a package for these
comments and outputs a "//go:linkname" directive that links the wrapper
to the correct versioned symbol, as determined by parsing the __asm__
annotation on the function's declaration in gen-sysinfo.go.

For now, only the following packages are scanned by mklinknames.awk:

    os
    os/user
    runtime
    syscall

gotools/:
	* Makefile.am (check-runtime): Add runtime_linknames.go to
	--extrafiles.
	* Makefile.in: Regenerate.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265125
2020-10-28 18:20:50 -07:00
GCC Administrator
e93aae4a49 Daily bump. 2020-10-29 00:16:50 +00:00
David Malcolm
f635f0ce87 analyzer: more non-determinism fixes
gcc/analyzer/ChangeLog:
	* program-state.cc (sm_state_map::on_liveness_change): Sort the
	leaking svalues before calling on_state_leak.
	(program_state::detect_leaks): Likewise when calling
	on_svalue_leak.
	* region-model-reachability.cc
	(reachable_regions::mark_escaped_clusters): Likewise when
	calling on_escaped_function.
2020-10-28 20:11:41 -04:00
David Malcolm
1a9af27127 analyzer: fix false leak diagnostic on offsets from malloc [PR97608]
gcc/analyzer/ChangeLog:
	PR analyzer/97608
	* region-model-reachability.cc (reachable_regions::handle_sval):
	Operands of reachable reversible operations are reachable.

gcc/testsuite/ChangeLog:
	PR analyzer/97608
	* gcc.dg/analyzer/malloc-1.c (test_42d): New.
	* gcc.dg/analyzer/pr97608.c: New test.
2020-10-28 20:10:39 -04:00
David Malcolm
e9751143e2 analyzer: move svalue and region decls to their own header files
gcc/ChangeLog:
	* Makefile.in (ANALYZER_OBJS): Add analyzer/complexity.o.

gcc/analyzer/ChangeLog:
	* analyzer.h (class state_machine): New forward decl.
	(class logger): Likewise.
	(class visitor): Likewise.
	* complexity.cc: New file, taken from svalue.cc.
	* complexity.h: New file, taken from region-model.h.
	* region-model.h: Include "analyzer/svalue.h" and
	"analyzer/region.h".  Move struct complexity to complexity.h.
	Move svalue, its subclasses and supporting decls to svalue.h.
	Move region, its subclasses and supporting decls to region.h.
	* region.cc: Include "analyzer/region.h".
	(symbolic_region::symbolic_region): Move here from region-model.h.
	* region.h: New file, based on material from region-model.h.
	* svalue.cc: Include "analyzer/svalue.h".
	(complexity::complexity): Move to complexity.cc.
	(complexity::from_pair): Likewise.
	* svalue.h: New file, based on material from region-model.h.
2020-10-28 20:09:04 -04:00
David Malcolm
0a36f5f21c analyzer: fix more pointer-printing in logs
gcc/analyzer/ChangeLog:
	* program-state.cc (sm_state_map::print): Guard the printing of
	the origin pointer with !flag_dump_noaddr.
	* region.cc (string_region::dump_to_pp): Likewise for
	m_string_cst.
2020-10-28 20:07:35 -04:00
Jonathan Wakely
f4f9364d20 libstdc++: Fix linker script
libstdc++-v3/ChangeLog:

	* config/abi/pre/gnu.ver (GLIBCXX_3.4.29): Remove duplicate
	patterns.
	(CXXABI_1.3.13): Restore missing piece.
2020-10-28 23:52:12 +00:00
Alan Modra
4166ebedf8 [RS6000] Don't be too clever with dg-do run and dg-do compile
Otherwise some versions of dejagnu go ahead and run the vsx tests
below when they should not.  To best cope with older dejagnu, put
"run" before "compile", the idea being that if the second dg-do always
wins then that won't cause fails.

The altivec tests also need -save-temps for the scan-assembler test to
occur when vms_hw.

	* gcc.target/powerpc/vsx-load-element-extend-char.c: Put "dg-do run"
	before "dg-do compile", and make them mutually exclusive.
	* gcc.target/powerpc/vsx-load-element-extend-int.c: Likewise.
	* gcc.target/powerpc/vsx-load-element-extend-longlong.c: Likewise.
	* gcc.target/powerpc/vsx-load-element-extend-short.c: Likewise.
	* gcc.target/powerpc/vsx-store-element-truncate-char.c: Likewise.
	* gcc.target/powerpc/vsx-store-element-truncate-int.c: Likewise.
	* gcc.target/powerpc/vsx-store-element-truncate-longlong.c: Likewise.
	* gcc.target/powerpc/vsx-store-element-truncate-short.c: Likewise.
	* gcc.target/powerpc/altivec-consts.c: Likewise, add -save-temps.
	* gcc.target/powerpc/le-altivec-consts.c: Likewise.
2020-10-29 09:13:17 +10:30
Alan Modra
bbb3625744 [RS6000] float128-type-2.c unsupported
I noticed this test is unsupported on power10 when looking through
test logs.  There seems no reason why that should be the case, ie.
the target test was meant to be powerpc64*-*-linux*.  And that
simplifies down further.

	* gcc.target/powerpc/float128-type-1.c: Simplify target test.
	* gcc.target/powerpc/float128-type-2.c: Likewise.
2020-10-29 09:13:16 +10:30
Alan Modra
23edcf6bee Re: testsuite: Enable and adjust powerpc fold-vec-extract/insert testcases
git commit badeac77f552 changed expected number of addi instructions,
causing these fails on powerpc-linux.

gcc.target/powerpc/fold-vec-insert-int-p9.c: \\maddi\\M found 12 times
FAIL: gcc.target/powerpc/fold-vec-insert-int-p9.c scan-assembler-times \\maddi\\M 8
gcc.target/powerpc/fold-vec-extract-char.p9.c: addi found 6 times
FAIL: gcc.target/powerpc/fold-vec-extract-char.p9.c scan-assembler-times addi 3
gcc.target/powerpc/fold-vec-extract-int.p9.c: \\maddi\\M found 6 times
FAIL: gcc.target/powerpc/fold-vec-extract-int.p9.c scan-assembler-times \\maddi\\M 3
gcc.target/powerpc/fold-vec-extract-longlong.p7.c: \\maddi\\M found 6 times
FAIL: gcc.target/powerpc/fold-vec-extract-longlong.p7.c scan-assembler-times \\maddi\\M 4
gcc.target/powerpc/fold-vec-extract-longlong.p8.c: \\maddi\\M found 6 times
FAIL: gcc.target/powerpc/fold-vec-extract-longlong.p8.c scan-assembler-times \\maddi\\M 4
changed by badeac77f552

I'm not at all sure why we are counting addi.  On linux I see
eight in fold-vec-insert-int-p9.c tearing down the stack frame in
function epilogues, and four in
        addi 9,1,16
        lvewx 0,0,9
For aix you have the above four but with a -16 offset.  There are no
stack frames, and you have four addressing stack red-zone as
        addi 9,1,-64

fold-vec-extract-char.p9.c on linux just has epilogue addi, aix has
red-zone addressing.  The same for fold-vec-extract-int.p9.c,
fold-vec-extract-longlong.p7.c and fold-vec-extract-longlong.p8.c.

It seems silly to count addi in a function epilogue, and fragile to
count them in code.  So remove the ilp32 addi checks.

	* gcc.target/powerpc/fold-vec-extract-char.p9.c: Don't check addi
	count for ilp32.
	* gcc.target/powerpc/fold-vec-extract-int.p9.c: Likewise.
	* gcc.target/powerpc/fold-vec-extract-longlong.p7.c: Likewise.
	* gcc.target/powerpc/fold-vec-extract-longlong.p8.c: Likewise.
	* gcc.target/powerpc/fold-vec-insert-int-p9.c: Likewise.
2020-10-29 09:13:15 +10:30
Marek Polacek
24fb1d9c58 c++: Improve the MVP -Wparentheses diagnostic.
I noticed that declarator->parenthesized is, for this warning, only set
to the opening paren.  But we can easily make it a range and generate
a nicer diagnostic.  Moreover, we can then offer a fix-it hint.

TL;DR: This patch changes

mvp3.C:8:7: warning: unnecessary parentheses in declaration of ‘i’ [-Wparentheses]
    8 |   int (i);
      |       ^

to

mvp3.C:8:7: warning: unnecessary parentheses in declaration of ‘i’ [-Wparentheses]
    8 |   int (i);
      |       ^~~
mvp3.C:8:7: note: remove parentheses
    8 |   int (i);
      |       ^~~
      |       - -

Tested by using -fdiagnostics-generate-patch and verifying that the
generated patch DTRT.

gcc/cp/ChangeLog:

	* decl.c (grokdeclarator): Offer a fix-it hint for the "unnecessary
	parentheses in declaration" warning.
	* parser.c (cp_parser_direct_declarator): When setting
	declarator->parenthesized, use a location range.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/mvp3.C: New test.
2020-10-28 18:02:05 -04:00
Marek Polacek
455ade1846 c++: Deprecate arithmetic convs on different enums [PR97573]
I noticed that C++20 P1120R0 deprecated certain arithmetic conversions
as outlined in [depr.arith.conv.enum], but we don't warn about them.  In
particular, "If one operand is of enumeration type and the other operand
is of a different enumeration type or a floating-point type, this
behavior is deprecated."  These will likely become ill-formed in C++23,
so we should warn by default in C++20.  To this effect, this patch adds
two new warnings (like clang++): -Wdeprecated-enum-enum-conversion and
-Wdeprecated-enum-float-conversion.  They are enabled by default in
C++20.  In older dialects, to enable these warnings you can now use
-Wenum-conversion which I made available in C++ too.  Note that unlike
C, in C++ it is not enabled by -Wextra, because that breaks bootstrap.

We already warn about comparisons of two different enumeration types via
-Wenum-compare, the rest is handled in this patch: we're performing the
usual arithmetic conversions in these contexts:
  - an arithmetic operation,
  - a bitwise operation,
  - a comparison,
  - a conditional operator,
  - a compound assign operator.

Using the spaceship operator as enum <=> real_type is ill-formed but we
don't reject it yet.  We should also address [depr.array.comp] too, but
it's not handled in this patch.

gcc/c-family/ChangeLog:

	PR c++/97573
	* c-opts.c (c_common_post_options): In C++20, turn on
	-Wdeprecated-enum-enum-conversion and
	-Wdeprecated-enum-float-conversion.
	* c.opt (Wdeprecated-enum-enum-conversion,
	Wdeprecated-enum-float-conversion): New options.
	(Wenum-conversion): Allow for C++ too.

gcc/cp/ChangeLog:

	PR c++/97573
	* call.c (build_conditional_expr_1): Warn about the deprecated
	enum/real type conversion in C++20.  Also warn about a non-enumerated
	and enumerated type in ?: when -Wenum-conversion is on.
	* typeck.c (do_warn_enum_conversions): New function.
	(cp_build_binary_op): Call it.

gcc/ChangeLog:

	PR c++/97573
	* doc/invoke.texi: Document -Wdeprecated-enum-enum-conversion
	and -Wdeprecated-enum-float-conversion.  -Wenum-conversion is
	no longer C/ObjC only.

gcc/testsuite/ChangeLog:

	PR c++/97573
	* g++.dg/cpp0x/linkage2.C: Add dg-warning.
	* g++.dg/parse/attr3.C: Likewise.
	* g++.dg/cpp2a/enum-conv1.C: New test.
	* g++.dg/cpp2a/enum-conv2.C: New test.
	* g++.dg/cpp2a/enum-conv3.C: New test.
2020-10-28 17:37:18 -04:00
Marek Polacek
976e7ef1a2 c++: Prevent warnings for value-dependent exprs [PR96742]
Here, in r11-155, I changed the call to uses_template_parms to
type_dependent_expression_p_push to avoid a crash in C++98 in
value_dependent_expression_p on a non-constant expression.  But that
prompted a host of complaints that we now warn for value-dependent
expressions in templates.  Those warnings are technically valid, but
people still don't want them because they're awkward to avoid.  This
patch uses value_dependent_expression_p or type_dependent_expression_p.
But make sure that we don't ICE in value_dependent_expression_p by
checking potential_constant_expression first.

gcc/cp/ChangeLog:

	PR c++/96675
	PR c++/96742
	* pt.c (tsubst_copy_and_build): Call value_dependent_expression_p or
	type_dependent_expression_p instead of type_dependent_expression_p_push.
	But only call value_dependent_expression_p for expressions that are
	potential_constant_expression.

gcc/testsuite/ChangeLog:

	PR c++/96675
	PR c++/96742
	* g++.dg/warn/Wdiv-by-zero-3.C: Turn dg-warning into dg-bogus.
	* g++.dg/warn/Wtautological-compare3.C: New test.
	* g++.dg/warn/Wtype-limits5.C: New test.
	* g++.old-deja/g++.pt/crash10.C: Remove dg-warning.
2020-10-28 17:26:45 -04:00
David Edelsohn
122f0db279 testsuite: Adjust target requirements for sad-vectorize and signbit.
More testcases with incorrect target selectors.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/sad-vectorize-1.c: Remove AIX skip.
	* gcc.target/powerpc/sad-vectorize-2.c: Remove AIX skip.
	* gcc.target/powerpc/sad-vectorize-3.c: Remove target.
	Require p9vector_hw.
	* gcc.target/powerpc/sad-vectorize-4.c: Remove target.
	Require p9vector_hw.
	* gcc.target/powerpc/signbit-1.c: Remove target.
	Require ppc_float128_sw.
	* gcc.target/powerpc/signbit-2.c: Remove target.
	Require ppc_float128_sw.
	* gcc.target/powerpc/signbit-3.c: Remove target.
	Require ppc_float128_sw.
2020-10-28 17:08:29 -04:00
Marek Polacek
323dd42552 c++: Member template function lookup failure [PR94799]
My earlier patch for this PR, r11-86, broke pybind11.  That patch
changed cp_parser_class_name to also consider the object expression
scope (parser->context->object_type) to fix parsing of

  p->template A<T>::foo(); // consider p's scope too

Here we reject

  b.operator typename B<T>::type();

because 'typename_p' in cp_parser_class_name uses 'scope', which means
that 'typename_p' will be true for the example above.  Then we create
a TYPENAME_TYPE via make_typename_type, which fails when tsubsting it;
the code basically created 'typename B::B' and then we complain that there
is no member named 'B' in 'A<int>'.  So, when deciding if we should
create a TYPENAME_TYPE, don't consider the object_type scope, like we
did pre-r11-86.

gcc/cp/ChangeLog:

	PR c++/94799
	* parser.c (cp_parser_class_name): Use parser->scope when
	setting typename_p.

gcc/testsuite/ChangeLog:

	PR c++/94799
	* g++.dg/template/lookup16.C: New test.
2020-10-28 15:25:51 -04:00
Marek Polacek
43cb72263f c++: GCC accepts junk before fold-expression [PR86773]
Here we accept a bogus expression before a left fold:

Recall that a fold expression looks like:

 fold-expression:
    ( cast-expression fold-operator ... )
    ( ... fold-operator cast-expression )
    ( cast-expression fold-operator ... fold-operator cast-expression )

but here we have

    ( cast-expression ... fold-operator cast-expression )

The best fix seems to just return error_mark_node when we know this code
is invalid, and let the subsequent code report that a ) was expected.

gcc/cp/ChangeLog:

	PR c++/86773
	* parser.c (cp_parser_fold_expression): Return error_mark_node
	if a left fold is preceded by an expression.

gcc/testsuite/ChangeLog:

	PR c++/86773
	* g++.dg/cpp1z/fold12.C: New test.
2020-10-28 15:22:05 -04:00
Ian Lance Taylor
dfbadb8ce9 syscall: don't build libcall_bsd.go on solaris
This new file was based on master sources that are built for *BSD
but not Solaris

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/266017
2020-10-28 12:18:01 -07:00
Tamar Christina
3dcd47389b AArch64: Skip test for pr97535 on ILP32 since it can't express the range.
I am excluding the test from ILP32 since the goal of the test is to test
truncations of large numbers above INT_MAX.

gcc/testsuite/ChangeLog:

	PR target/97535
	* gcc.target/aarch64/pr97535.c: Exclude ILP32.
2020-10-28 19:13:27 +00:00
Richard Sandiford
54ef7701a9 value-range: Give up on POLY_INT_CST ranges [PR97457]
This PR shows another problem with calculating value ranges for
POLY_INT_CSTs.  We have:

  ivtmp_76 = ASSERT_EXPR <ivtmp_60, ivtmp_60 > POLY_INT_CST [9, 4294967294]>

where the VQ coefficient is unsigned but is effectively acting
as a negative number.  We wrongly give the POLY_INT_CST the range:

  [9, INT_MAX]

and things go downhill from there: later iterations of the unrolled
epilogue are wrongly removed as dead.

I guess this is the final nail in the coffin for doing VRP on
POLY_INT_CSTs.  For other similarly exotic testcases we could have
overflow for any coefficient, not just those that could be treated
as contextually negative.

Testing TYPE_OVERFLOW_UNDEFINED doesn't seem like an option because we
couldn't handle warn_strict_overflow properly.  At this stage we're
just recording a range that might or might not lead to strict-overflow
assumptions later.

It still feels like we should be able to do something here, but for
now removing the code seems safest.  It's also telling that there
are no testsuite failures on SVE from doing this.

gcc/
	PR tree-optimization/97457
	* value-range.cc (irange::set): Don't decay POLY_INT_CST ranges
	to integer ranges.

gcc/testsuite/
	PR tree-optimization/97457
	* gcc.dg/vect/pr97457.c: New test.
2020-10-28 19:05:49 +00:00
Joseph Myers
a4223abb3d c: Allow omitted parameter names for C2x
C2x allows parameter names to be omitted in function definitions, as
in C++; add support for this feature.  As with other features that
only result in previously rejected code being accepted, this feature
is now accepted as an extension for previous standard versions, with a
pedwarn-if-pedantic that is disabled by -Wno-c11-c2x-compat.  The
logic for avoiding unused-parameter warnings for unnamed parameters is
in code shared between C and C++, so no changes are needed there.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c/
2020-10-28  Joseph Myers  <joseph@codesourcery.com>

	* c-decl.c (store_parm_decls_newstyle): Use pedwarn_c11 not
	error_at for omitted parameter name.

gcc/testsuite/
2020-10-28  Joseph Myers  <joseph@codesourcery.com>

	* gcc.dg/c11-parm-omit-1.c, gcc.dg/c11-parm-omit-2.c,
	gcc.dg/c11-parm-omit-3.c, gcc.dg/c11-parm-omit-4.c,
	gcc.dg/c2x-parm-omit-1.c, gcc.dg/c2x-parm-omit-2.c,
	gcc.dg/c2x-parm-omit-3.c, gcc.dg/c2x-parm-omit-4.c: New tests.
	* gcc.dg/noncompile/pr79758.c: Do not expect error for omitted
	parameter name.
2020-10-28 18:58:43 +00:00
Thomas Rodgers
a0e4d7b44c libstdc++: Implement C++20 features for <sstream>
New ctors and ::view() accessor for -
  * basic_stingbuf
  * basic_istringstream
  * basic_ostringstream
  * basic_stringstreamm

New ::get_allocator() accessor for basic_stringbuf.

libstdc++-v3/ChangeLog:
	* acinclude.m4 (glibcxx_SUBDIRS): Add src/c++20.
	* config/abi/pre/gnu.ver (GLIBCXX_3.4.29): New symbols.
	* configure: Regenerate.
	* include/std/sstream:
	(basic_stringbuf::basic_stringbuf(allocator const&)): New constructor.
	(basic_stringbuf::basic_stringbuf(openmode, allocator const&)): Likewise.
	(basic_stringbuf::basic_stringbuf(basic_string&&, openmode)): Likewise.
	(basic_stringbuf::basic_stringbuf(basic_stringbuf&&, allocator const&)):
	Likewise.
	(basic_stringbuf::get_allocator()): New method.
	(basic_stringbuf::view()): Likewise.
	(basic_istringstream::basic_istringstream(basic_string&&, openmode)):
	New constructor.
	(basic_istringstream::basic_istringstream(openmode, allocator const&)):
	Likewise
	(basic_istringstream::view()): New method.
	(basic_ostringstream::basic_ostringstream(basic_string&&, openmode)):
	New constructor.
	(basic_ostringstream::basic_ostringstream(openmode, allocator const&)):
	Likewise
	(basic_ostringstream::view()): New method.
	(basic_stringstream::basic_stringstream(basic_string&&, openmode)):
	New constructor.
	(basic_stringstream::basic_stringstream(openmode, allocator const&)):
	Likewise
	(basic_stringstream::view()): New method.
	* src/Makefile.in: Add c++20 directory.
	* src/Makefile.am: Regenerate.
	* src/c++20/Makefile.am: Add makefile for new sub-directory.
	* src/c++20/Makefile.in: Generate.
	* src/c++20/sstream-inst.cc: New file defining explicit
	instantiations for basic_stringbuf, basic_istringstream,
	basic_ostringstream, and basic_stringstream member functions
	added in C++20.
	* testsuite/27_io/basic_stringbuf/cons/char/2.cc: New test.
	* testsuite/27_io/basic_stringbuf/cons/wchar_t/2.cc: Likewise.
	* testsuite/27_io/basic_stringbuf/view/char/1.cc: Likewise.
	* testsuite/27_io/basic_stringbuf/view/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_istringstream/cons/char/1.cc: Likewise.
	* testsuite/27_io/basic_istringstream/cons/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_istringstream/view/char/1.cc: Likewise.
	* testsuite/27_io/basic_istringstream/view/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_ostringstream/cons/char/1.cc: Likewise.
	* testsuite/27_io/basic_ostringstream/cons/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_ostringstream/view/char/1.cc: Likewise.
	* testsuite/27_io/basic_ostringstream/view/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_stringstream/cons/char/1.cc: Likewise.
	* testsuite/27_io/basic_stringstream/cons/wchar_t/1.cc: Likewise.
	* testsuite/27_io/basic_stringstream/view/char/1.cc: Likewise.
	* testsuite/27_io/basic_stringstream/view/wchar_t/1.cc: Likewise.
2020-10-28 11:56:06 -07:00
Nathan Sidwell
4289e488dd c++: Make OMP UDR DECL_LOCAL_DECL_P earlier
I discovered that we were pushing an OMP UDR in a template before
setting DECL_LOCAL_DECL.  This caused the template machinery to give
it some template info.  It doesn't need that, and this changes the
parser to set it earlier.  We have to adjust instantiate_body to not
try and access such a function's non-existant template_info.  The
access checks that we're no longer doing are the same as those we did
on the containing function anyway.  So nothing is lost.

	gcc/cp/
	* parser.c (cp_parser_omp_declare_reduction): Set
	DECL_LOCAL_DECL_P before push_template_decl.
	* pt.c (instantiate_body): Nested fns do not have template_info.
2020-10-28 11:46:46 -07:00
Carl Love
a3c13696fd VSX_EXTRACT fix
2020-10-28  Carl Love  <cel@us.ibm.com>

gcc/

	* config/rs6000/vsx.md(xxgenpcvm_<mode>_internal): Remove TARGET_64BIT.
2020-10-28 11:53:01 -05:00
Patrick Palka
8572edc828 libstdc++: Fix arithmetic bug in year_month_weekday conversion [PR96713]
The conversion function year_month_weekday::operator sys_days computes
the offset in days from the first weekday of the month with:

 days{(index()-1)*7}
      ^~~~~~~~~~~~~  type 'unsigned'

We want the above to yield -7d when index() is 0u, but our 'days' alias
is based on long instead of int, so the conversion from unsigned to the
underlying type of 'days' instead yields a large positive value.

This patch fixes this by casting the result of index() to int so that
the initializer is sign-extended in the conversion to long.

The added testcase also verifies we do the right thing when index() == 5.

libstdc++-v3/ChangeLog:

	PR libstdc++/96713
	* include/std/chrono (year_month_weekday::operator sys_days):
	Cast the result of index() to int so that the initializer for
	days{} is sign-extended when it's converted to the underlying
	type.
	* testsuite/std/time/year_month_weekday/3.cc: New test.
2020-10-28 12:28:08 -04:00
Richard Biener
f4af2dde57 dump when SLP analysis fails due to shared vectype mismatch
This adds another one.

2020-10-28  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_slp_analyze_node_operations_1): Dump
	when shared vectype update fails.
2020-10-28 16:49:36 +01:00
Patrick Palka
9ccc349576 c++: Check constraints before instantiation from mark_used [PR95132]
This makes mark_used check constraints of a function _before_ calling
maybe_instantiate_decl, so that we don't try instantiating a function
(as part of return type deduction) with unsatisfied constraints.

gcc/cp/ChangeLog:

	PR c++/95132
	* decl2.c (mark_used): Move up the constraints_satisfied_p check
	so that we check constraints before calling maybe_instantiate_decl.

gcc/testsuite/ChangeLog:

	PR c++/95132
	* g++.dg/cpp2a/concepts-fn7.C: New test.
2020-10-28 11:47:26 -04:00
Nathan Sidwell
7d5f38e49e c++: Refactor push_template_decl
Sadly I need to wander into push_template_decl again.  But here's a
piece of RAII goodness first.

	gcc/cp/
	* pt.c (push_template_decl): Refactor for some RAII.
2020-10-28 08:13:17 -07:00
David Edelsohn
176b8b9679 testsuite: Correct requirements for vadsdu*, vslv and vsrv testcases.
This patch renmoves extraneous dg-requirement restrictions on the testcases.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/vadsdu-0.c: Remove target.
	* gcc.target/powerpc/vadsdu-1.c: Remove target.
	* gcc.target/powerpc/vadsdu-2.c: Remove target.
	* gcc.target/powerpc/vadsdu-3.c: Remove target.
	* gcc.target/powerpc/vadsdu-4.c: Remove target.
	* gcc.target/powerpc/vadsdu-5.c: Remove target.
	* gcc.target/powerpc/vadsdub-1.c: Remove target.
	* gcc.target/powerpc/vadsdub-2.c: Remove target.
	* gcc.target/powerpc/vadsduh-1.c: Remove target.
	* gcc.target/powerpc/vadsduh-2.c: Remove target.
	* gcc.target/powerpc/vadsduw-1.c: Remove target.
	* gcc.target/powerpc/vadsduw-2.c: Remove target.
	* gcc.target/powerpc/vslv-0.c: Remove target.
	* gcc.target/powerpc/vslv-1.c: Remove target.
	* gcc.target/powerpc/vsrv-0.c: Remove target.
	* gcc.target/powerpc/vsrv-1.c: Remove target.
2020-10-28 11:04:54 -04:00
Richard Biener
6f62d8dd33 Ignore ignored operands in vect_get_and_check_slp_defs
This passes down skip_args to vect_get_and_check_slp_defs to skip
ignored ops there, too and not fail SLP discovery.  This fixes
gcc.target/aarch64/sve/reduc_strict_5.c

2020-10-28  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_get_and_check_slp_defs): For skipped
	args just push NULLs and vect_uninitialized_def.
	(vect_build_slp_tree_2): Allocate skip_args for all ops
	and pass it down to vect_get_and_check_slp_defs.
2020-10-28 16:00:34 +01:00
David Edelsohn
a4b9620d56 testsuite: Correct requirements for byte-in-* testcases.
commit 25ffd3d34e means we no longer define an overloaded
__builtin_byte_in_set for -m32, so the more informative
"__builtin_byte_in_set is not supported in this compiler
configuration" is not reported.

This patch changes byte-in-set-2.c to expect an implicit declaration
warning.  It also removes unnecessary target requirement for all
byte-in-*.c tests and no longer skips AIX.

gcc/testsuite/ChangeLog:

2020-10-28  David Edelsohn  <dje.gcc@gmail.com>
	    Alan Modra  <amodra@gmail.com>

	* gcc.target/powerpc/byte-in-either-range-0.c: Remove target.
	* gcc.target/powerpc/byte-in-either-range-1.c: Remove target.
	* gcc.target/powerpc/byte-in-range-0.c: Remove target.
	* gcc.target/powerpc/byte-in-range-1.c: Remove target.
	* gcc.target/powerpc/byte-in-set-0.c: Remove target.
	* gcc.target/powerpc/byte-in-set-1.c: Remove target.
	* gcc.target/powerpc/byte-in-set-2.c: Remove target. Expect
	implicit declaration warning.
2020-10-28 10:41:13 -04:00
Richard Biener
69adcfce12 Fix gcc.dg/vect/bb-slp-5[89].c
I forgot a vect_double check.

2020-10-28  Richard Biener  <rguenther@suse.de>

	* gcc.dg/vect/bb-slp-58.c: Require vect_double.
	* gcc.dg/vect/bb-slp-59.c: Likewise.
2020-10-28 15:04:06 +01:00
Richard Biener
b626b00823 tree-optimization/97615 - avoid creating externals from patterns
The previous change missed to check for patterns again, the following
corrects that.

2020-10-28  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97615
	* tree-vect-slp.c (vect_build_slp_tree_2): Do not build
	an external from pattern defs.

	* gcc.dg/vect/bb-slp-pr97615.c: New testcase.
2020-10-28 15:04:06 +01:00
Richard Biener
616351b897 Fix iteration over loads in SLP optimize
I've made a typo when refactoring the iteration over all loads in
the SLP graph.  Fixed.

2020-10-28  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_optimize_slp): Fix iteration over
	all loads.
2020-10-28 15:04:06 +01:00
Jonathan Wakely
c227d96feb libstdc++: Add comment to nothrow new explaining catch (...)
The decision to not rethrow a __forced_unwind exception is deliberate,
so add a comment explaining it.

libstdc++-v3/ChangeLog:

	* libsupc++/new_opnt.cc (new): Add comment about forced unwind
	exceptions.
2020-10-28 13:19:21 +00:00
Jonathan Wakely
0bc199fc5d libstdc++: Override BUFSIZ for Windows targets [PR 94268]
This replaces uses of BUFSIZ with a new _GLIBCXX_BUFSIZ macro that can
be overridden in target-specific config headers.

That allows the mingw and mingw-w64 targets to override it, because
BUFSIZ is apparently defined to 512, resulting in poor performance. The
MSVCRT stdio apparently uses 4096, so we use that too.

libstdc++-v3/ChangeLog:

	PR libstdc++/94268
	* config/os/mingw32-w64/os_defines.h (_GLIBCXX_BUFSIZ):
	Define.
	* config/os/mingw32/os_defines.h (_GLIBCXX_BUFSIZ):
	Define.
	* include/bits/fstream.tcc: Use _GLIBCXX_BUFSIZ instead
	of BUFSIZ.
	* include/ext/stdio_filebuf.h: Likewise.
	* include/std/fstream (_GLIBCXX_BUFSIZ): Define.
2020-10-28 13:19:21 +00:00
Richard Biener
2acb33103c Change the way we split stores in BB vectorization
The following fixes missed optimizations due to the strange way we
split stores in BB vectorization.  The solution is to split at
the failure boundary and not re-align that to the initial piece
chosen vector size.  Also re-analyze any larger matching rest.

2020-10-28  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_build_slp_instance): Split the store
	group at the failure boundary and also re-analyze a large enough
	matching rest.

	* gcc.dg/vect/bb-slp-68.c: New testcase.
2020-10-28 14:15:37 +01:00
Richard Biener
ac1724ccfd dump reason for throwing away SLP instance
This adds dumping to vect_slp_analyze_node_alignment when it fails
an SLP instance due to shared vector type conflicts.

2020-10-28  Richard Biener  <rguenther@suse.de>

	* tree-vect-data-refs.c (vect_slp_analyze_node_alignment):
	Dump when vect_update_shared_vectype fails.
2020-10-28 14:15:37 +01:00
Jonathan Wakely
72a87d82e0 libstdc++: Fix name clash with _Cosh in QNX headers [PR 95592]
This replaces unqualified names like _Cosh with struct std::_Cosh to
ensure there is no ambiguity with other entities with the same name.

libstdc++-v3/ChangeLog:

	PR libstdc++/95592
	* include/bits/valarray_after.h (_DEFINE_EXPR_UNARY_OPERATOR)
	(_DEFINE_EXPR_BINARY_OPERATOR, _DEFINE_EXPR_BINARY_FUNCTION):
	Use elaborated-type-specifier and qualified-id to avoid
	ambiguities with QNX system headers.
	* testsuite/26_numerics/valarray/95592.cc: New test.
2020-10-28 12:35:44 +00:00