192877 Commits

Author SHA1 Message Date
Marcel Vollweiler
4043f53cb4 OpenMP, libgomp: Add new runtime routine omp_target_is_accessible.
gcc/ChangeLog:

	* omp-low.cc (omp_runtime_api_call): Added target_is_accessible to
	omp_runtime_apis array.

libgomp/ChangeLog:

	* libgomp.map: Added omp_target_is_accessible.
	* libgomp.texi: Tagged omp_target_is_accessible as supported.
	* omp.h.in: Added omp_target_is_accessible.
	* omp_lib.f90.in: Added interface for omp_target_is_accessible.
	* omp_lib.h.in: Likewise.
	* target.c (omp_target_is_accessible): Added implementation of
	omp_target_is_accessible.
	* testsuite/libgomp.c-c++-common/target-is-accessible-1.c: New test.
	* testsuite/libgomp.fortran/target-is-accessible-1.f90: New test.
2022-05-06 07:28:26 -07:00
Jonathan Wakely
aa8bdfee1d libstdc++: Fix test that fails on Solaris [PR104731]
On Solaris the dirent::d_name member is a single char, causing this test
to fail with warnings about buffer overflow. Change the test to use a
union with additional space for writing a string to the d_name member.

libstdc++-v3/ChangeLog:

	PR libstdc++/104731
	* testsuite/27_io/filesystem/iterators/error_reporting.cc:
	Use a trailing char array as storage for dirent::d_name.
2022-05-06 14:51:35 +01:00
Jonathan Wakely
e112e37f29 libstdc++: Do not include <cxxabi.h> in <stacktrace>
This avoids polluting the global namespace with the "abi" namespace
alias.

libstdc++-v3/ChangeLog:

	* include/std/stacktrace: Do not include <cxxabi.h>.
	(__cxa_demangle): Declare.
2022-05-06 14:43:39 +01:00
Jonathan Wakely
488d268728 libstdc++: Do not use #include inside push visibility scope [PR99871]
libstdc++-v3/ChangeLog:

	PR libstdc++/99871
	* include/bits/specfun.h: Use visibility attribute on namespace,
	instead of pragma push/pop.
	* libsupc++/compare: Likewise.
	* libsupc++/exception: Likewise.
	* libsupc++/exception.h: Likewise.
	* libsupc++/exception_ptr.h: Likewise.
	* libsupc++/initializer_list: Likewise.
	* libsupc++/nested_exception.h: Likewise.
2022-05-06 14:43:39 +01:00
Jonathan Wakely
e03a0a4d73 libstdc++: Update documentation about copyright and GPL notices in tests
There is no need to require FSF copyright for tests that are just
"self-evident" ways to check the API and behaviour of the library.
This is consistent with tests for the compiler, which do not have
copyright and licence notices either.

libstdc++-v3/ChangeLog:

	* doc/xml/manual/test.xml: Remove requirement for copyright and
	GPL notice in tests.
	* doc/html/manual/test.html: Regenerate.
2022-05-06 14:43:38 +01:00
Hafiz Abid Qadeer
1a8c4d9ed3 Add a restriction on allocate clause (OpenMP 5.0)
An allocate clause in target region must specify an allocator
unless the compilation unit has requires construct with
dynamic_allocators clause.  Current implementation of the allocate
clause did not check for this restriction. This patch fills that
gap.

gcc/ChangeLog:

	* omp-low.cc (omp_maybe_offloaded_ctx): New prototype.
	(scan_sharing_clauses):  Check a restriction on allocate clause.

gcc/testsuite/ChangeLog:

	* c-c++-common/gomp/allocate-2.c: Add tests.
	* c-c++-common/gomp/allocate-8.c: New test.
	* gfortran.dg/gomp/allocate-3.f90: Add tests.
	* gcc.dg/gomp/pr104517.c: Update.
2022-05-06 10:45:05 +01:00
Jakub Jelinek
8025f29fbd Update gennews for GCC 12.
2022-05-06  Jakub Jelinek  <jakub@redhat.com>

	* gennews (files): Add files for GCC 12.
2022-05-06 08:44:43 +02:00
GCC Administrator
ab869e7f75 Daily bump. 2022-05-06 00:16:26 +00:00
Sandra Loosemore
2d8752c592 libgomp: Update docs to reflect Fortran support for non-rectangular loops
libgomp/
	* libgomp.texi (OpenMP 5.0): Feature is now fully supported.
