Commit Graph

180698 Commits

Author SHA1 Message Date
Marek Polacek 79991e2348 c++: Reject float <=> enum.
As [depr.arith.conv.enum] says, these are ill-formed.

gcc/cp/ChangeLog:

	* typeck.c (do_warn_enum_conversions): Don't warn for SPACESHIP_EXPR.
	(cp_build_binary_op): Reject float <=> enum or enum <=> float.  Use
	CP_INTEGRAL_TYPE_P instead of INTEGRAL_OR_ENUMERATION_TYPE_P.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/enum-conv1.C: Remove unused code.
	* g++.dg/cpp2a/spaceship-err5.C: New test.
2020-10-29 14:06:13 -04:00
Patrick Palka e1344fe7b6 c++: Simplify constraint normalization routines
Many of the high-level constraint normalization routines allow the
caller to supply the initial template arguments for normalization, but
in practice all of the callers supply something equivalent to the
identity mapping(*).

This patch hard-codes this prevalent choice of initial template
arguments by making get_normalized_constraints always pass NULL_TREE as
the args to normalize_expression.  This admits some simplifications in
the high-level routines, such as removing their 'args' parameter and
consolidating the two versions of normalize_constraint_expression.

(*): In particular, a set of generic template arguments or NULL_TREE.
In the case of the two-parm version of normalize_constraint_expression,
we were suspiciously using the template arguments of a concept-id when
normalizing the concept-id as a constraint-expression.

gcc/cp/ChangeLog:

	* constraint.cc (get_normalized_constraints): Remove 'args'
	parameter.  Pass NULL_TREE as the initial template arguments to
	normalize_expression.
	(get_normalized_constraints_from_info): Remove 'args' parameter
	and adjust the call to get_normalized_constraints.
	(get_normalized_constraints_from_decl): Remove 'args' local
	variable and adjust call to get_normalized_constraints_from_info.
	(normalize_concept_definition): Remove 'args' local variable
	and adjust call to get_normalized_constraints.
	(normalize_constraint_expression): Remove the two-parameter
	overload.  Remove 'args' parameter from the three-parameter
	overload and update function comment accordingly.  Remove
	default argument from 'diag' parameter.  Adjust call to
	get_normalized_constraints.
	(finish_nested_requirement): Adjust call to
	normalize_constraint_expression.
	(strictly_subsumes): Remove 'args' parameter.  Adjust call to
	get_normalized_constraints_from_info.
	(weakly_subsumes): Likewise.
	* cp-tree.h (strictly_subsumes): Remove 'args' parameter.
	(weakly_subsumes): Likewise.
	* pt.c (process_partial_specialization): Adjust call to
	strictly_subsumes.
	(is_compatible_template_arg): Adjust call to weakly_subsumes.
2020-10-29 14:03:03 -04:00
Patrick Palka 5681668765 c++: Tolerate empty initial args during normalization [PR97412]
When normalizing the constraint-expression of a nested-requirement, we
pass NULL_TREE as the initial template arguments for normalization, but
tsubst_argument_pack is not prepared to handle a NULL_TREE args vector.
This causes us to ICE when normalizing a variadic concept as part of a
nested-requirement.

This patch fixes the ICE by guarding the call to tsubst_template_args in
normalize_concept_check appropriately.  This will also enable us to
simplify many of the normalization routines to just pass NULL_TREE
(instead of a set of generic template arguments) as the initial template
arguments.

gcc/cp/ChangeLog:

	PR c++/97412
	* constraint.cc (normalize_concept_check): Don't call
	tsubst_template_args when 'args' is NULL.

gcc/testsuite/ChangeLog:

	PR c++/97412
	* g++.dg/cpp2a/concepts-variadic2.C: New test.
2020-10-29 14:02:59 -04:00
Richard Biener 57ec9b687b Fix some memleaks
This fixes some memleaks, one older, one recently introduced.

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

	* tree-ssa-pre.c (compute_avail): Free operands consistently.
	* tree-vect-loop.c (vectorizable_phi): Make sure all operand
	defs vectors are released.
