Commit Graph

187483 Commits

Author SHA1 Message Date
Jakub Jelinek
ef07b918a7 openmp: Diagnose another case of mixing parameter and attribute syntax
This patch diagnoses cases like:
  #pragma omp parallel
  [[omp::directive (declare simd)]] int foo ();
or
  #pragma omp taskgroup
  int bar [[omp::directive (declare simd)]] (int);
where the pragma is on the same declaration statement as the declare simd
attribute.

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

	* parser.c (cp_parser_lambda_body): Add temp overrides
	for parser->{omp_declare_simd,oacc_routine,omp_attrs_forbidden_p}.
	(cp_parser_statement): Restore parser->omp_attrs_forbidden_p for
	cp_parser_declaration_statement.
	(cp_parser_default_argument): Add temp override for
	parser->omp_attrs_forbidden_p.
	(cp_parser_late_parsing_omp_declare_simd): Diagnose declare simd
	or declare variant in attribute syntax on a declaration immediately
	following an OpenMP construct in pragma syntax.

	* g++.dg/gomp/attrs-11.C: Add new tests.
2021-08-12 09:34:16 +02:00
Jakub Jelinek
9b7ab853bf c++: Fix ICE on defaulted spaceship with pointer return type [PR94162]
The spaceship-synth-neg6.C testcase ICEs because we call cat_tag_for
on the explicit return type, but pointer types don't have
TYPE_LINKAGE_IDENTIFIER.  The patch fixes that by checking for
CLASS_TYPE_P only and also adds verification that it is in std
namespace, so we don't return non-cc_last for my_namespace::partial_ordering.

The g++.dg/cpp2a/spaceship-synth11.C testcase is from a PR that has been
fixed with r12-619-gfc178519771db508c03611cff4a1466cf67fce1d (but
not backported to 11).

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

gcc/cp/
	PR c++/94162
	* method.c (cat_tag_for): Return cc_last for !CLASS_TYPE_P
	or for classes not in std namespace.
gcc/testsuite/
	PR c++/99429
	* g++.dg/cpp2a/spaceship-synth11.C: New test.

	PR c++/94162
	* g++.dg/cpp2a/spaceship-synth-neg6.C: New test.
2021-08-12 09:34:16 +02:00
Jakub Jelinek
c84f79e9e3 openmp: Diagnose omp::directive/sequence on using-directive
With the using-directive parsing changes, we now emit only a warning
for [[omp::directive (...)]] on using-directive.  While that is right
without -fopenmp/-fopenmp-simd, when OpenMP is enabled, that should
be an error as OpenMP (is going to) disallow such attributes there
as they do not appertain to a statement.

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

	* name-lookup.c (finish_using_directive): Diagnose omp::directive
	or omp::sequence attributes on using-directive.

	* g++.dg/gomp/attrs-11.C: Adjust expected diagnostics.
2021-08-12 09:34:16 +02:00
Jakub Jelinek
3890c28ac5 c++: Fix up parsing of attributes for using-directive
As I've said earlier and added xfails in gen-attrs-76.C test,
https://eel.is/c++draft/namespace.udir#nt:using-directive
has attribute-specifier-seq[opt] at the start, not at the end before ;
as gcc is expecting.
IMHO we should continue parsing at the end the GNU attributes
because using namespace N __attribute__((strong));, while not supported
anymore, used to be supported in the past, but my code searches for
using namespace N [[gnu::strong]]; didn't reveal anything at all.

2021-08-12  Jakub Jelinek  <jakub@redhat.com>

	* parser.c (cp_parser_block_declaration): Call
	cp_parser_using_directive for C++11 attributes followed by
	using namespace tokens.
	(cp_parser_using_directive): Parse C++11 attributes at the start
	of the directive rather than at the end, only parse GNU attributes
	at the end.

	* g++.dg/lookup/strong-using.C: Add test using [[gnu::strong]]
	as well.
	* g++.dg/lookup/strong-using2.C: Likewise.
	* g++.dg/cpp0x/gen-attrs-58.C: Move alignas(int) before
	using namespace.
	* g++.dg/cpp0x/gen-attrs-59.C: Move alignas(X) before
	using namespace, add tests for alignas before semicolon.
	* g++.dg/cpp0x/gen-attrs-76.C: Remove xfails.  Add test for
	C++11 attributes on using directive before semicolon.
2021-08-12 09:34:16 +02:00
Eric Botcazou
2bdf17de1d Make -no-pie option work for native Windows
Binutils 2.36/2.37 generate PIE executables by default on native Windows
(because --dynamicbase is the default) so it makes sense to have a simple
way to counter that and -no-pie seems appropriate, all the more so that
it is automatically passed when building the compiler itself.

gcc/
	* configure.ac (PE linker --disable-dynamicbase support): New check.
	* configure: Regenerate.
	* config.in: Likewise.
	* config/i386/mingw32.h (LINK_SPEC_DISABLE_DYNAMICBASE): New define.
	(LINK_SPEC): Use it.
	* config/i386/mingw-w64.h (LINK_SPEC_DISABLE_DYNAMICBASE): Likewise.
	(LINK_SPEC): Likewise.
2021-08-12 09:33:31 +02:00
liuhongt
95e1eca43d Combine avx_vec_concatv16si and avx512f_zero_extendv16hiv16si2_1 to avx512f_zero_extendv16hiv16si2_2.
Add define_insn_and_split to combine avx_vec_concatv16si/2 and
avx512f_zero_extendv16hiv16si2_1 since the latter already zero_extend
the upper bits, similar for other patterns which are related to
pmovzx{bw,wd,dq}.

It will do optimization like