2022-05-05 14:48:57 -07:00
Marek Polacek
ee91281896 c++: wrong error with MVP and pushdecl [PR64679]
This patch fixes the second half of 64679.  Here we issue a wrong
"redefinition of 'int x'" for the following:

  struct Bar {
    Bar(int, int, int);
  };

  int x = 1;
  Bar bar(int(x), int(x), int{x}); // #1

cp_parser_parameter_declaration_list does pushdecl every time it sees
a named parameter, so the second "int(x)" causes the error.  That's
premature, since this turns out to be a constructor call after the
third argument!

If the first parameter is parenthesized, we can't push until we've
established we're looking at a function declaration.  Therefore this
could be fixed by some kind of lookahead.  I thought about introducing a
lightweight variant of cp_parser_parameter_declaration_list that would
not have any side effects and would return as soon as it figures out
whether it's looking at a declaration or expression.  Since that would
require fairly nontrivial changes, I wanted something simpler.

Something like delaying the pushdecl until we've reached the ')'
following the parameter-declaration-clause.  But we must push the
parameters before processing a default argument, as in:

  Bar bar(int(a), int(b), int c = sizeof(a));  // valid

Moreover, this code should still be accepted

  Bar f(int(i), decltype(i) j = 42);

so this patch stashes parameters into a vector when parsing tentatively
only when pushdecl-ing a parameter would result in a clash and an error
about redefinition/redeclaration.  The stashed parameters are pushed at
the end of a parameter-declaration-clause if it's followed by a ')', so
that we still diagnose redefining a parameter.

	PR c++/64679

gcc/cp/ChangeLog:

	* parser.cc (cp_parser_parameter_declaration_clause): Maintain
	a vector of parameters that haven't been pushed yet.  Push them at the
	end of a valid parameter-declaration-clause.
	(cp_parser_parameter_declaration_list): Take a new auto_vec parameter.
	Do not pushdecl while parsing tentatively when pushdecl-ing a parameter
	would result in a hard error.
	(cp_parser_cache_defarg): Adjust the call to
	cp_parser_parameter_declaration_list.

gcc/testsuite/ChangeLog:

	* g++.dg/parse/ambig11.C: New test.
	* g++.dg/parse/ambig12.C: New test.
	* g++.dg/parse/ambig13.C: New test.
	* g++.dg/parse/ambig14.C: New test.
2022-05-05 17:34:28 -04:00
H.J. Lu
a48be2e513 libsanitizer: cherry-pick commit b226894d475b from upstream
cherry-pick:

b226894d475b [sanitizer] [sanitizer] Correct GetTls for x32
2022-05-05 13:59:16 -07:00
Jonathan Wakely
b6b6600678 libstdc++: Fixes for tests that fail with -fno-rtti
This disables a use of dynamic_cast that is not valid for -fno-rtti and
adjusts some tests so they don't FAIL with -fno-rtti. Some tests are
skipped completely, and others just make use of typeid conditional on
the __cpp_rtti macro. A couple of tests were using typeid to verify
typedefs denote the right type, which can be done at compile-time using
templates instead.