2020-10-29 18:38:43 +01:00
Jason Merrill 8895443a42 c++: Fix constexpr cleanup error handling.
In this testcase, the primary evaluation successfully produces 'true', and
then running one of the cleanups hits a double delete, making the whole
thing not a valid constant expression.  So we were returning 'true' wrapped
in a NOP_EXPR to indicate its non-constancy, but evaluating that again is a
perfectly acceptable constant expression, so we weren't getting the verbose
diagnostic we were looking for.

So if non_constant_p gets set other than for overflow, go back to the
original expression.

With this change, we should never hit the manifestly_const_eval test, and
the is-constant-evaluated1.C test passes without it.

gcc/cp/ChangeLog:

	PR c++/97388
	* constexpr.c (cxx_eval_outermost_constant_expr): Revert to
	original expression if evaluation sets non_constant_p.

gcc/testsuite/ChangeLog:

	PR c++/97388
	* g++.dg/cpp2a/constexpr-dtor8.C: New test.
2020-10-29 13:09:19 -04:00
Jakub Jelinek 5afd90c5f3 c++: Fix constexpr dtors vs invisible ref [PR97388]
For arguments passed by invisible reference, in the IL until genericization
we have the source types on the callee side and while on the caller side
we already pass references to the actual argument slot in the caller, we
undo that in cxx_bind_parameters_in_call's
      if (TREE_ADDRESSABLE (type))
        /* Undo convert_for_arg_passing work here.  */
        x = convert_from_reference (x);
This works fine most of the time, except when the type also has constexpr
destructor; in that case the destructor is invoked in the caller and thus
the unsharing we do to make sure that the callee doesn't modify caller's
values is in that case undesirable, it prevents the changes done in the
callee propagating to the caller which should see them for the constexpr
dtor evaluation.

The following patch fixes that.  While it could be perhaps done for all
TREE_ADDRESSABLE types, I don't see the need to change the behavior
if there is no constexpr non-trivial dtor.

Jason: And we need to avoid memoizing the call, because a later equivalent
call also needs to modify its argument.  And we don't need to unshare
constructors when we aren't memoizing the call, because we already unshared
them when evaluating the TARGET_EXPR representing the copy-initialization of
the argument.

2020-10-20  Jakub Jelinek  <jakub@redhat.com>
	    Jason Merrill  <jason@redhat.com>

	PR c++/97388
	* constexpr.c (cxx_bind_parameters_in_call): Set non_constant_args
	if the parameter type has a non-trivial destructor.
	(cxx_eval_call_expression): Only unshare arguments if we're
	memoizing this evaluation.

	* g++.dg/cpp2a/constexpr-dtor5.C: New test.
	* g++.dg/cpp2a/constexpr-dtor6.C: New test.
	* g++.dg/cpp2a/constexpr-dtor7.C: New test.
2020-10-29 13:09:18 -04:00
Jan Hubicka 2ca6de338d Annotate vec::copy better for mem stats
* vec.h (vec<T, va_heap, vl_ptr>::copy): Pass mem stat info.
2020-10-29 18:03:29 +01:00
Jan Hubicka 0da3e7668c Avoid typeless storage in wide-int
* wide-int.h (trailing_wide_ints <N>): Turn len to array of structures
	so it does not imply typeless storage.
	(trailing_wide_ints <N>::operator): update
	(trailing_wide_ints <N>::operator []): Update.
2020-10-29 16:44:48 +01:00
Jakub Jelinek 815baade9a c++: Diagnose constexpr delete [] new int; and delete new int[N]; [PR95808]
This patch diagnoses delete [] new int; and delete new int[1]; in constexpr
contexts by remembering
IDENTIFIER_OVL_OP_FLAGS (DECL_NAME (fun)) & OVL_OP_FLAG_VEC
from the operator new and checking it at operator delete time.