-       vmovdqa %ymm0, %ymm0    # 7     [c=4 l=6]  avx_vec_concatv16si/2
        vpmovzxwd       %ymm0, %zmm0    # 22    [c=4 l=6]  avx512f_zero_extendv16hiv16si2
        ret             # 25    [c=0 l=1]  simple_return_internal

gcc/ChangeLog:

	PR target/101846
	* config/i386/sse.md (*avx2_zero_extendv16qiv16hi2_2): New
	post_reload define_insn_and_split.
	(*avx512bw_zero_extendv32qiv32hi2_2): Ditto.
	(*sse4_1_zero_extendv8qiv8hi2_4): Ditto.
	(*avx512f_zero_extendv16hiv16si2_2): Ditto.
	(*avx2_zero_extendv8hiv8si2_2): Ditto.
	(*sse4_1_zero_extendv4hiv4si2_4): Ditto.
	(*avx512f_zero_extendv8siv8di2_2): Ditto.
	(*avx2_zero_extendv4siv4di2_2): Ditto.
	(*sse4_1_zero_extendv2siv2di2_4): Ditto.
	(VI248_256, VI248_512, VI148_512, VI148_256, VI148_128): New
	mode iterator.

gcc/testsuite/ChangeLog:

	PR target/101846
	* gcc.target/i386/pr101846-1.c: New test.
2021-08-12 14:02:53 +08:00
Patrick Palka
21fd62e5ca c++: constexpr std::construct_at on empty field [PR101663]
Here during constexpr evaluation of

  std::construct_at(&a._M_value)

we find ourselves in cxx_eval_store_expression where the target object
is 'a._M_value' and the initializer is {}.  Since _M_value is an empty
[[no_unique_address]] member we don't create a sub-CONSTRUCTOR for it,
so we end up in the early exit code path for empty stores with mismatched
types and trip over the assert therein

  gcc_assert (is_empty_class (TREE_TYPE (init)) && !lval);

because lval is true.  The reason it's true is because the INIT_EXPR in
question is the LHS of a COMPOUND_EXPR, and evaluation of the LHS is
always performed with lval=true (to indicate there's no lvalue-to-rvalue
conversion).

This patch makes the code path in question handle the lval=true case
appropriately rather than asserting.  In passing, it also consolidates
the duplicate implementations of std::construct_at/destroy_at in some
of the C++20 constexpr tests into a common header file.

	PR c++/101663

gcc/cp/ChangeLog:

	* constexpr.c (cxx_eval_store_expression): Handle the lval=true
	case in the early exit code path for empty stores with mismatched
	types.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/construct_at.h: New convenience header file that
	defines minimal implementations of std::construct_at/destroy_at,
	split out from ...
	* g++.dg/cpp2a/constexpr-new5.C: ... here.
	* g++.dg/cpp2a/constexpr-new6.C: Use the header.
	* g++.dg/cpp2a/constexpr-new14.C: Likewise.
	* g++.dg/cpp2a/constexpr-new20.C: New test.
2021-08-11 20:59:53 -04:00
GCC Administrator
58f8750342 Daily bump. 2021-08-12 00:16:28 +00:00
Jonathan Wakely
93f1dbc7cd libstdc++: Fix test that fails randomly [PR101866]
This test assumes that the same sequence of three values cannot occur,
which is incorect. It's unlikely, but not impossible.

Perform the check in a loop, so that in the unlikely event of an
identical sequence, we retry. If the library code is buggy it will keep
producing the same sequence and the test will time out. If the code is
working correctly then we will usually break out of the loop after one
iteration, or very rarely after two or three.

libstdc++-v3/ChangeLog:

	PR libstdc++/101866
	* testsuite/experimental/random/randint.cc: Loop and retry if
	reseed() produces the same sequence.
2021-08-11 23:39:34 +01:00
Bill Schmidt
873273449a rs6000: Add available-everywhere and ancient builtins
2021-08-11  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
	* config/rs6000/rs6000-builtin-new.def: Add always, power5, and
	power6 stanzas.
2021-08-11 16:34:33 -05:00
Bill Schmidt
ba6aa47470 rs6000: Add VSX builtins
2021-08-11  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
	* config/rs6000/rs6000-builtin-new.def: Add vsx stanza.
2021-08-11 16:34:23 -05:00
Bill Schmidt
6cc92e946e rs6000: Add the rest of the [altivec] stanza to the builtins file
2021-06-10  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
	* config/rs6000/rs6000-builtin-new.def: Finish altivec stanza.
	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Move
	initialization of pcvoid_type_node here...
	(altivec_init_builtins): ...from here.
	* config/rs6000/rs6000.h (rs6000_builtin_type_index): Add
	RS6000_BTI_const_ptr_void.
	(pcvoid_type_node): New macro.
2021-08-11 16:34:15 -05:00
Patrick Palka
9707d2e5db c++: parameterized requires-expr as default argument [PR101725]
Here we're rejecting the default template argument

  requires (T t) { x(t); }

because we consider the 't' in the requirement to be a local variable
(according to local_variable_p), and we generally forbid local variables
from appearing inside default arguments.  We can perhaps fix this by
giving special treatment to parameters introduced by requires-expressions,
but DR 2082 relaxed the restriction about local variables appearing within
default arguments to permit them inside unevaluated operands thereof.
So this patch just implements DR 2082 which also fixes this PR since a
requires-expression is an unevaluated context.

	PR c++/101725
	DR 2082