libstdc++-v3/ChangeLog:

	* include/experimental/memory_resource [!__cpp_rtti]
	(__resource_adaptor_imp::do_is_equal): Do not use dynamic_cast
	when RTTI is disabled.
	* testsuite/17_intro/freestanding.cc: Require RTTI.
	* testsuite/18_support/exception/38732.cc: Likewise.
	* testsuite/18_support/exception_ptr/rethrow_exception.cc:
	Likewise.
	* testsuite/18_support/nested_exception/68139.cc: Likewise.
	* testsuite/18_support/nested_exception/rethrow_if_nested.cc:
	Likewise.
	* testsuite/18_support/type_info/103240.cc: Likewise.
	* testsuite/18_support/type_info/fundamental.cc: Likewise.
	* testsuite/18_support/type_info/hash_code.cc: Likewise.
	* testsuite/20_util/any/assign/emplace.cc: Likewise.
	* testsuite/20_util/any/cons/in_place.cc: Likewise.
	* testsuite/20_util/any/misc/any_cast.cc: Likewise.
	* testsuite/20_util/any/observers/type.cc: Likewise.
	* testsuite/20_util/function/1.cc: Likewise.
	* testsuite/20_util/function/2.cc: Likewise.
	* testsuite/20_util/function/3.cc: Likewise.
	* testsuite/20_util/function/4.cc: Likewise.
	* testsuite/20_util/function/5.cc: Likewise.
	* testsuite/20_util/function/6.cc: Likewise.
	* testsuite/20_util/function/7.cc: Likewise.
	* testsuite/20_util/function/8.cc: Likewise.
	* testsuite/20_util/polymorphic_allocator/resource.cc: Likewise.
	* testsuite/20_util/shared_ptr/casts/1.cc: Likewise.
	* testsuite/20_util/shared_ptr/casts/rval.cc: Likewise.
	* testsuite/20_util/shared_ptr/cons/unique_ptr_deleter_ref_2.cc:
	Likewise.
	* testsuite/20_util/shared_ptr/misc/get_deleter.cc: Likewise.
	* testsuite/20_util/typeindex/comparison_operators.cc: Likewise.
	* testsuite/20_util/typeindex/comparison_operators_c++20.cc:
	Likewise.
	* testsuite/20_util/typeindex/hash.cc: Likewise.
	* testsuite/20_util/typeindex/hash_code.cc: Likewise.
	* testsuite/20_util/typeindex/name.cc: Likewise.
	* testsuite/22_locale/ctype/is/string/89728_neg.cc: Likewise.
	* testsuite/22_locale/global_templates/standard_facet_hierarchies.cc:
	Likewise.
	* testsuite/22_locale/global_templates/user_facet_hierarchies.cc:
	Likewise.
	* testsuite/22_locale/locale/13630.cc: Check type without using
	RTTI.
	* testsuite/23_containers/array/requirements/non_default_constructible.cc:
	Require RTTI.
	* testsuite/27_io/basic_ostream/emit/1.cc: Likewise.
	* testsuite/27_io/fpos/14320-1.cc: Check type without using RTTI.
	* testsuite/27_io/fpos/mbstate_t/12065.cc: Require RTTI.
	* testsuite/27_io/ios_base/failure/dual_abi.cc: Likewise.
	* testsuite/experimental/any/misc/any_cast.cc: Likewise.
	* testsuite/experimental/any/observers/type.cc: Likewise.
	* testsuite/experimental/memory_resource/resource_adaptor.cc:
	Likewise.
	* testsuite/lib/libstdc++.exp (check_effective_target_rtti):
	Define new proc.
	* testsuite/tr1/3_function_objects/function/1.cc: Likewise.
	* testsuite/tr1/3_function_objects/function/2.cc: Likewise.
	* testsuite/tr1/3_function_objects/function/3.cc: Likewise.
	* testsuite/tr1/3_function_objects/function/4.cc: Likewise.
	* testsuite/tr1/3_function_objects/function/5.cc: Likewise.
	* testsuite/tr1/3_function_objects/function/6.cc: Likewise.
	* testsuite/tr1/3_function_objects/function/7.cc: Likewise.
	* testsuite/tr1/3_function_objects/function/8.cc: Likewise.
	* testsuite/tr2/bases/value.cc: Likewise.
	* testsuite/tr2/direct_bases/value.cc: Likewise.
	* testsuite/util/exception/safety.h [!__cpp_rtti]: Don't print
	types without RTTI.
2022-05-05 21:13:58 +01:00
Uros Bizjak
b06a79b823 [PATCH] i386: Cleanup -m32 usage in the testuite.
Use conditional compilation for ia32 target istead.

2022-05-05  Uroš Bizjak  <ubizjak@gmail.com>

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr103611-2.c (dg-do): Compile for target ia32.
	(dg-options): Remove -m32.
	* gcc.target/i386/pr105032.c (dg-do): Compile for taget ia32.
	(dg-additional-options): Remove.
	* gcc.target/i386/pr104732.c (dg-options): Remove -m32.
	* gcc.target/i386/pr99753.c (dg-options): Ditto.
2022-05-05 21:42:12 +02:00
Sandra Loosemore
705bcedf6e Fortran: Add support for OMP non-rectangular loops.
This patch adds support for OMP 5.1 "canonical loop nest form" to the
Fortran front end, marks non-rectangular loops for processing
by the middle end, and implements missing checks in the gimplifier
for additional prohibitions on non-rectangular loops.