2020-10-29  Jakub Jelinek  <jakub@redhat.com>

	PR c++/95808
	* cp-tree.h (enum cp_tree_index): Add CPTI_HEAP_VEC_UNINIT_IDENTIFIER
	and CPTI_HEAP_VEC_IDENTIFIER.
	(heap_vec_uninit_identifier, heap_vec_identifier): Define.
	* decl.c (initialize_predefined_identifiers): Initialize those
	identifiers.
	* constexpr.c (cxx_eval_call_expression): Reject array allocations
	deallocated with non-array deallocation or non-array allocations
	deallocated with array deallocation.
	(non_const_var_error): Handle heap_vec_uninit_identifier and
	heap_vec_identifier too.
	(cxx_eval_constant_expression): Handle also heap_vec_uninit_identifier
	and in that case during initialization replace it with
	heap_vec_identifier.
	(find_heap_var_refs): Handle heap_vec_uninit_identifier and
	heap_vec_identifier too.

	* g++.dg/cpp2a/constexpr-new15.C: New test.
2020-10-29 16:27:01 +01:00
Joseph Myers 40749db75c stdbool.h: Update true and false expansions for C2x
C2x has changed the expansions of the true and false macros in
<stdbool.h> so that they have type _Bool (including in #if conditions,
i.e. an unsigned type in that context).  Use the new expansions in
GCC's <stdbool.h> for C2x.

See bug 82272 for related discussion (but this patch does *not*
implement the warning discussed there).

Note that it's possible there may be a further change to make bool,
true and false keywords (there was support in principle for that at
the April WG14 meeting).  But currently these expansions of type _Bool
are what C2x requires and there isn't actually a paper before WG14 at
present that would introduce the new keywords.

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

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

	* ginclude/stdbool.h [__STDC_VERSION__ > 201710L] (true, false):
	Define with type _Bool.

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

	* gcc.dg/c11-bool-1.c, gcc.dg/c2x-bool-1.c, gcc.dg/c99-bool-4.c:
	New tests.
2020-10-29 15:06:26 +00:00
Jonathan Wakely 8c84486bba libstdc++: Improve tests for constexpr algorithms
These tests just return true without checking that the results of the
algorithms. Although it should be safe to assume that the algorithms
behave the same at compile-time as at run-time, we can use these tests
to verify it.

This replaces each 'return true' statement with a condition that depends
on the basic functionality of the algorithm, such as returning an
iterator to the right position.