gcc/cp/ChangeLog:

	* cp-tree.h (unevaluated_p): Return true for REQUIRES_EXPR.
	* decl.c (local_variable_p_walkfn): Don't walk into unevaluated
	operands.
	* parser.c (cp_parser_primary_expression) <case CPP_NAME>: Never
	reject uses of local variables in unevaluated contexts.
	* tree.c (cp_walk_subtrees) <case REQUIRES_EXPR>: Increment
	cp_unevaluated_operand.  Use cp_walk_tree directly instead of
	WALK_SUBTREE to avoid the goto.  Use REQUIRES_EXPR_REQS instead
	of TREE_OPERAND directly.

gcc/testsuite/ChangeLog:

	* g++.dg/DRs/dr2082.C: New test.
	* g++.dg/cpp2a/concepts-uneval4.C: New test.
2021-08-11 16:53:53 -04:00
Jakub Jelinek
ee8f9ff00d c++: Optimize constinit thread_local vars [PR101786]
The paper that introduced constinit mentioned in rationale that constinit
can be used on externs as well and that it can be used to avoid the
thread_local initialization wrappers, because the standard requires that
if constinit is present on any declaration, it is also present on the
initialization declaration, even if it is in some other TU etc.

There is a small problem though, we use the tls wrappers not just if
the thread_local variable needs dynamic initialization, but also when
it has static initialization, but non-trivial destructor, as the
"dynamic initialization" in that case needs to register the destructor.

So, the following patch optimizes constinit thread_local vars only
if we can prove they will not have non-trivial destructors.  That includes
the case where we have incomplete type where we don't know and need to
conservatively assume the type will have non-trivial destructor at the
initializing declaration side.

2021-08-11  Jakub Jelinek  <jakub@redhat.com>

	PR c++/101786
	* decl2.c (var_defined_without_dynamic_init): Return true for
	DECL_DECLARED_CONSTINIT_P with complete type and trivial destructor.

	* g++.dg/cpp2a/constinit16.C: New test.
2021-08-11 22:00:29 +02:00
Patrick Palka
7e39d1a15f c++: recognize class-scope non-template dguides [PR79501]
It looks like we still don't recognize class-scope non-template
deduction guides even after r12-2260.   This is because deduction guides
are tagged as such in cp_parser_init_declarator after calling
cp_parser_declarator, but in cp_parser_member_declaration we call
cp_parser_declarator directly.

So let's tag them in cp_parser_member_declaration as well.

	PR c++/79501

gcc/cp/ChangeLog:

	* parser.c (maybe_adjust_declarator_for_dguide): New, split
	out from ...
	(cp_parser_init_declarator): ... here.
	(cp_parser_member_declaration): Use it.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/class-deduction98.C: New test.
2021-08-11 15:59:22 -04:00
Patrick Palka
6186708312 c++: most vexing parse and braced CTAD [PR89062]
Here grokdeclarator is emitting the error

  error: class template placeholder ‘Foo’ not permitted in this context

during the tentative (and ultimately futile) parse of 'x' as a function
declaration.  This happens because when parsing 'Foo{1}',
cp_parser_parameter_declaration yields a parameter declaration with no
declarator and whose type is a CTAD placeholder, and stops short of
consuming the '{'.  The caller cp_parser_parameter_declaration_list then
calls grokdeclarator on this declarator, hence the error, and soon
thereafter we abort this tentative parse since the next token '{'
doesn't make sense in the context of a parameter list.

Note that we don't have this issue with parenthesized CTAD

  Foo<int> x(Foo(1));

because in this case cp_parser_direct_declarator (called indirectly from
c_p_p_d) consumes the '(' and returns cp_error_declarator instead of a
NULL declarator (and also simulates a parse error), and grokdeclarator
exits early for this declarator without emitting any error.

Since grokdeclarator doesn't take a 'complain' parameter, to fix this we
need to avoid calling grokdeclarator in this situation.  To that end
this patch makes c_p_p_d simulate an error when a construct is a CTAD
expression and definitely not a parameter declaration, so that c_p_p_d_l
can avoid calling grokdeclarator by checking for this simulated error.
Alternatively we could keep all this logic inside c_p_p_d_l and not
touch c_p_p_d at all, but this approach seems slightly less adhoc.

	PR c++/89062

gcc/cp/ChangeLog:

	* parser.c (cp_parser_parameter_declaration_list): Don't call
	grokdeclarator if cp_parser_error_occurred.
	(cp_parser_parameter_declaration): Simulate an error if we see
	the beginning of a CTAD form, i.e. if we see an opening brace
	after the decl-specifier-seq and the type is a CTAD placeholder.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/class-deduction97.C: New test.
2021-08-11 15:58:30 -04:00
Jonathan Wakely
4fa6c0ec35 libstdc++: Define std::is_pointer_interconvertible_base_of for C++20
Implement these traits using the new built-ins that Jakub added
recently.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* include/std/type_traits (__cpp_lib_is_pointer_interconvertible)
	(is_pointer_interconvertible_base_of_v)
	(is_pointer_interconvertible_base_of): Define for C++20.
	* include/std/version (__cpp_lib_is_pointer_interconvertible):
	Define.
	* testsuite/23_containers/span/layout_compat.cc: Use correct
	feature test macro for std::is_layout_compatible_v.
	* testsuite/20_util/is_pointer_interconvertible/value.cc: New test.
	* testsuite/20_util/is_pointer_interconvertible/version.cc: New test.
2021-08-11 16:53:22 +01:00
Jonathan Wakely
04ddd108d1 libstdc++: Fix missing descriptions in ChangeLog entries 2021-08-11 16:53:22 +01:00
Sandra Loosemore
58340a7cd3 Fortran: Fix c_float128 and c_float128_complex definitions.
gfc_float128_type_node is only non-NULL on targets that support a
128-bit type that is not long double.  Use float128_type_node instead
when computing the value of the kind constants c_float128 and
c_float128_complex from the ISO_C_BINDING intrinsic module; this also
ensures it actually corresponds to __float128 (the IEEE encoding) and
not some other 128-bit floating-point type.