Note that the OMP spec also prohibits non-rectangular loops with the TILE
construct; that construct hasn't been implemented yet, so that error will
need to be filled in later.

	gcc/fortran/
	* gfortran.h (struct gfc_omp_clauses): Add non_rectangular bit.
	* openmp.cc (is_outer_iteration_variable): New function.
	(expr_is_invariant): New function.
	(bound_expr_is_canonical): New function.
	(resolve_omp_do): Replace existing non-rectangularity error with
	check for canonical form and setting non_rectangular bit.
	* trans-openmp.cc (gfc_trans_omp_do): Transfer non_rectangular
	flag to generated tree structure.

	gcc/
	* gimplify.cc (gimplify_omp_for): Update messages for SCHEDULED
	and ORDERED clause conflict errors.  Add check for GRAINSIZE and
	NUM_TASKS on TASKLOOP.

	gcc/testsuite/
	* c-c++-common/gomp/loop-6.c (f3): New function to test TASKLOOP
	diagnostics.
	* gfortran.dg/gomp/collapse1.f90: Update expected messages.
	* gfortran.dg/gomp/pr85313.f90: Remove dg-error on non-rectangular
	loops that are now accepted.
	* gfortran.dg/gomp/non-rectangular-loop.f90: New file.
	* gfortran.dg/gomp/canonical-loop-1.f90: New file.
	* gfortran.dg/gomp/canonical-loop-2.f90: New file.
2022-05-05 11:49:49 -07:00
Joseph Myers
982fd4cd76 Regenerate gcc.pot
* gcc.pot: Regenerate.
2022-05-05 17:02:40 +00:00
Martin Liska
880456ed99 Remove loop-incremented dead code.
gcc/ChangeLog:

	* genautomata.cc (create_composed_state): Remove dead code.
	* graphite-poly.cc (print_pdrs): Likewise.
	* lto-wrapper.cc (run_gcc): Likewise.
	* tree-switch-conversion.cc (switch_decision_tree::balance_case_nodes):
	Likewise.
2022-05-05 15:03:47 +02:00
Martin Liska
6c53cf2e59 profile: Unify identifier names for profiling
gcc/ChangeLog:

	* tree-profile.cc (gimple_gen_ic_profiler): Prefix names with
	PROF_*.
	(gimple_gen_time_profiler): Likewise.
2022-05-05 14:51:51 +02:00
Martin Liska
4b03970c42 Remove sanity checking in stream_out_histogram_value.
gcc/ChangeLog:

	* value-prof.cc (stream_out_histogram_value): Remove sanity
	checking.
2022-05-05 14:44:16 +02:00
Richard Biener
ee1cb43bc7 tree-optimization/104162 - CSE of &MEM[ptr].a[i] and ptr + CST
This adds the capability to value-numbering of treating complex
address expressions where the offset becomes invariant as equal
to a POINTER_PLUS_EXPR.  This restores CSE that is now prevented
by early lowering of &MEM[ptr + CST] to a POINTER_PLUS_EXPR.

Unfortunately this regresses gcc.dg/asan/pr99673.c again, so
the testcase is adjusted accordingly.

2022-01-26  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/104162
	* tree-ssa-sccvn.cc (vn_reference_lookup): Handle
	&MEM[_1 + 5].a[i] like a POINTER_PLUS_EXPR if the offset
	becomes invariant.
	(vn_reference_insert): Likewise.

	* gcc.dg/tree-ssa/ssa-fre-99.c: New testcase.
	* gcc.dg/asan/pr99673.c: Adjust.
2022-05-05 14:41:27 +02:00
Roger Sayle
92fff39f06 [Committed] PR testsuite/105486: Use "signed char" in gcc.dg/pr102950.c
Although the automated regression testing scripts for powerpc64 appear
to be somewhat garbled at the moment, they've correctly identified that
my new test case for pr102950.c is failing on powerpc64, as char by
default is unsigned on this target.  This patch tweaks the new testcase
by explicitly using "signed char" so that it's testing the intended EVRP
behaviour portably.  Committed as obvious.

2022-05-05  Roger Sayle  <roger@nextmovesoftware.com>

gcc/testsuite/ChangeLog
	PR testsuite/105486
	* gcc.dg/pr102950.c: Use explicit "signed char" in test case.
2022-05-05 08:30:27 -04:00
Martin Liska
7ec6fed1e8 libsanitizer: update LOCAL_PATCHES.
libsanitizer/ChangeLog:

	* LOCAL_PATCHES: Update.
2022-05-05 13:25:16 +02:00
Martin Liska
45e69f7f38 libsanitizer: Apply local patches 2022-05-05 13:24:20 +02:00
Martin Liska
8996894d00 libsanitizer: merge from master (75f9e83ace52773af65dcebca543005ec8a2705d). 2022-05-05 13:24:04 +02:00
Richard Biener
f1d8a2d9bc Embed real_value into REAL_CST
The following removes the indirection to real_value from REAL_CST
which doesn't seem to serve any useful purpose.  Any sharing can
be achieved by sharing the actual REAL_CST (which is what usually
happens when copying trees) and sharing of real_value amongst
different REAL_CST doesn't happen as far as I can see and would
only lead to further issues like mismatching type and real_value.