libstdc++-v3/ChangeLog:

	* testsuite/25_algorithms/all_of/constexpr.cc: Check result of
	the algorithm.
	* testsuite/25_algorithms/any_of/constexpr.cc: Likewise.
	* testsuite/25_algorithms/binary_search/constexpr.cc: Likewise.
	* testsuite/25_algorithms/copy_backward/constexpr.cc: Likewise.
	* testsuite/25_algorithms/count/constexpr.cc: Likewise.
	* testsuite/25_algorithms/equal/constexpr.cc: Likewise.
	* testsuite/25_algorithms/equal_range/constexpr.cc: Likewise.
	* testsuite/25_algorithms/fill/constexpr.cc: Likewise.
	* testsuite/25_algorithms/find_end/constexpr.cc: Likewise.
	* testsuite/25_algorithms/find_if/constexpr.cc: Likewise.
	* testsuite/25_algorithms/is_partitioned/constexpr.cc: Likewise.
	* testsuite/25_algorithms/is_permutation/constexpr.cc: Likewise.
	* testsuite/25_algorithms/is_sorted_until/constexpr.cc:
	Likewise.
	* testsuite/25_algorithms/lexicographical_compare/constexpr.cc:
	Likewise.
	* testsuite/25_algorithms/lower_bound/constexpr.cc: Likewise.
	* testsuite/25_algorithms/merge/constexpr.cc: Likewise.
	* testsuite/25_algorithms/mismatch/constexpr.cc: Likewise.
	* testsuite/25_algorithms/none_of/constexpr.cc: Likewise.
	* testsuite/25_algorithms/partition_copy/constexpr.cc: Likewise.
	* testsuite/25_algorithms/remove_copy/constexpr.cc: Likewise.
	* testsuite/25_algorithms/remove_copy_if/constexpr.cc: Likewise.
	* testsuite/25_algorithms/remove_if/constexpr.cc: Likewise.
	* testsuite/25_algorithms/replace_if/constexpr.cc: Likewise.
	* testsuite/25_algorithms/reverse/constexpr.cc: Likewise.
	* testsuite/25_algorithms/reverse_copy/constexpr.cc: Likewise.
	* testsuite/25_algorithms/rotate_copy/constexpr.cc: Likewise.
	* testsuite/25_algorithms/search/constexpr.cc: Likewise.
	* testsuite/25_algorithms/set_difference/constexpr.cc: Likewise.
	* testsuite/25_algorithms/set_intersection/constexpr.cc:
	Likewise.
	* testsuite/25_algorithms/set_symmetric_difference/constexpr.cc:
	Likewise.
	* testsuite/25_algorithms/set_union/constexpr.cc: Likewise.
	* testsuite/25_algorithms/unique_copy/constexpr.cc: Likewise.
	* testsuite/25_algorithms/upper_bound/constexpr.cc: Likewise.
2020-10-29 14:47:18 +00:00
Jonathan Wakely 822c1d21a3 libstdc++: Allow Lemire's algorithm to be used in more cases
This extends the fast path to also work when the URBG's range of
possible values is not the entire range of its result_type. Previously,
the slow path would be used for engines with a uint_fast32_t result type
if that type is actually a typedef for uint64_t rather than uint32_t.
After this change, the generator's result_type is not important, only
the range of possible value that generator can produce. If the
generator's range is exactly UINT64_MAX then the calculation will be
done using 128-bit and 64-bit integers, and if the range is UINT32_MAX
it will be done using 64-bit and 32-bit integers.

In practice, this benefits most of the engines and engine adaptors
defined in [rand.predef] on x86_64-linux and other 64-bit targets. This
is because std::minstd_rand0 and std::mt19937 and others use
uint_fast32_t, which is a typedef for uint64_t.

The code now makes use of the recently-clarified requirement that the
generator's min() and max() functions are usable in constant
expressions (see LWG 2154).

libstdc++-v3/ChangeLog:

	* include/bits/uniform_int_dist.h (_Power_of_two): Add
	constexpr.
	(uniform_int_distribution::_S_nd): Add static_assert to ensure
	the wider type is twice as wide as the result type.
	(uniform_int_distribution::__generate_impl): Add static_assert
	and declare variables as constexpr where appropriate.
	(uniform_int_distribution:operator()): Likewise. Only consider
	the uniform random bit generator's range of possible results
	when deciding whether _S_nd can be used, not the __uctype type.
2020-10-29 14:47:18 +00:00
Jonathan Wakely d067bd7293 libstdc++: Do not use volatile for __gnu_cxx::rope reference counting
The rope extension uses a volatile variable for its reference count.
This is not only unnecessary for correctness (volatile provides neither
atomicity nor memory visibility, and the variable is only modified while
a lock is held) but it now causes deprecated warnings with
-Wsystem-headers due to the use of ++ and -- operators.

It would be possible to use __gnu_cxx::__exchange_and_add in _M_incr and
_M_decr when __atomic_is_lock_free(sizeof(_RC_t), &_M_ref_count) is
true, rather than locking a mutex. That would probably be a significant
improvement for multi-threaded and single-threaded code (because
__exchange_and_add will use non-atomic ops when possible, and even in MT
code it should be faster than the mutex lock/unlock pair). However,
mixing objects compiled with the old and new code would result in
inconsistent synchronization being used for the reference count.