2021-08-11  Sandra Loosemore  <sandra@codesourcery.com>

gcc/fortran/
	* iso-c-binding.def (c_float128, c_float128_complex): Check
	float128_type_node instead of gfc_float128_type_node.
	* trans-types.c (gfc_init_kinds, gfc_build_real_type):
	Update comments re supported 128-bit floating-point types.
2021-08-11 07:36:55 -07:00
Richard Biener
cba64d855d Fix gcc.dg/lto/pr48622_0.c testcase
This fixes the testcase to not rely on the reference to
ashift_qi_1 being optimized out by RTL optimization via
help of the initregs pass that changes comparisons of
uninitialized data with a comparison that is always false.

2021-08-11  Richard Biener  <rguenther@suse.de>

	* gcc.dg/lto/pr48622_1.c: Provide non-LTO definition
	of ashift_qi_1.
2021-08-11 16:30:36 +02:00
Richard Biener
2cb02e065f target/101788 - avoid decomposing hard-register "loads"
This avoids decomposing hard-register accesses that masquerade as
loads.

2021-08-11  Richard Biener  <rguenther@suse.de>

	PR target/101877
	* tree-ssa-forwprop.c (pass_forwprop::execute): Do not decompose
	hard-register accesses.
2021-08-11 16:24:08 +02:00
Richard Biener
e8426554e1 Adjust volatile handling of the operand scanner
The GIMPLE SSA operand scanner handles COMPONENT_REFs that are
not marked TREE_THIS_VOLATILE but have a TREE_THIS_VOLATILE
FIELD_DECL as volatile.  That's inconsistent in how TREE_THIS_VOLATILE
testing on GENERIC refs works which requires operand zero of
component references to mirror TREE_THIS_VOLATILE to the ref
so that testing TREE_THIS_VOLATILE on the outermost reference
is enough to determine the volatileness.

The following patch thus removes FIELD_DECL scanning from
the GIMPLE SSA operand scanner, possibly leaving fewer stmts
marked as gimple_has_volatile_ops.

It shows we miss at least one case in the fortran frontend, though
there's a suspicious amount of COMPONENT_REF creation compared
to little setting of TREE_THIS_VOLATILE.  This fixes the FAIL
of gfortran.dg/volatile11.f90 that would otherwise occur.

Visually inspecting fortran/ reveals a bunch of likely to fix
cases but I don't know the constraints of 'volatile' uses in
the fortran language to assess whether some of these are not
necessary.

2021-08-09  Richard Biener  <rguenther@suse.de>

gcc/
	* tree-ssa-operands.c (operands_scanner::get_expr_operands):
	Do not look at COMPONENT_REF FIELD_DECLs TREE_THIS_VOLATILE
	to determine has_volatile_ops.

gcc/fortran/
	* trans-common.c (create_common): Set TREE_THIS_VOLATILE on the
	COMPONENT_REF if the field is volatile.
2021-08-11 16:24:08 +02:00
Eric Botcazou
cecdff844a Small tweak to expand_used_vars
This completes the replacement of DECL_ATTRIBUTES (current_function_decl)
with the attribs local variable.

gcc/
	* cfgexpand.c (expand_used_vars): Reuse attribs local variable.
2021-08-11 15:34:15 +02:00
Jan Hubicka
9851a1631f Fix min_flags handling in mod-ref
gcc/ChangeLog:

2021-08-11  Jan Hubicka  <hubicka@ucw.cz>
	    Alexandre Oliva  <oliva@adacore.com>

	* ipa-modref.c (modref_lattice::dump): Fix escape_point's min_flags
	dumping.
	(modref_lattice::merge_deref): Fix handling of indirect scape points.
	(update_escape_summary_1): Likewise.
	(update_escape_summary): Likewise.
	(ipa_merge_modref_summary_after_inlining): Likewise.

gcc/testsuite/ChangeLog:

	* c-c++-common/modref-dse.c: New test.
2021-08-11 15:01:39 +02:00
Richard Biener
d7e91f4894 middle-end/101858 - avoid shift of pointer in folding
This makes sure to not generate a shift of pointer types in
simplification of X < (cast) (1 << Y).

2021-08-11  Richard Biener  <rguenther@suse.de>

	PR middle-end/101858
	* fold-const.c (fold_binary_loc): Guard simplification
	of  X < (cast) (1 << Y) to integer types.

	* gcc.dg/pr101858.c: New testcase.
2021-08-11 12:55:24 +02:00
Richard Biener
f19c70afa4 tree-optimization/101861 - fix gather use for non-gather refs
My previous change broke the usage of gather for strided loads.
The following fixes it.

2021-08-11  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/101861
	* tree-vect-stmts.c (vectorizable_load): Fix error in
	previous change with regard to gather vectorization.