2022-04-27  Richard Biener  <rguenther@suse.de>

	* tree-core.h (tree_real_cst::real_cst_ptr): Remove pointer
	to real_value field.
	(tree_real_cst::value): Add real_value field.
	* tree.h (TREE_REAL_CST_PTR): Adjust.
	* tree.cc (build_real): Remove separate allocation.
	* tree-streamer-in.cc (unpack_ts_real_cst_value_fields):
	Likewise.

gcc/cp/
	* module.cc (trees_in::core_vals): Remove separate allocation
	for REAL_CST.
2022-05-05 13:19:40 +02:00
Richard Biener
c2a0d2e6f6 rewrite undefined overflow to defined in ifcombine
When we make stmts to execute unconditionally in ifcombine we have
to make sure to rewrite stmts that can invoke undefined behavior
on overflow into a form with defined overflow.  That's possible
for all but signed division for which we have to avoid the transform.

2022-04-04  Richard Biener  <rguenther@suse.de>

	* tree-ssa-ifcombine.cc (bb_no_side_effects_p): Avoid executing
	divisions with undefined overflow unconditionally.
	(pass_tree_ifcombine::execute): Rewrite stmts with undefined
	overflow to defined.
2022-05-05 10:46:02 +02:00
Richard Biener
000f448000 testsuite/105486 - adjust testcase to avoid misaligned accesses
This properly aligns data, increasing test coverage.

2022-05-05  Richard Biener  <rguenther@suse.de>

	PR testsuite/105486
	* gcc.dg/vect/bb-slp-pr104240.c: Align all data.
2022-05-05 10:42:14 +02:00
Richard Biener
e1a41143a2 tree-optimization/105484 - VEC_SET and EH
When the IL representation of VEC_SET is marked as throwing
(unnecessarily), we need to clean that when replacing it with
the .VEC_SET internal function call which cannot throw.

2022-05-05  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/105484
	* gimple-isel.cc (gimple_expand_vec_set_expr): Clean EH, return
	whether the CFG changed.
	(gimple_expand_vec_exprs): When the CFG changed, clean it up.

	* gcc.dg/torture/pr105484.c: New testcase.
2022-05-05 10:36:49 +02:00
Richard Biener
938a02a589 tree-optimization/104595 - vectorization of COND_EXPR with bool load
The following fixes an omission in bool pattern detection that
makes it fail when check_bool_pattern fails for COND_EXPR.  That's
not what it should do, instead it should still pattern recog
to var != 0 even if no further adjustments to the def chain are
necessary when var is not a mask already.

2022-02-21  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/104595
	* tree-vect-patterns.cc (vect_recog_bool_pattern): For
	COND_EXPR do not fail if check_bool_pattern returns false.

	* gcc.dg/vect/pr104595.c: New testcase.
2022-05-05 10:36:42 +02:00
Kewen Lin
b9b764bce8 MAINTAINERS: Add myself as PowerPC port co-maintainer
Add myself as PowerPC port co-maintainer and to DCO section.

ChangeLog:

	* MAINTAINERS: Add myself as PowerPC port co-maintainer and to DCO
	section.
2022-05-05 00:14:31 -05:00
GCC Administrator
3e7db51747 Daily bump. 2022-05-05 00:16:29 +00:00
H.J. Lu
ae90c2d0f9 libsanitizer: cherry-pick commit f52e365092aa from upstream
cherry-pick:

f52e365092aa [sanitizer] Use newfstatat for x32
2022-05-04 15:59:49 -07:00
Jason Merrill
a47ab705c2 c++: alias CTAD refactoring [PR104470]
In my previous PR104470 patch I added yet another place that needs to handle
dependent member rewriting for deduction guides; this patches centralizes
rewriting into maybe_dependent_member_ref.  tsubst_baselink still has its
own handling because that's simpler than teaching maybe_dependent_member_ref
about BASELINKs.

	PR c++/104470

gcc/cp/ChangeLog:

	* pt.cc (maybe_dependent_member_ref): Handle types.
	(tsubst, tsubst_copy): Use it.
	(tsubst_aggr_type, instantiate_alias_template): Don't handle
	tf_dguide here.
2022-05-04 17:59:51 -04:00
Patrick Palka
8a98e3ff7e c++: ICE during aggr CTAD for member tmpl [PR105476]
Here we're crashing from maybe_aggr_guide ultimately because
processing_template_decl isn't set when partially instantiating the
guide's parameter list; this causes us to force completion of the
dependent type Visitor_functior<Fn>, which of course fails and results
in an unexpected error_mark_node (the instantation should always succeed).

	PR c++/105476