libstdc++-v3/ChangeLog:

	* include/ext/rope (_Refcount_Base::_M_ref_count): Remove
	volatile qualifier.
	(_Refcount_Base::_M_decr()): Likewise.
2020-10-29 14:47:17 +00:00
Jonathan Wakely 3c9b99ef71 libstdc++: Make std::function work better with -fno-rtti
This change allows std::function::target<F>() to work even without RTTI,
using the same approach as std::any. Because we know what the manager
function would be for a given type, we can check if the stored pointer
has the expected address. If it does, we don't need to use RTTI. If it
isn't equal, we still need to do the RTTI check (when RTTI is enabled)
to handle the case where the same function has different addresses in
different shared objects.

This also changes the implementation of the manager function to return a
null pointer result when asked for the type_info of the target object.
This not only avoids a warning with -Wswitch -Wsystem-headers, but also
avoids prevents std::function::target_type() from dereferencing an
uninitialized pointer when the linker keeps an instantiation of the
manager function that was compiled without RTTI.

Finally, this fixes a bug in the non-const overload of function::target
where calling it with a function type F was ill-formed, due to
attempting to use const_cast<F*>(ptr). The standard only allows
const_cast<T*> when T is an object type.  The solution is to use
*const_cast<F**>(&ptr) instead, because F* is an object type even if F
isn't. I've also used _GLIBCXX17_CONSTEXPR in function::target so that
it doesn't bother instantiating anything for types that can never be a
valid target.

libstdc++-v3/ChangeLog:

	* include/bits/std_function.h (_Function_handler<void, void>):
	Define explicit specialization used for invalid target types.
	(_Base_manager::_M_manager) [!__cpp_rtti]: Return null.
	(function::target_type()): Check for null pointer.
	(function::target()): Define unconditionall. Fix bug with
	const_cast of function pointer type.
	(function::target() const): Define unconditionally, but
	only use RTTI if enabled.
	* testsuite/20_util/function/target_no_rtti.cc: New test.
2020-10-29 14:47:17 +00:00
Aldy Hernandez 054d7b9f6f Selectively trap if ranger and vr-values disagree on range builtins.
The UBSAN builtins degrade into PLUS/MINUS/MULT and call
extract_range_from_binary_expr, which as the PR shows, can special
case some symbolics which the ranger doesn't currently handle.

Looking at vr_values::extract_range_builtin(), I see that every single
place where we ask for a range, we bail on non-integers (symbolics,
etc).  That is, with the exception of the UBSAN builtins.

Since this seems to be particular to UBSAN, we could still go with the
original plan of removing the duplicity in ranger vs vr-values, but
leave in the UBSAN builtin handling.  This isn't ideal, as we'd like
to remove all the common code, but I'd be willing to put up with UBSAN
duplication for the time being.

This patch disables the assert on the UBSAN builtins, while still
trapping if any other differences are found between the vr_values and
the ranger versions of builtin range handling.

As a follow-up, once Fedora can test this approach, I'll remove all
the builtin code from extract_range_builtin, with the exception of the
UBSAN stuff (renaming it to extract_range_ubsan_builtin).

Since the builtin code has proven fickle across architectures, I've
tested this with {-m32,-m64,-fsanitize=signed-integer-overflow} on
x86, ppc64le, and aarch64.  I think this should be enough.  If it
isn't, we can revert the patch, and leave the duplicate code until
the next release cycle when hopefully vr_values, evrp, and friends
will all be overhauled.

gcc/ChangeLog:

	PR tree-optimization/97505
	* vr-values.c (vr_values::extract_range_basic): Enable
	trap again for everything except UBSAN builtins.
2020-10-29 15:40:39 +01:00
Jakub Jelinek 8fe9869083 * gcc.dg/pr97596.c: Require int128 effective target. 2020-10-29 15:21:32 +01:00
Andrew MacLeod a3ffa866e3 Add testcase for PR97596
Add testcase

	gcc/testsuite
	* gcc.dg/pr97596.c: New.