2021-08-11 12:55:24 +02:00
prathamesh.kulkarni
b8f604da25 arm/66791: Replace builtins for vdup_n and vmov_n intrinsics.
gcc/ChangeLog:

	PR target/66791
	* config/arm/arm_neon.h (vdup_n_s8): Replace call to builtin
	with constructor.
	(vdup_n_s16): Likewise.
	(vdup_n_s32): Likewise.
	(vdup_n_s64): Likewise.
	(vdup_n_u8): Likewise.
	(vdup_n_u16): Likewise.
	(vdup_n_u32): Likewise.
	(vdup_n_u64): Likewise.
	(vdup_n_p8): Likewise.
	(vdup_n_p16): Likewise.
	(vdup_n_p64): Likewise.
	(vdup_n_f16): Likewise.
	(vdup_n_f32): Likewise.
	(vdupq_n_s8): Likewise.
	(vdupq_n_s16): Likewise.
	(vdupq_n_s32): Likewise.
	(vdupq_n_s64): Likewise.
	(vdupq_n_u8): Likewise.
	(vdupq_n_u16): Likewise.
	(vdupq_n_u32): Likewise.
	(vdupq_n_u64): Likewise.
	(vdupq_n_p8): Likewise.
	(vdupq_n_p16): Likewise.
	(vdupq_n_p64): Likewise.
	(vdupq_n_f16): Likewise.
	(vdupq_n_f32): Likewise.
	(vmov_n_s8): Replace call to builtin with call to corresponding
	vdup_n intrinsic.
	(vmov_n_s16): Likewise.
	(vmov_n_s32): Likewise.
	(vmov_n_s64): Likewise.
	(vmov_n_u8): Likewise.
	(vmov_n_u16): Likewise.
	(vmov_n_u32): Likewise.
	(vmov_n_u64): Likewise.
	(vmov_n_p8): Likewise.
	(vmov_n_p16): Likewise.
	(vmov_n_f16): Likewise.
	(vmov_n_f32): Likewise.
	(vmovq_n_s8): Likewise.
	(vmovq_n_s16): Likewise.
	(vmovq_n_s32): Likewise.
	(vmovq_n_s64): Likewise.
	(vmovq_n_u8): Likewise.
	(vmovq_n_u16): Likewise.
	(vmovq_n_u32): Likewise.
	(vmovq_n_u64): Likewise.
	(vmovq_n_p8): Likewise.
	(vmovq_n_p16): Likewise.
	(vmovq_n_f16): Likewise.
	(vmovq_n_f32): Likewise.
	* config/arm/arm_neon_builtins.def: Remove entries for vdup_n.

gcc/testsuite/ChangeLog:

	PR target/66791
	* gcc.target/arm/pr51534.c: Adjust test.
2021-08-11 15:31:53 +05:30
Jakub Jelinek
0e6017f5b4 sanitizer: Cherry-pick realpath fix
tsan in some cases starts ignoring interceptors and only calls the
intercepted functions.  But for realpath the behavior for NULL second argument
was only handled in the interceptor and intercepted function was the one
found by dlsym which is often one that doesn't handle NULL as second argument.

Fixed by using dlvsym with "GLIBC_2.3" if possible for intercepted function
and don't emulate behavior in the wrapper.

2021-08-11  Jakub Jelinek  <jakub@redhat.com>

	* sanitizer_common/sanitizer_common_interceptors.inc: Cherry-pick
	llvm-project revision faef0d042f523357fe5590e7cb6a8391cf0351a8.
2021-08-11 10:23:34 +02:00
Bernd Edlinger
a45918f8a7 Ada: Remove debug line number for DECL_IGNORED_P functions
It was pointed out in PR101598 to be inappropriate, that
ignored Ada decls receive the source line number which was
recorded in the function decl's DECL_SOURCE_LOCATION.
Therefore set all front-end-generated Ada decls with
DECL_IGNORED_P to UNKNOWN_LOCATION.

2021-08-11  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	PR debug/101598
	* gcc-interface/trans.c (Subprogram_Body_to_gnu): Set the
	DECL_SOURCE_LOCATION of DECL_IGNORED_P gnu_subprog_decl to
	UNKNOWN_LOCATION.
2021-08-11 07:29:27 +02:00
Ian Lance Taylor
fed7c1634e compiler: don't crash on a, b := int(0)
Fixes PR go/101851

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/341330
2021-08-10 19:36:15 -07:00
liuhongt
05a03f3986 Extend ldexp{s,d}f3 to vscalefs{s,d} when TARGET_AVX512F and TARGET_SSE_MATH.
gcc/ChangeLog:

	PR target/98309
	* config/i386/i386.md (ldexp<mode>3): Extend to vscalefs[sd]
	when TARGET_AVX512F and TARGET_SSE_MATH.

gcc/testsuite/ChangeLog:

	PR target/98309
	* gcc.target/i386/pr98309-1.c: New test.
	* gcc.target/i386/pr98309-2.c: New test.
2021-08-11 10:18:42 +08:00
Hans-Peter Nilsson
92f7016940 gcc.dg/uninit-pred-9_b.c: Xfail for CRIS too
Adding to the growing list, for autotester accounting purposes.

FWIW I see this fails for m68k too:
https://gcc.gnu.org/pipermail/gcc-testresults/2021-August/712395.html
and moxie:
https://gcc.gnu.org/pipermail/gcc-testresults/2021-August/712389.html
and pru:
https://gcc.gnu.org/pipermail/gcc-testresults/2021-August/712366.html

testsuite:
	PR middle-end/101674
	* gcc.dg/uninit-pred-9_b.c: Xfail for cris-*-* too.
2021-08-11 02:36:34 +02:00
GCC Administrator
3ae564ea74 Daily bump. 2021-08-11 00:16:27 +00:00
Jakub Jelinek
d796cc7a3e openmp: Fix up cp/parser.c build with GCC 4.8 to 6
Christophe Lyon reported that cp/parser.c no longer compiles with
GCC 4.8.5 after my recent OpenMP changes.
A goto out; there crosses odsd variable declaration, and odsd has
a vec<...> member where vec has = default; default constructor
and gcc before r7-2822-gd0b0fbd9fce2f30a82558bf2308b3a7b56c2f364
treated that as error.

Fixed by moving the declaration earlier before the goto.