gcc/cp/ChangeLog:

	* pt.cc (maybe_aggr_guide): Set processing_template_decl when
	partially instantiating the guide's parameter list.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/class-deduction-aggr13.C: New test.
	* g++.dg/cpp2a/class-deduction-aggr13a.C: New test.
2022-05-04 17:08:08 -04:00
Marek Polacek
1cd3faf5dd c-family: Tweak -Woverflow diagnostic
When g++ emits

warning: overflow in conversion from 'int' to 'char' changes value from '300' to '',''

for code like "char c = 300;" it might raise a few eyebrows.  With this
warning we're not interested in the ASCII representation of the char, only
the numerical value, so convert constants of type char to int.  It looks
like this conversion only needs to be done for char_type_node.

gcc/c-family/ChangeLog:

	* c-warn.cc (warnings_for_convert_and_check): Convert constants of type
	char to int.

gcc/testsuite/ChangeLog:

	* c-c++-common/Wconversion-1.c: New test.
2022-05-04 16:10:09 -04:00
Marek Polacek
a733dea9e7 c++: wrong parse with functors [PR64679]
Consider

  struct F {
    F(int) {}
    F operator()(int) const { return *this; }
  };

and

  F(i)(0)(0);

where we're supposed to first call the constructor and then invoke
the operator() twice.  However, we parse this as an init-declarator:
"(i)" looks like a perfectly valid declarator, then we see an '(' and
think it must be an initializer, so we commit and we're toast.  My
fix is to look a little bit farther before deciding we've seen an
initializer.

This is only a half of c++/64679, the other part of the PR is unrelated:
there the problem is that we are calling pushdecl while parsing
tentatively (in cp_parser_parameter_declaration_list), which is bad.

	PR c++/64679

gcc/cp/ChangeLog:

	* parser.cc (cp_parser_init_declarator): Properly handle a series of
	operator() calls, they are not part of an init-declarator.

gcc/testsuite/ChangeLog:

	* g++.dg/parse/functor1.C: New test.
2022-05-04 16:06:02 -04:00
Jason Merrill
c8df720886 c++: optimize reshape_init
If the index of a constructor_elt is a FIELD_DECL, the CONSTRUCTOR is
already reshaped, so we can save time and memory by returning immediately.

gcc/cp/ChangeLog:

	* decl.cc (reshape_init): Shortcut already-reshaped init.
	 (reshape_init_class): Assert not getting one here.
2022-05-04 16:01:35 -04:00
Jason Merrill
c2e846b539 c++: use %D more
There's no reason to call cxx_printable_name_translate here instead of using
%D in the format string.

gcc/cp/ChangeLog:

	* error.cc (cp_print_error_function): Use %qD.
	(function_category): Use %qD.
2022-05-04 14:45:15 -04:00
Tobias Burnus
4a20616107 libgomp/plugin/plugin-gcn.c: Use -foffload-options= in err msg
While -foffload=-<flag> works (never documented legacy feature),
the documented way is to use -foffload-options=.

libgomp/ChangeLog:

	* plugin/plugin-gcn.c (isa_matches_agent): Suggest -foffload-options.
2022-05-04 18:40:03 +02:00
Joseph Myers
d7de15fd93 Update cpplib es.po
* es.po: Update.
2022-05-04 16:33:35 +00:00
Tobias Burnus
3f8c389fe9 OpenMP: Fix use_device_{addr,ptr} with in-data-sharing arg
For array-descriptor vars, the descriptor is assigned to a temporary. However,
this failed when the clause's argument was in turn in a data-sharing clause
as the outer context's VALUE_EXPR wasn't used.

gcc/ChangeLog:

	* omp-low.cc (lower_omp_target): Fix use_device_{addr,ptr} with list
	item that is in an outer data-sharing clause.

libgomp/ChangeLog:

	* testsuite/libgomp.fortran/use_device_addr-5.f90: New test.
2022-05-04 18:18:44 +02:00
Marek Polacek
79a1a01cbd c++: parse error with >= in template argument list [PR105436]
This patch fixes an oversight whereby we treated >= as the end of
a template argument.  This causes problems in C++14, because in
cp_parser_template_argument we go different ways for C++14 and C++17:

  /* It must be a non-type argument.  In C++17 any constant-expression is
     allowed.  */
  if (cxx_dialect > cxx14)
    goto general_expr;