2020-10-29 10:18:23 -04:00
Nathan Sidwell 9703b8d98c c++: Stop (most) function-scope entities having a template header
Currently push_template_decl (mostly) decides whether to add a
template header to an entity by seeing if it has DECL_LANG_SPECIFIC.
That might have been a useful predicate at one time, but basing
semantic implications on how we've decided to represent decls is bound
to be brittle.  And indeed it is, as more decls grow a use for
lang-specific.  In particular I discovered that function-scope
VAR_DECLs couild grow lang-specific, and thereby get a template
header.  There's no need for that, and it breaks an invariant modules
was expected.

This patch changes that, and bases the descision on the properties of
the decl.  In particular the only function-scope decl that gets a
template header is an implicit-typedef.

I also cleaned up the behaviour of it building a template-info only to
ignore it.

	gcc/cp/
	* pt.c (push_template_decl): Do not give function-scope entities
	other than implicit typedefs a template header. Do not readd
	template info to a redeclared template.
2020-10-29 07:16:45 -07:00
Patrick Palka 2e0216f9c4 libstdc++: Fix memory issue in ranges::lexicographical_compare testcase
libstdc++-v3/ChangeLog:

	* testsuite/25_algorithms/lexicographical_compare/constrained.cc:
	(test03): Fix initializing the vector vy with the array y of size 4.
2020-10-29 10:11:12 -04:00
Richard Sandiford 6e23549157 vect: Fix load costs for SLP permutes
For the following test case (compiled with load/store lanes
disabled locally):

  void
  f (uint32_t *restrict x, uint8_t *restrict y, int n)
  {
    for (int i = 0; i < n; ++i)
      {
	x[i * 2] = x[i * 2] + y[i * 2];
	x[i * 2 + 1] = x[i * 2 + 1] + y[i * 2];
      }
  }

we have a redundant no-op permute on the x[] load node:

   node 0x4472350 (max_nunits=8, refcnt=2)
          stmt 0 _5 = *_4;
          stmt 1 _13 = *_12;
          load permutation { 0 1 }

Then, when costing it, we pick a cost of 1, even though we need 4 copies
of the x[] load to match a single y[] load:

   ==> examining statement: _5 = *_4;
   Vectorizing an unaligned access.
   vect_model_load_cost: unaligned supported by hardware.
   vect_model_load_cost: inside_cost = 1, prologue_cost = 0 .

The problem is that the code only considers the permutation for
the first scalar iteration, rather than for all VF iterations.

This patch tries to fix that by making vect_transform_slp_perm_load
calculate the value instead.

gcc/
	* tree-vectorizer.h (vect_transform_slp_perm_load): Take an
	optional extra parameter.
	* tree-vect-slp.c (vect_transform_slp_perm_load): Calculate
	the number of loads as well as the number of permutes, taking
	the counting loop from...
	* tree-vect-stmts.c (vect_model_load_cost): ...here.  Use the
	value computed by vect_transform_slp_perm_load for ncopies.
2020-10-29 13:38:01 +00:00
Martin Liska 568de14d2e LTO: get_section: add new argument
gcc/ChangeLog:

	PR lto/97508
	* langhooks.c (lhd_begin_section): Call get_section with
	not_existing = true.
	* output.h (get_section): Add new argument.
	* varasm.c (get_section): Fail when NOT_EXISTING is true
	and a section already exists.
	* ipa-cp.c (ipcp_write_summary): Remove.
	(ipcp_read_summary): Likewise.
	* ipa-fnsummary.c (ipa_fn_summary_read): Always read jump
	functions summary.
	(ipa_fn_summary_write): Always stream it.
2020-10-29 14:32:48 +01:00
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 badeac77f5 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 badeac77f5

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