Tested on x86_64-linux with GCC 4.8.5 system gcc, committed to trunk
as obvious.

2021-08-10  Jakub Jelinek  <jakub@redhat.com>

	* parser.c (cp_parser_member_declaration): Move odsd declaration
	before cp_parser_using_declaration call to avoid errors with
	GCC 4.8 to 6.
2021-08-10 18:06:07 +02:00
Martin Liska
84f906df4f mklog: support '-b c/101343' format.
contrib/ChangeLog:

	* mklog.py: Support additional PRs without PR prefix.
2021-08-10 17:53:48 +02:00
Tobias Burnus
2ba0376ac4 gfortran: Fix in-build-tree testing [PR101305, PR101660]
ISO_Fortran_binding.h is written in the build dir - hence, a previous commit
added it as include directory for in-build-tree testing.  However,
it turned out that -I$specdir/libgfortran interferes with reading .mod files
as they are then no longer regareded as intrinsic modules.  Solution: Create
an extra include/ directory in the libgfortran build dir and copy
ISO_Fortran_binding.h to that directory.  As -B$specdir/libgfortran already
causes gfortran to read that include subdirectory, the -I flag is no longer
needed.

	PR libfortran/101305
	PR fortran/101660
	PR testsuite/101847

libgfortran/ChangeLog:

	* Makefile.am (ISO_Fortran_binding.h): Create include/ in the build dir
	and copy the include file to it.
	(clean-local): Add for removing the 'include' directory.
	* Makefile.in: Regenerate.

gcc/testsuite/ChangeLog:

	* lib/gfortran.exp (gfortran_init): Remove -I$specpath/libgfortran
	from the string used to set GFORTRAN_UNDER_TEST.
2021-08-10 17:26:32 +02:00
H.J. Lu
557d06f8b3 Enable gcc.target/i386/pr88531-1a.c for all targets
PR tree-optimization/101809
	* gcc.target/i386/pr88531-1a.c: Enable for all targets.
2021-08-10 05:30:44 -07:00
Jakub Jelinek
50b5877925 i386: Allow some V32HImode and V64QImode permutations even without AVX512BW [PR80355]
When working on the PR, I've noticed we generate terrible code for
V32HImode or V64QImode permutations for -mavx512f -mno-avx512bw.
Generally we can't do much with such permutations, but since PR68655
we can handle at least some, those expressible using V16SImode or V8DImode
permutations, but that wasn't reachable, because ix86_vectorize_vec_perm_const
didn't even try, it said without TARGET_AVX512BW it can't do anything, and
with it can do everything, no d.testing_p attempts.

This patch makes it try it for TARGET_AVX512F && !TARGET_AVX512BW.

The first hunk is to avoid ICE, expand_vec_perm_even_odd_1 asserts d->vmode
isn't V32HImode because expand_vec_perm_1 for AVX512BW handles already
all permutations, but when we let it through without !TARGET_AVX512BW,
expand_vec_perm_1 doesn't handle it.

If we want, that hunk can be dropped if we implement in
expand_vec_perm_even_odd_1 and its helper the even permutation as
vpmovdw + vpmovdw + vinserti64x4 and odd permutation as
vpsrld $16 + vpsrld $16 + vpmovdw + vpmovdw + vinserti64x4.

2021-08-10  Jakub Jelinek  <jakub@redhat.com>

	PR target/80355
	* config/i386/i386-expand.c (expand_vec_perm_even_odd): Return false
	for V32HImode if !TARGET_AVX512BW.
	(ix86_vectorize_vec_perm_const) <case E_V32HImode, case E_V64QImode>:
	If !TARGET_AVX512BW and TARGET_AVX512F and d.testing_p, don't fail
	early, but actually check the permutation.

	* gcc.target/i386/avx512f-pr80355-2.c: New test.
2021-08-10 12:38:00 +02:00
Richard Biener
08aa0e3d4f tree-optimization/101809 - support emulated gather for double[int]
This adds emulated gather support for index vectors with more
elements than the data vector.  The internal function gather
vectorization code doesn't currently handle this (but the builtin
decl code does).  This allows vectorization of double data gather
with int indexes on 32bit platforms where there isn't an implicit
widening to 64bit present.

2021-08-10  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/101809
	* tree-vect-stmts.c (get_load_store_type): Allow emulated
	gathers with offset vector nunits being a constant multiple
	of the data vector nunits.
	(vect_get_gather_scatter_ops): Use the appropriate nunits
	for the offset vector defs.
	(vectorizable_store): Adjust call to
	vect_get_gather_scatter_ops.
	(vectorizable_load): Likewise.  Handle the case of less
	offset vectors than data vectors.
2021-08-10 12:25:19 +02:00
Jakub Jelinek
7665af0b1a i386: Improve single operand AVX512F permutations [PR80355]
On the following testcase we emit
	vmovdqa32	.LC0(%rip), %zmm1
	vpermd	%zmm0, %zmm1, %zmm0
and
	vmovdqa64	.LC1(%rip), %zmm1
	vpermq	%zmm0, %zmm1, %zmm0
instead of
	vshufi32x4	$78, %zmm0, %zmm0, %zmm0
and
	vshufi64x2	$78, %zmm0, %zmm0, %zmm0
we can emit with the patch.  We have patterns that match two argument
permutations for vshuf[if]*, but for one argument it doesn't trigger.
Either we can add two patterns for that, or we would need to add another
routine to i386-expand.c that would transform under certain condition
these cases to the two argument vshuf*, doing it in sse.md looked simpler.
We don't need this for 32-byte vectors, we already emit single insn
permutation that doesn't need memory op there.