so in this testcase in C++14 we get "N" as the template argument but in
C++17 it is the whole "N >= 5" expression.  So in C++14 the remaining
">= 5" triggered the newly-added diagnostic.

	PR c++/105436

gcc/cp/ChangeLog:

	* parser.cc (cp_parser_next_token_ends_template_argument_p): Don't
	return true for CPP_GREATER_EQ.

gcc/testsuite/ChangeLog:

	* g++.dg/parse/template31.C: New test.
2022-05-04 12:01:31 -04:00
Jonathan Wakely
22399ad6ed libstdc++: Add always_inline to the simplest std::array accessors [PR104719]
libstdc++-v3/ChangeLog:

	PR libstdc++/104719
	* include/std/array (array::size(), array::max_size())
	(array::empty(), array::data()): Add  always_inline attribute.
2022-05-04 16:24:56 +01:00
Jonathan Wakely
ef8d5ac08b libstdc++: Simplify std::array accessors [PR104719]
This removes the __array_traits::_S_ref and __array_traits::_S_ptr
accessors, which only exist to make the special case of std::array<T, 0>
syntactically well-formed.

By changing the empty type used as the std::array<T, 0>::_M_elems data
member to support operator[] and conversion to a pointer, we can write
code using the natural syntax. The indirection through _S_ref and
_S_ptr is removed for the common case, and a function call is only used
for the special case of zero-size arrays.

The invalid member access for zero-sized arrays is changed to use
__builtin_trap() instead of a null dereference. This guarantees a
runtime error if it ever gets called, instead of undefined behaviour
that is likely to get optimized out as unreachable.

libstdc++-v3/ChangeLog:

	PR libstdc++/104719
	* include/std/array (__array_traits::_S_ref): Remove.
	(__array_traits::_S_ptr): Remove.
	(__array_traits<T, 0>::_Type): Define operator[] and operator T*
	to provide an array-like API.
	(array::_AT_Type): Remove public typeef.
	(array::operator[], array::at, array::front, array::back): Use
	index operator to access _M_elems instead of _S_ref.
	(array::data): Use implicit conversion from _M_elems to pointer.
	(swap(array&, array&)): Use __enable_if_t helper.
	(get<I>): Use index operator to access _M_elems.
	* testsuite/23_containers/array/tuple_interface/get_neg.cc:
	Adjust dg-error line numbers.
2022-05-04 16:24:56 +01:00
Jason Merrill
9c6a4beeed c++: Remove cdtor_label
Jakub pointed out that cdtor_label is unnecessary, we should get all the
desired semantics with a normal return.

gcc/cp/ChangeLog:

	* cp-tree.h (struct language_function): Remove x_cdtor_label.
	(cdtor_label, LABEL_DECL_CDTOR): Remove.
	* constexpr.cc (returns): Don't check LABEL_DECL_CDTOR.
	(cxx_eval_constant_expression): Don't call returns.
	* decl.cc (check_goto): Don't check cdtor_label.
	(start_preparsed_function): And don't set it.
	(finish_constructor_body, finish_destructor_body): Remove.
	(finish_function_body): Don't call them.
	* typeck.cc (check_return_expr): Handle cdtor_returns_this here.
	* semantics.cc (finish_return_stmt): Not here.
2022-05-04 09:54:02 -04:00
Richard Biener
eca04dc855 tree-optimization/104658 - avoid mixing mask & non-mask vector defs
When pattern recognition fails to sanitize all defs of a mask
producing operation and the respective def is external or constant
we end up trying to produce a VECTOR_BOOLEAN_TYPE_P constructor
which in turn ends up exposing stmts like

  <signed-boolean:1> _135 = _49 ? -1 : 0;

which isn't handled well in followup SLP and generates awful code.

We do rely heavily on pattern recognition to sanitize mask vs.
data uses of bools but that fails here which means we also should
fail vectorization.  That avoids ICEing because of such stmts
and it also avoids generating weird code which makes the
vectorization not profitable.