2021-08-10  Jakub Jelinek  <jakub@redhat.com>

	PR target/80355
	* config/i386/sse.md (*avx512f_shuf_<shuffletype>64x2_1<mask_name>_1,
	*avx512f_shuf_<shuffletype>32x4_1<mask_name>_1): New define_insn
	patterns.

	* gcc.target/i386/avx512f-pr80355-1.c: New test.
2021-08-10 11:34:53 +02:00
Jakub Jelinek
c40c6a50fd openmp: Add support for declare simd and declare variant in a attribute syntax
This patch adds support for declare simd and declare variant in attribute
syntax.  Either in attribute-specifier-seq at the start of declaration, in
that case it has similar restriction to pragma-syntax, that there is a single
function declaration/definition in the declaration, rather than variable
declaration or more than one function declarations or mix of function and
variable declarations.  Or after the declarator id, in that case it applies
just to the single function declaration and the same declaration can have
multiple such attributes.  Or both.

Furthermore, cp_parser_statement has been adjusted so that it doesn't
accept [[omp::directive (parallel)]] etc. before statements that don't
take attributes at all, or where those attributes don't appertain to
the statement but something else (e.g. to label, using directive,
declaration, etc.).

2021-08-10  Jakub Jelinek  <jakub@redhat.com>

gcc/cp/
	* parser.h (struct cp_omp_declare_simd_data): Remove
	in_omp_attribute_pragma and clauses members, add loc and attribs.
	(struct cp_oacc_routine_data): Remove loc member, add clauses
	member.
	* parser.c (cp_finalize_omp_declare_simd): New function.
	(cp_parser_handle_statement_omp_attributes): Mention in
	function comment the function is used also for
	attribute-declaration.
	(cp_parser_handle_directive_omp_attributes): New function.
	(cp_parser_statement): Don't call
	cp_parser_handle_statement_omp_attributes if statement doesn't
	have attribute-specifier-seq at the beginning at all or if
	if those attributes don't appertain to the statement.
	(cp_parser_simple_declaration): Call
	cp_parser_handle_directive_omp_attributes and
	cp_finalize_omp_declare_simd.
	(cp_parser_explicit_instantiation): Likewise.
	(cp_parser_init_declarator): Initialize prefix_attributes
	only after parsing declarators.
	(cp_parser_direct_declarator): Call
	cp_parser_handle_directive_omp_attributes and
	cp_finalize_omp_declare_simd.
	(cp_parser_member_declaration): Likewise.
	(cp_parser_single_declaration): Likewise.
	(cp_parser_omp_declare_simd): Don't initialize
	data.in_omp_attribute_pragma, instead initialize
	data.attribs[0] and data.attribs[1].
	(cp_finish_omp_declare_variant): Remove
	in_omp_attribute_pragma argument, instead use
	parser->lexer->in_omp_attribute_pragma.
	(cp_parser_late_parsing_omp_declare_simd): Adjust
	cp_finish_omp_declare_variant caller.  Handle attribute-syntax
	declare simd/variant.
gcc/testsuite/
	* g++.dg/gomp/attrs-1.C (bar): Add missing semicolon after
	[[omp::directive (threadprivate (t2))]].  Add tests with
	if/while/switch after parallel in attribute syntax.
	(corge): Add missing omp:: before directive.
	* g++.dg/gomp/attrs-2.C (bar): Add missing semicolon after
	[[omp::directive (threadprivate (t2))]].
	* g++.dg/gomp/attrs-10.C: New test.
	* g++.dg/gomp/attrs-11.C: New test.
2021-08-10 11:22:33 +02:00
Hongyu Wang
c318f8e42b i386: Fix typos in amxbf16 runtime test.
gcc/testsuite/ChangeLog:

	* gcc.target/i386/amxbf16-dpbf16ps-2.c: Fix typos.
2021-08-10 16:20:20 +08:00
Richard Biener
19d1a529fa tree-optimization/101801 - rework generic vector vectorization more
This builds ontop of the vect_worthwhile_without_simd_p refactoring
done earlier.  It was wrong in dropping the appearant double checks
for operation support since the optab check can happen with an
integer vector emulation mode and thus succeed but vector lowering
might not actually support the operation on word_mode.

The following patch adds a vect_emulated_vector_p helper and
re-instantiates the check where it was previously.  It also adds
appropriate costing of the scalar stmts emitted by vector lowering
to vectorizable_operation which should be the only place such
operations are synthesized.  I've also cared for the case where
the vector mode is supported but the operation is not (though
I think this will be unlikely given we're talking about plus, minus
and negate).

This fixes the observed FAIL of gcc.dg/tree-ssa/gen-vect-11b.c
with -m32 where we end up vectorizing a multiplication that ends up
being teared down to scalars again by vector lowering.

I'm not super happy about all the other places where we're now
and previously feeding scalar modes to optab checks where we
want to know whether we can vectorize sth but well.

2021-09-08  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/101801
	PR tree-optimization/101819
	* tree-vectorizer.h (vect_emulated_vector_p): Declare.
	* tree-vect-loop.c (vect_emulated_vector_p): New function.
	(vectorizable_reduction): Re-instantiate a check for emulated
	operations.
	* tree-vect-stmts.c (vectorizable_shift): Likewise.
	(vectorizable_operation): Likewise.  Cost emulated vector
	operations according to the scalar sequence synthesized by
	vector lowering.
2021-08-10 10:12:39 +02:00
Richard Biener
bb169406cd middle-end/101824 - properly handle volatiles in nested fn lowering
When we build the COMPONENT_REF of a formerly volatile local off
the FRAME decl we have to make sure to mark the COMPONENT_REF
as TREE_THIS_VOLATILE.  While the GIMPLE operand scanner looks
at the FIELD_DECL this is not how volatile GENERIC refs work.

2021-08-09  Richard Biener  <rguenther@suse.de>

	PR middle-end/101824
	* tree-nested.c (get_frame_field): Mark the COMPONENT_REF as
	volatile in case the variable was.

	* gcc.dg/tree-ssa/pr101824.c: New testcase.
2021-08-10 09:27:49 +02:00
Martin Uecker
0631faf87a Evaluate arguments of sizeof that are structs of variable size.
Evaluate arguments of sizeof for all types of variable size
and not just for VLAs. This fixes some issues related to
[PR29970] where statement expressions need to be evaluated
so that the size is well defined.

2021-08-10  Martin Uecker  <muecker@gwdg.de>

gcc/c/
	PR c/29970
	* c-typeck.c (c_expr_sizeof_expr): Evaluate
	size expressions for structs of variable size.

gcc/testsuite/
	PR c/29970
	* gcc.dg/vla-stexp-1.c: New test.
2021-08-10 07:49:57 +02:00
H.J. Lu
3d7ccbc1ef x86: Optimize load of const FP all bits set vectors
Check float_vector_all_ones_operand for vector floating-point modes to
optimize load of const floating-point all bits set vectors.

gcc/

	PR target/101804
	* config/i386/constraints.md (BC): Document for integer SSE
	constant all bits set operand.
	(BF): New constraint for const floating-point all bits set
	vectors.
	* config/i386/i386.c (standard_sse_constant_p): Likewise.
	(standard_sse_constant_opcode): Likewise.
	* config/i386/sse.md (sseconstm1): New mode attribute.
	(mov<mode>_internal): Replace BC with <sseconstm1>.

gcc/testsuite/

	PR target/101804
	* gcc.target/i386/avx2-gather-2.c: Pass -march=skylake instead
	of "-mavx2 -mtune=skylake".  Scan vpcmpeqd.
2021-08-09 21:41:35 -07:00
liuhongt
813ccbe9d2 Support cond_ashr/lshr/ashl for vector integer modes under AVX512.
gcc/ChangeLog:

	* config/i386/sse.md (cond_<insn><mode>): New expander.
	(VI248_AVX512VLBW): New mode iterator.
	* config/i386/predicates.md
	(nonimmediate_or_const_vec_dup_operand): New predicate.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/cond_op_shift_d-1.c: New test.
	* gcc.target/i386/cond_op_shift_d-2.c: New test.
	* gcc.target/i386/cond_op_shift_q-1.c: New test.
	* gcc.target/i386/cond_op_shift_q-2.c: New test.
	* gcc.target/i386/cond_op_shift_ud-1.c: New test.
	* gcc.target/i386/cond_op_shift_ud-2.c: New test.
	* gcc.target/i386/cond_op_shift_uq-1.c: New test.
	* gcc.target/i386/cond_op_shift_uq-2.c: New test.
	* gcc.target/i386/cond_op_shift_uw-1.c: New test.
	* gcc.target/i386/cond_op_shift_uw-2.c: New test.
	* gcc.target/i386/cond_op_shift_w-1.c: New test.
	* gcc.target/i386/cond_op_shift_w-2.c: New test.
2021-08-10 09:26:21 +08:00
GCC Administrator
377681505f Daily bump. 2021-08-10 00:16:28 +00:00
Andrew MacLeod
c86c95edd1 Ensure toupper and tolower follow the expected pattern.
If the parameter is not compatible with the LHS, assume this is not really a
builtin function to avoid a trap.

	gcc/
	PR tree-optimization/101741
	* gimple-range-fold.cc (fold_using_range::range_of_builtin_call): Check
	type of parameter for toupper/tolower.

	gcc/testsuite/
	* gcc.dg/pr101741.c: New.
2021-08-09 16:24:05 -04:00
Jonathan Wakely
f5a2d78072 libstdc++: Reduce use of debug containers in <regex>
The std::regex code uses std::map and std::vector, which means that when
_GLIBCXX_DEBUG is defined it uses the debug versions of those
containers. That no longer compiles, because I changed <regex> to
include <bits/stl_map.h> and <bits/stl_vector.h> instead of <map> and
<vector>, so the debug versions aren't defined, and std::map doesn't
compile. There is also a use of std::stack, which defaults to std::deque
which is the debug deque when _GLIBCXX_DEBUG is defined.

Using std::map, std::vector, and std::deque is probably a mistake, and
we should qualify them with _GLIBCXX_STD_C instead so that the debug
versions aren't used. We do not need the overhead of checking our own
uses of those containers, which should be correct anyway. The exception
is the vector base class of std::match_results, which exposes iterators
to users, so can benefit from debug mode checks for its iterators. For
other accesses to the vector elements, match_results already does its
own checks, so can access the _GLIBCXX_STD_C::vector base class
directly.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* include/bits/regex.h (basic_regex::transform_primary): Use
	_GLIBCXX_STD_C::vector for local variable.
	* include/bits/regex.tcc (__regex_algo_impl): Use reference to
	_GLIBCXX_STD_C::vector base class of match_results.
	* include/bits/regex_automaton.tcc (_StateSeq:_M_clone): Use
	_GLIBCXX_STD_C::map and _GLIBCXX_STD_C::deque for local
	variables.
	* include/bits/regex_compiler.h (_BracketMatcher): Use
	_GLIBCXX_STD_C::vector for data members.
	* include/bits/regex_executor.h (_Executor): Likewise.
	* include/std/regex [_GLIBCXX_DEBUG]: Include <debug/vector>.
2021-08-09 20:46:56 +01:00