The following patch simply disallows external VECTOR_BOOLEAN_TYPE_P
defs and arranges the promote to external code to instead promote
mask uses to extern (that's just a short-cut here).

I've also looked at aarch64 and with SVE and a fixed vector length
for the gcc.target/i386/pr101636.c testcase.  I see similar vectorization
(using <signed-boolean:4>) there but it's hard to decide whether the
old, the new or no vectorization is better for this.  The code
generated with traditional integer masks isn't as awkward but we
still get the != 0 promotion done for each scalar element which
doesn't look like intended - this operation should be visible upfront.

That also means some cases will now become a missed optimization
that needs to be fixed by bool pattern recognition.  But that can
possibly be delayed to GCC 13.

2022-02-22  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/104658
	* tree-vect-slp.cc (vect_slp_convert_to_external): Do not
	create VECTOR_BOOLEAN_TYPE_P extern defs.  Reset the vector
	type on nodes we promote.
	(vectorizable_bb_reduc_epilogue): Deal with externalized
	root.
	* tree-vect-stmts.cc (vect_maybe_update_slp_op_vectype): Do
	not allow VECTOR_BOOLEAN_TYPE_P extern defs.

	* gcc.target/i386/pr104658.c: New testcase.
2022-05-04 15:12:28 +02:00
Richard Biener
52b7b86f8c tree-optimization/103116 - SLP permutes and peeling for gaps
The testcase shows that we can end up with a contiguous access across
loop iterations but by means of permutations the elements accessed
might only cover parts of a vector.  In this case we end up with
GROUP_GAP == 0 but still need to avoid accessing excess elements
in the last loop iterations.  Peeling for gaps is designed to cover
this but a single scalar iteration might not cover all of the excess
elements.  The following ensures peeling for gaps is done in this
situation and when that isn't sufficient because we need to peel
more than one iteration (gcc.dg/vect/pr103116-2.c), fail the SLP
vectorization.

2022-05-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/103116
	* tree-vect-stmts.cc (get_group_load_store_type): Handle the
	case we need peeling for gaps even though GROUP_GAP is zero.

	* gcc.dg/vect/pr103116-1.c: New testcase.
	* gcc.dg/vect/pr103116-2.c: Likewise.
2022-05-04 15:12:28 +02:00
Martin Liska
0aa9aa76bb Remove dead code.
gcc/ChangeLog:

	* gengtype-state.cc (read_a_state_token): Remove dead code.
	* ipa-profile.cc (ipa_profile_read_summary_section): Likewise.
2022-05-04 14:49:44 +02:00
Richard Biener
3ae5cbff1a Fold more vector constants early
In PR105049 we had

  return VIEW_CONVERT_EXPR<U>( VEC_PERM_EXPR < {<<< Unknown tree: compound_literal_expr
        V D.1984 = { 0 }; >>>, { 0 }} , {<<< Unknown tree: compound_literal_expr
        V D.1985 = { 0 }; >>>, { 0 }} , { 0, 0 } >  & {(short int) SAVE_EXPR <c>, (short int) SAVE_EXPR <c>});

where we gimplify the init CTORs to

  _1 = {{ 0 }, { 0 }};
  _2 = {{ 0 }, { 0 }};

instead of to vector constants.  The following makes sure to simplify the
CTORs to VECTOR_CSTs during gimplification by re-ordering the simplification
to after CTOR flag recomputation and gimplification of the elements.

2022-03-25  Richard Biener  <rguenther@suse.de>

	* gimplify.cc (gimplify_init_constructor): First gimplify,
	then simplify the result to a VECTOR_CST.
2022-05-04 13:58:04 +02:00
Jakub Jelinek
8afcd14810 genconditions: Add support for targets without non-trivial insn conditions
Somebody complained on IRC that when writing a new backend one can get
an error while compiling build/gencondmd.cc.
The problem is that when host compiler is g++ 3 or later (or when
bootstrapping), we compile it with g++ -std=c++11 -pedantic and
the generated insn_conditions array contains pairs
{ "cond", __builtin_constant_p (cond) ? (int) (cond) : -1 },
where cond is some non-trivial instruction condition.  Now if a target
uses "" for all the conditions (admittedly unlikely for non-trivial
target), the initializer for insn_conditions[] is {} and that is
pedantically rejected because C++ doesn't support zero-sized arrays.

The following patch fixes that by adding an artificial termination
element and skips that during the walk.

2022-05-04  Jakub Jelinek  <jakub@redhat.com>

	* genconditions.cc (write_conditions): Append a { nullptr, -1 }
	element at the end of insn_conditions.
	(write_writer): Use ARRAY_SIZE (insn_conditions) - 1 instead of
	ARRAY_SIZE (insn_conditions).
2022-05-04 12:02:57 +02:00
Martin Liska
7499c13ce3 libsanitizer: update test that mixes fake and real stack
gcc/testsuite/ChangeLog:

	* c-c++-common/asan/alloca_loop_unpoisoning.c: Do not combine
	fake and real stack.
2022-05-04 11:00:54 +02:00