Commit graph

192825 commits

Author SHA1 Message Date
Martin Liska
f732bf6a60 libsanitizer: merge from upstream (0a1bcab9f3bf75c4c5d3e53bafb3eeb80320af46). 2022-05-04 11:00:48 +02:00
Christophe Lyon
e2285af309 arm: Restrict support of vectors of boolean immediates (PR target/104662)
This simple patch avoids the ICE described in the PR:
internal compiler error: in simd_valid_immediate, at config/arm/arm.cc:12866

with an early exit from simd_valid_immediate if we are trying to
handle a vector of booleans and MVE is not enabled.

We still get an ICE when compiling the existing
gcc.dg/rtl/arm/mve-vxbi.c without -march=armv8.1-m.main+mve:

error: unrecognizable insn:
(insn 7 5 8 2 (set (reg:V4BI 114)
        (const_vector:V4BI [
                (const_int 1 [0x1])
                (const_int 0 [0]) repeated x2
                (const_int 1 [0x1])
            ])) -1
     (nil))
during RTL pass: ira

but there's little we can do since the testcase explicitly creates
vectors of booleans which do need MVE.

That is the reason why I do not add a testcase.

2022-04-19  Christophe Lyon  <christophe.lyon@arm.com>

	PR target/104662
	* config/arm/arm.cc (simd_valid_immediate): Exit when input is a
	vector of booleans and MVE is not enabled.
2022-05-04 10:17:45 +02:00
Jakub Jelinek
1c8e9bed9b c++: Don't emit deprecated warnings or unavailable errors on lambda declarations
On the following testcase, we emit deprecated warnings or unavailable errors
even on merge declarations of those lambdas (the dg-bogus directives), while
IMHO we should emit them only when something actually calls those lambdas.

The following patch temporarily disables that diagnostics during
maybe_add_lambda_conv_op.

PR2173R1 also says that ambiguity between attribute-specifier-seq at the
end of requires-clause and attribute-specifier-seq from lambda-expression
should be resolved to attribute-specifier-seq for the latter.  Do we need
to do anything about that?  I mean, can a valid requires-clause end with
an attribute-specifier-seq?  Say operator int [[]] is valid primary
expression, but requires operator int [[]] isn't valid, nor is
requires operator int, no?

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

	* lambda.cc: Include decl.h.
	(maybe_add_lambda_conv_op): Temporarily override deprecated_state to
	UNAVAILABLE_DEPRECATED_SUPPRESS.

	* g++.dg/cpp23/lambda-attr1.C: New test.
	* g++.dg/cpp23/lambda-attr2.C: New test.
2022-05-04 10:07:36 +02:00
Martin Liska
3771486daa hwasan: support new dg-output format.
Supports change in libsanitizer where it newly reports:
READ of size 4 at 0xffffffffc3d4 tags: 02/01(00) (ptr/mem) in thread T0

So the 'tags' contains now 3 entries compared to 2 entries.

gcc/testsuite/ChangeLog:

	* c-c++-common/hwasan/alloca-outside-caught.c: Update dg-output.
	* c-c++-common/hwasan/heap-overflow.c: Likewise.
	* c-c++-common/hwasan/hwasan-thread-access-parent.c: Likewise.
	* c-c++-common/hwasan/large-aligned-1.c: Likewise.
	* c-c++-common/hwasan/stack-tagging-basic-1.c: Likewise.
2022-05-04 09:59:49 +02:00
Richard Biener
1ba68f78c9 debug/105158 - improve debug stmt retaining for forwarder removal
Currently when we cannot move debug stmt from a forwarder to the
destination block we drop/reset them.  But in some cases as for
the testcase we can move them to the predecessor when that has
a single successor and we can insert after the last stmt of the
block.  That allows us to preserve debug info here.

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

	PR debug/105158
	* tree-cfgcleanup.cc (move_debug_stmts_from_forwarder):
	Move debug stmts to the predecessor if moving to the
	destination is not possible.
	(remove_forwarder_block): Adjust.
	(remove_forwarder_block_with_phi): Likewise.
2022-05-04 09:51:19 +02:00
Martin Liska
c4ae175881 LTO plugin: modernize a bit.
include/ChangeLog:

	* plugin-api.h (enum ld_plugin_tag): Do not set implicit enum
	values.

lto-plugin/ChangeLog:

	* lto-plugin.c (struct plugin_objfile): Use bool for offset
	field.
	(exec_lto_wrapper): Assign true/false to bool variables.
	(process_offload_section): Likewise.
	(claim_file_handler): Likewise.
	(onload): Likewise.
2022-05-04 08:20:13 +02:00
GCC Administrator
e66af28d99 Daily bump. 2022-05-04 00:16:24 +00:00
Joseph Myers
ec70591fbb Update gcc sv.po
* sv.po: Update.
2022-05-03 22:16:26 +00:00
Patrick Palka
a16fc9f1c9 c++: make finish_non_static_data_member SFINAE enabled [PR105351]
Here since finish_non_static_data_member isn't SFINAE enabled, we
incorrectly emit an error when considering the first overload rather
than silently discarding it:

sfinae33.C: In substitution of ‘template<class T> A<T::value> f() [with T = B]’:
sfinae33.C:11:7:   required from here
sfinae33.C:5:31: error: invalid use of non-static data member ‘B::value’
    5 | template<class T> A<T::value> f();
      |                               ^

This patch makes the function SFINAE enabled in the usual way: give it a
complain parameter, check it before emitting an error, and pass it through
appropriately.

	PR c++/105351

gcc/cp/ChangeLog:

	* cp-tree.h (finish_non_static_data_member): Add defaulted
	complain parameter.
	* pt.cc (tsubst_copy_and_build): Pass complain to
	finish_non_static_data_member.
	* semantics.cc (finish_non_static_data_member): Respect complain
	parameter.
	(finish_qualified_id_expr): Pass complain to
	finish_non_static_data_member.

gcc/testsuite/ChangeLog:

	* g++.dg/template/sfinae33.C: New test.
2022-05-03 15:21:26 -04:00
Dimitar Dimitrov
5609bcd620 testsuite: libgcc function name for PRU
Update the match rules to accommodate the non-standard libgcc function
names for PRU backend.

gcc/testsuite/ChangeLog:

	* gcc.c-torture/compile/attr-complex-method-2.c: Accept both __divdc3
	and __gnu_divdc3 as valid libgcc function names.
	* gcc.dg/complex-6.c: Ditto for __mulsc3.
	* gcc.dg/complex-7.c: Ditto for __muldc3.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-05-03 21:56:15 +03:00
Dimitar Dimitrov
8381665fdd testsuite: Skip cases for default_packed targets
The memchr test cases expect padding to be present in structures.  But
this is not true for targets which pack by default.  Skip these test
cases in order to avoid static assert errors when checking field offsets.

gcc/testsuite/ChangeLog:

	* gcc.dg/memchr.c: Skip for default_packed targets.
	* gcc.dg/memcmp-3.c: Ditto.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-05-03 21:56:15 +03:00
Dimitar Dimitrov
0a7c4d6b67 testsuite: Annotate Wattributes-8.c for default_packed
Place markers in test case to handle targets which pack structures by
default. Validated on pru-none-elf.

gcc/testsuite/ChangeLog:

	* gcc.dg/Wattributes-8.c: Add annotations for default_packed
	targets.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-05-03 21:56:15 +03:00
Dimitar Dimitrov
80d44ac870 testsuite: Mark that PRU lowers DI alu ops by itself
PRU target defines DI patterns for logical ALU operations.

gcc/testsuite/ChangeLog:

	* gcc.dg/lower-subreg-1.c: Skip for PRU.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-05-03 21:56:15 +03:00
Dimitar Dimitrov
a0fa33abab testsuite: Skip gcc.dg/Wno-frame-address.c for PRU
Access to arbitrary stack frames is not supported on PRU.

gcc/testsuite/ChangeLog:

	* gcc.dg/Wno-frame-address.c: Skip for PRU target.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-05-03 21:56:15 +03:00
Roger Sayle
b3e98eb339 PR tree-optimization/102950: Improved EVRP for signed BIT_XOR_EXPR.
This patch fixes PR tree-optimization/102950, which is a P2 regression,
by providing better range bounds for BIT_XOR_EXPR, BIT_AND_EXPR and
BIT_IOR_EXPR on signed integer types.  In general terms, any binary
bitwise operation on sign-extended or zero-extended integer types will
produce results that are themselves sign-extended or zero-extended.
More precisely, we can derive signed bounds from the number of leading
redundant sign bit copies, from the equation:
	clrsb(X op Y) >= min (clrsb (X), clrsb(Y))
and from the property that for any (signed or unsigned) range [lb, ub]
that clrsb([lb, ub]) >= min (clrsb(lb), clrsb(ub)).

These can be used to show that [-1, 0] op [-1, 0] is [-1, 0] or that
[-128, 127] op [-128, 127] is [-128, 127], even when tracking nonzero
bits would result in VARYING (as every bit can be 0 or 1).  This is
equivalent to determining the minimum type precision in which the
operation can be performed then sign extending the result.

One additional refinement is to observe that X ^ Y can never be
zero if the ranges of X and Y don't overlap, i.e. X can't be equal
to Y.

Previously, the expression "(int)(char)a ^ 233" in the PR was considered
VARYING, but with the above changes now has the range [-256, -1][1, 255],
which is sufficient to optimize away the call to foo.

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

gcc/ChangeLog
	PR tree-optimization/102950
	* range-op.cc (wi_optimize_signed_bitwise_op): New function to
	determine bounds of bitwise operations on signed types.
	(operator_bitwise_and::wi_fold): Call the above function.
	(operator_bitwise_or::wi_fold): Likewise.
	(operator_bitwise_xor::wi_fold): Likewise.  Additionally, the
	result can't be zero if the operands can't be equal.

gcc/testsuite/ChangeLog
	PR tree-optimization/102950
	* gcc.dg/pr102950.c: New test case.
	* gcc.dg/tree-ssa/evrp10.c: New test case.
2022-05-03 14:43:47 -04:00
Iain Sandoe
ecd5727c0a Objective-C, NeXT: Adjust symbol marking to match host tools.
Current host tools mark some additional symbols as 'no dead strip' and also
expose one additional group to the linker.  This does not affect older Darwin
versions or x86_64, but omitting these changes results in link errors for
aarch64.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/ChangeLog:

	* config/darwin.cc (darwin_label_is_anonymous_local_objc_name): Make
	protocol class methods linker-visible.

gcc/objc/ChangeLog:

	* objc-next-runtime-abi-02.cc (next_runtime_abi_02_protocol_decl): Do
	not dead-strip the runtime meta-data symbols.
	(build_v2_classrefs_table): Likewise.
	(build_v2_protocol_list_address_table): Likewise.
2022-05-03 19:38:34 +01:00
Alexandre Oliva
25389f3de4 [PR105324] libstdc++: testsuite: pr105324 requires FP from_char
The floating-point overloads of from_char are only declared if
_GLIBCXX_HAVE_USELOCALE is #defined as nonzero.  That's exposed from
charconv as __cpp_lib_to_chars >= 201611L, so guard the test body with
that.


for  libstdc++-v3/ChangeLog

	PR c++/105324
	* testsuite/20_util/from_chars/pr105324.cc: Guard test body
	with conditional for floating-point overloads of from_char.
2022-05-03 14:57:15 -03:00
Uros Bizjak
2680f5eec2 i386: Optimize _mm_storeu_si16 w/o SSE4 [PR105079]
Optimize _mm_storeu_si16 to use MOVD from a SSE to an integer register
instead of PEXTRW from a low word of the SSE register to an integer reg.

Avoid the transformation when optimizing for size for targets without
TARGET_INTER_UNIT_MOVES_FROM_VEC capability, where the transformation
results in two moves via a memory location.

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

gcc/ChangeLog:

	PR target/105079
	* config/i386/sse.md (*vec_extract<mode>_0_mem): New pre-reload
	define_insn_and_split pattern.

gcc/testsuite/ChangeLog:

	PR target/105079
	* gcc.target/i386/pr105079.c: New test.
	* gcc.target/i386/pr95483-1.c (dg-options): Use -msse4.1.
2022-05-03 18:00:25 +02:00
Christophe Lyon
da6d834bc2 dfp.m4: Add missing license header
It seems the license header was omitted when dfp.m4 was originally
contributed in 2010 (commit 3c39bca6bb, r0-102573 or svn r163815.

This copies the license from libdecnumber/configure.ac since dfp.m4
was originally extracted from that file.

2022-04-29  Christophe Lyon  <christophe.lyon@arm.com>

	config/
	* dfp.m4: Add license header.
2022-05-03 15:01:46 +02:00
Richard Biener
7bb6fa5a1c middle-end/105083 - check prerequesites in scev_initialize
2022-05-03  Richard Biener  <rguenther@suse.de>

	PR middle-end/105083
	* tree-scalar-evolution.cc (scev_initialize): Verify we
	have appropriate loop state.
	* tree-ssa-dce.cc (perform_tree_ssa_dce): Re-order SCEV and
	loop init and finalization.
2022-05-03 12:59:09 +02:00
Richard Biener
6b4cc78480 middle-end/105461 - opts processing of -fvar-tracking
The flag_var_tracking reset in finish_options doesn't match the
condition in process_options, in particular we fail to reset it
when the option was specified on the command line.  The following
fixes this and also alters the debug info level guard to match
the one in process_options.

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

	PR middle-end/105461
	* opts.cc (finish_options): Match the condition to
	disable flag_var_tracking to that of process_options.

	* gcc.dg/pr105461.c: New testcase.
2022-05-03 11:19:20 +02:00
Richard Biener
99f55024b0 Fixup OPTION_SET_P usage in finish_options
When some code was moved from process_options to finish_options,
uses of OPTION_SET_P were not replaced with references to the
opts_set option set.  The following fixes this.

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

	* opts.cc: #undef OPTIONS_SET_P.
	(finish_options): Use opts_set instead of OPTIONS_SET_P.
2022-05-03 10:25:45 +02:00
Richard Biener
dfae0c5a29 tree-optimization/105394 - vector lowering of compares
The following fixes missing handling of non-integer mode but
masked (SVE or MVE) compares in vector lowering by using the
appropriate mask element width to extract the components and
adjust the index.

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

	PR tree-optimization/105394
	* tree-vect-generic.cc (expand_vector_condition): Adjust
	comp_width for non-integer mode masks as well.
2022-05-03 09:45:29 +02:00
Marcel Vollweiler
941cdc8b6d OpenMP, libgomp: Add new runtime routine omp_get_mapped_ptr.
This patch adds the OpenMP runtime routine "omp_get_mapped_ptr" which was
introduced in OpenMP 5.1.

gcc/ChangeLog:

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

libgomp/ChangeLog:

	* libgomp.map: Added omp_get_mapped_ptr.
	* libgomp.texi: Tagged omp_get_mapped_ptr as supported.
	* omp.h.in: Added omp_get_mapped_ptr.
	* omp_lib.f90.in: Added interface for omp_get_mapped_ptr.
	* omp_lib.h.in: Likewise.
	* target.c (omp_get_mapped_ptr): Added implementation of
	omp_get_mapped_ptr.
	* testsuite/libgomp.c-c++-common/get-mapped-ptr-1.c: New test.
	* testsuite/libgomp.c-c++-common/get-mapped-ptr-2.c: New test.
	* testsuite/libgomp.c-c++-common/get-mapped-ptr-3.c: New test.
	* testsuite/libgomp.c-c++-common/get-mapped-ptr-4.c: New test.
	* testsuite/libgomp.fortran/get-mapped-ptr-1.f90: New test.
	* testsuite/libgomp.fortran/get-mapped-ptr-2.f90: New test.
	* testsuite/libgomp.fortran/get-mapped-ptr-3.f90: New test.
	* testsuite/libgomp.fortran/get-mapped-ptr-4.f90: New test.
2022-05-02 23:56:44 -07:00
Alexandre Oliva
404edfce68 testsuite: vect: update unaligned message
gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c covers ppc variants
that accept and reject misaligned accesses.  The message that it
expects for rejection was removed in the gcc-11 development cycle by
commit r11-1969.  The patch adjusted multiple tests to use the message
introduced in r11-1945, but missed this one.


for  gcc/testsuite/ChangeLog

	* gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c: Update
	the expected message for the case in which unaligned accesses
	are not allowed.
2022-05-02 21:39:50 -03:00
GCC Administrator
6259d8aa73 Daily bump. 2022-05-03 00:16:25 +00:00
Jason Merrill
6f78c52d4b c++: improve template-id location
On PR102629 I noticed that we were giving the entire lambda as the location
for this template-id.

gcc/cp/ChangeLog:

	* pt.cc (tsubst_copy_and_build) [TEMPLATE_ID_EXPR]: Copy location.
	(do_auto_deduction): Use expr location.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/lambda-pack-init7.C: Check column number.
2022-05-02 18:05:06 -04:00
Jason Merrill
dcb4bd0789 c++: also note name used in enclosing class
While looking at PR96645 I noticed that while we were diagnosing names
changing meaning in the full class context, we weren't doing this for
lookups in nested class bodies.

Note that this breaks current range-v3; I've submitted a pull request to fix
its violation of the rule.

gcc/cp/ChangeLog:

	* class.cc (maybe_note_name_used_in_class): Note in all enclosing
	classes.  Remember location of use.
	(note_name_declared_in_class): Adjust.

gcc/testsuite/ChangeLog:

	* g++.dg/lookup/name-clash13.C: New test.
	* g++.dg/lookup/name-clash14.C: New test.
	* g++.dg/lookup/name-clash15.C: New test.
	* g++.dg/lookup/name-clash16.C: New test.
2022-05-02 15:52:23 -04:00
H.J. Lu
7e1f30d7ed x86: Add missing .note.GNU-stack to assembly source
Add .note.GNU-stack assembly source to avoid linker warning:

ld: warning: /tmp/ccPZSZ7Z.o: missing .note.GNU-stack section implies executable stack
ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
FAIL: gcc.target/i386/iamcu/test_3_element_struct_and_unions.c compilation,  -O0

	PR testsuite/105433
	* gcc.target/i386/iamcu/asm-support.S: Add .note.GNU-stack.
	* gcc.target/x86_64/abi/asm-support.S: Likewise.
	* gcc.target/x86_64/abi/avx/asm-support.S: Likewise.
	* gcc.target/x86_64/abi/avx512f/asm-support.S: Likewise.
	* gcc.target/x86_64/abi/avx512fp16/asm-support.S: Likewise.
	* gcc.target/x86_64/abi/avx512fp16/m256h/asm-support.S: Likewise.
	* gcc.target/x86_64/abi/avx512fp16/m512h/asm-support.S: Likewise.
	* gcc.target/x86_64/abi/ms-sysv/do-test.S: Likewise.
2022-05-02 11:38:23 -07:00
Sandra Loosemore
198bd0d599 Fortran: Add location info to OpenMP tree nodes
gcc/fortran/
	* trans-openmp.cc (gfc_trans_omp_critical): Set location on OMP
	tree node.
	(gfc_trans_omp_do): Likewise.
	(gfc_trans_omp_masked): Likewise.
	(gfc_trans_omp_do_simd): Likewise.
	(gfc_trans_omp_scope): Likewise.
	(gfc_trans_omp_taskgroup): Likewise.
	(gfc_trans_omp_taskwait): Likewise.
	(gfc_trans_omp_distribute): Likewise.
	(gfc_trans_omp_taskloop): Likewise.
	(gfc_trans_omp_master_masked_taskloop): Likewise.
2022-05-02 10:58:12 -07:00
Marek Polacek
05cd2d3f58 c++: uses_template_parms cleanups
gcc/cp/ChangeLog:

	* cp-tree.h (uses_template_parms): Adjust declaration.
	* pt.cc (uses_template_parms): Return bool.  Use a RAII sentinel.
2022-05-02 12:25:24 -04:00
Richard Biener
1cb220498e Assume a call is expensive when it mismatches
This makes sure to not consider calls to builtin decls with
mismatching arguments as inexpensive.

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

	* tree-scalar-evolution.cc (expression_expensive_p):
	Never consider mismatched calls as cheap.
2022-05-02 14:58:51 +02:00
Richard Biener
41e3db05d6 tree-optimization/104240 - SLP discovery with swapped comparisons
The following extends SLP discovery to handle swapped operands
in comparisons.

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

	PR tree-optimization/104240
	* tree-vect-slp.cc (op1_op0_map): New.
	(vect_get_operand_map): Handle compares.
	(vect_build_slp_tree_1): Support swapped operands for
	tcc_comparison.

	* gcc.dg/vect/bb-slp-pr104240.c: New testcase.
2022-05-02 13:16:59 +02:00
Patrick Palka
86d821ddf5 libstdc++: Don't use std::tolower in <charconv> [PR103911]
As with std::isdigit in r12-6281-gc83ecfbe74a5cf, we shouldn't be using
std::tolower in <charconv> either.

	PR libstdc++/103911

libstdc++-v3/ChangeLog:

	* src/c++17/floating_from_chars.cc (find_end_of_float): Accept
	two delimeters for the exponent part in the form of a possibly
	NULL string of length two.  Don't use std::tolower.
	(pattern): Adjust calls to find_end_of_float accordingly.
2022-05-02 07:01:33 -04:00
Patrick Palka
576f975cab libstdc++: case-sensitivity in hexfloat std::from_chars [PR105441]
The hexfloat parser for binary32/64 added in r12-6645-gcc3bf3404e4b1c
overlooked that the exponent part can also begin with an uppercase 'P'.

	PR libstdc++/105441

libstdc++-v3/ChangeLog:

	* src/c++17/floating_from_chars.cc (__floating_from_chars_hex):
	Also accept 'P' as the start of the exponent.
	* testsuite/20_util/from_chars/7.cc: Add corresponding testcase.
2022-05-02 07:00:48 -04:00
Jakub Jelinek
02f03c5c82 expand: Throw away non-external decls without varpool nodes [PR105415]
The following testcase fails -fcompare-debug on aarch64-linux.  The problem
is that for the n variable we create a varpool node, then remove it again
because the var isn't really used, but it keeps being referenced in debug
stmts/insns with -g.  Later during sched1 pass we ask whether the n var
can be modified through some store to an anchored variable and with -g
we create a new varpool node for it again just so that we can find its
ultimate alias target.  Even later on we create some cgraph node for the
loop parallelization, but as there has been an extra varpool node creation
in between, we get higher node->order with -g than without.

The patch fixes that by throwing variables without varpool nodes away
during expansion time, they are very unlikely to actually end up with
useful debug info anyway.

I've bootstrapped/regtested the following on x86_64-linux and i686-linux,
then bootstrapped with the patch reverted, reapplied the patch and did make
cc1plus in stage3.  The debug section sizes are identical, .debug_info and
.debug_loc is identical too, so I think we don't lose any debug info through
it.
So at least on cc1plus it makes no difference.

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

	PR debug/105415
	* cfgexpand.cc (expand_debug_expr): Don't make_decl_rtl_for_debug
	if there is no symtab node for the VAR_DECL.

	* gcc.dg/pr105415.c: New test.
2022-05-02 11:30:58 +02:00
Sebastian Huber
880a9845dc gcov: Fix first time gcov info dump
This patch fixes an issue introduced by commit
ef9a53feae:

gcc --coverage main.c && ./a.out
libgcov profiling error:a-main.gcda:Error writing

gcc/ChangeLog:

	* gcov-io.cc (gcov_rewrite):  Clear the file error status.
2022-05-02 10:50:48 +02:00
Richard Biener
3a3eda000f tree-optimization/105437 - BB vect with extern defs of throwing stmts
We have to watch out for vectorized stmt insert locations if the
def from the last stmt alters control flow.  We constrain region
building so we know the def is outside of the current region
and thus we can insert at the region start point.

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

	PR tree-optimization/105437
	* tree-vect-slp.cc (vect_schedule_slp_node): Handle the
	case where last_stmt alters control flow.

	* g++.dg/vect/pr105437.cc: New testcase.
2022-05-02 10:43:40 +02:00
Richard Biener
82a344f206 Use CASE_CONVERT in a few more cases
This uses CASE_CONVERT more which eases eventual removal of NOP_EXPR.

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

gcc/cp/
	* constexpr.cc (fold_simple_1): Use CASE_CONVERT.
	* cp-gimplify.cc (cp_fold): Likewise.
	* pt.cc (tsubst_copy): Likewise.

gcc/
	* dojump.cc (do_jump): Use CASE_CONVERT.
	* tree-ssa-dom.cc (edge_info::derive_equivalences): Likewise.
2022-05-02 08:06:04 +02:00
Jakub Jelinek
4a0e89b10f system.h: Include <initializer_list> in system.h unconditionally
On Sun, May 01, 2022 at 07:06:53PM +0100, Jonathan Wakely wrote:
> > >> the reason is that "gcc/analyzer/region-model.cc” uses initializer_lists, and it seems that <initializer_list>
> > >> is not transitively included by any used headers for _LIBCPP_VERSION < 4000.  I fixed that locally by
> > >> adding initializer_list into system.h (and adding INCLUDE_INITIALIZER_LIST to the top of gcc/analyzer/region-model.cc)
> > >> - with that change those versions do bootstrap and test OK***
> > >
> > > From what I can see, with libstdc++ it works because <utility> which is
> > > included by system.h includes <initializer_list>.
> > > If I rename initializer_list in analyzer/region-model.ii to initializer_listx, I
> > > also get:
> > > ../../gcc/analyzer/region-model.cc: In function ‘void ana::selftest::test_binop_svalue_folding()’:
> > > ../../gcc/analyzer/region-model.cc:4966:48: error: deducing from brace-enclosed initializer list requires ‘#include <initializer_list>’
> > > 4508 |
> > >  +++ |+#include <initializer_list>
> > > 4509 | static void
> > > ......
> > > 4966 |     for (auto op : {BIT_IOR_EXPR, TRUTH_OR_EXPR})
> > >      |                                                ^
> > > ../../gcc/analyzer/region-model.cc:4978:49: error: deducing from brace-enclosed initializer list requires ‘#include <initializer_list>’
> > > 4978 |     for (auto op : {BIT_AND_EXPR, TRUTH_AND_EXPR})
> > >      |                                                 ^
> > >
> > > I think we have 2 options, one is do what you wrote above,
> > > INCLUDE_INITIALIZER_LIST defined before system.h to get #include <initializer_list>.
> > > The other option is just to include that unconditionally, it is a very small
> > > header.  For libstdc++ it will make no difference as it is included anyway
> > > and the header is really small there, libc++ includes <cstddef> which isn't
> > > normally included and system.h includes <stddef.h> instead.
> >
> > I’d say unconditionally would be OK. I suppose the chance that any host
> > C++ is good enough to build GCC as-is but fails to provide
> > <initializer_list> is zero?
> >
>
> Yes, definitely.
>
> > I’d be OK to do this change without a new RC even.

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

	* system.h: Include initializer_list.
2022-05-02 07:10:14 +02:00
Martin Liska
28cfea987e libgcov: add ATTRIBUTE_UNUSED for dump_string
Mitigates the following clang warning:
libgcc/libgcov-driver.c:416:1: warning: unused function 'dump_string' [-Wunused-function]

libgcc/ChangeLog:

	* libgcov-driver.c: Add ATTRIBUTE_UNUSED.
2022-05-02 06:46:05 +02:00
GCC Administrator
bee8b8602f Daily bump. 2022-05-02 00:16:24 +00:00
Segher Boessenkool
69daa9244a rs6000: "Y" is DS-form, not DQ-form
2022-05-01  Segher Boessenkool  <segher@kernel.crashing.org>

	* config/rs6000/constraints.md (Y constraint): Fix comment.
2022-05-01 23:11:49 +00:00
Aldy Hernandez
75bbc3da3e Denormalize VR_VARYING to VR_RANGE before passing it to set_range_info_raw.
We are ICEing in set_range_info_raw because value_range_kind cannot be
VR_VARYING, since SSA_NAME_RANGE_TYPE can only hold VR_RANGE /
VR_ANTI_RANGE.  Most of the time setting a VR_VARYING as a global
range makes no sense.  However, we can have a range spanning the
entire domain (VR_RANGE of [MIN,MAX] which is essentially a
VR_VARYING), if the nonzero bits are set.

This was working before because set_range_info_raw allows setting
VR_RANGE of [MIN, MAX].  However, when going through an irange, we
normalize this to a VR_VARYING, thus causing the ICE.  It's
interesting that other calls to set_range_info with an irange haven't
triggered this.

One solution would be to just ignore VR_VARYING and bail, since
set_range_info* is really an update of the current range semantic
wise.  After all, we keep the nonzero bits which provide additional
info.  But this would be a change in behavior, so not suitable until
after GCC 12 is released.  So in order to keep with current behavior
we can just denormalize the varying to VR_RANGE.

Tested on x86-64 Linux.

	    PR tree-optimization/105432

gcc/ChangeLog:

	* tree-ssanames.cc (set_range_info): Denormalize VR_VARYING to
	VR_RANGE before passing a piecewise range to set_range_info_raw.
2022-05-01 14:18:06 +02:00
GCC Administrator
95874f9509 Daily bump. 2022-05-01 00:16:18 +00:00
Patrick Palka
559bba46cd gengtype: remove "tree_exp" special attribute
The function comment for adjust_field_tree_exp says this attribute is
for handling expression trees whose operands may contain pointers to RTL
instead of to trees.  But ever since r0-59671-gac45df5dba5804, which
fixed/removed the last two tree codes for which this was possible
(WITH_CLEANUP_EXPR and GOTO_SUBROUTINE_EXPR), this special attribute is
mostly a no-op.

This patch removes it and instead just annotates struct tree_exp
with the "length" attribute directly.  Not sure it makes a difference,
but I use %h instead of %0 in the attribute string to be consistent with
the other uses of the "length" attribute within tree-core.h.

This changes the code generated for TS_EXP handling in gt-cp-tree.h from:

  case TS_EXP:
    gt_ggc_m_9tree_node ((*x).generic.exp.typed.type);
    switch ((int) (TREE_CODE ((tree) &(*x))))
      {
      default:
	{
	  size_t i3;
	  size_t l3 = (size_t)(TREE_OPERAND_LENGTH ((tree) &(*x)));
	  for (i3 = 0; i3 != l3; i3++) {
	    gt_ggc_m_9tree_node ((*x).generic.exp.operands[i3]);
	  }
	}
	break;
      }
    break;

to:

  case TS_EXP:
    {
      size_t l3 = (size_t)(TREE_OPERAND_LENGTH ((tree)&((*x).generic.exp)));
      gt_ggc_m_9tree_node ((*x).generic.exp.typed.type);
      {
	size_t i3;
	for (i3 = 0; i3 != l3; i3++) {
	  gt_ggc_m_9tree_node ((*x).generic.exp.operands[i3]);
	}
      }
    }

which seems equivalent and simpler.

gcc/ChangeLog:

	* gengtype.cc (adjust_field_tree_exp): Remove.
	(adjust_field_type): Don't handle the "tree_exp" special attribute.
	* tree-core.h (struct tree_exp): Remove "special" and "desc"
	attributes.  Add "length" attribute.
2022-04-30 10:56:49 -04:00
Jason Merrill
0aa277bf0b c-family: attribute ((aligned, mode)) [PR100545]
The problem here was that handle_mode_attribute clobbered the changes of any
previous attribute, only copying type qualifiers to the new type.  And
common_handle_aligned_attribute had previously set up the typedef, so when
we later called set_underlying_type it saw DECL_ORIGINAL_TYPE set and just
returned, even though handle_mode_attribute had messed up the TREE_TYPE.
So, let's fix handle_mode_attribute to copy attributes, alignment, and
typedefness to the new type.

	PR c/100545

gcc/c-family/ChangeLog:

	* c-attribs.cc (handle_mode_attribute): Copy attributes, aligned,
	and typedef.
	* c-common.cc (set_underlying_type): Add assert.

gcc/testsuite/ChangeLog:

	* c-c++-common/attr-mode-1.c: New test.
	* c-c++-common/attr-mode-2.c: New test.
2022-04-30 05:45:05 -04:00
GCC Administrator
66d1e440e1 Daily bump. 2022-04-30 00:16:27 +00:00
Jason Merrill
e9d2adc17d c++: reorganize friend template matching [PR91618]
The the different calling of check_explicit_specialization for class and
namespace scope friends bothered me, so this patch combines them.

	PR c++/91618
	PR c++/96604

gcc/cp/ChangeLog:

	* friend.cc (do_friend): Call check_explicit_specialization here.
	* decl.cc (grokdeclarator): Not here.
	* decl2.cc (check_classfn): Or here.
2022-04-29 17:25:03 -04:00
Jason Merrill
4259c229b4 c++: alias CTAD and member alias templates [PR104470]
In this testcase, we were trying to substitute into
variant<Foo<T>>::__accepted_type, but failed to look it up because
variant<Foo<T>> doesn't exist.  In other cases we already rewrite such
things into a dependent reference; we need to do that for alias templates as
well.

This caused some testsuite regressions on alias uses outside of deduction
guides, so I've made all of this rewriting conditional on a new tf_dguide
tsubst flag.

	PR c++/104470

gcc/cp/ChangeLog:

	* cp-tree.h (enum tsubst_flags): Add tf_dguide.
	* pt.cc (tsubst_aggr_type): Check it.
	(tsubst_baselink, tsubst_copy): Check it.
	(maybe_dependent_member_ref): Check it.
	(instantiate_alias_template): Handle it.
	(build_deduction_guide): Set it.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/explicit11.C: Second example also ill-formed.
	* g++.dg/cpp2a/class-deduction-alias12.C: New test.
2022-04-29 17:24:27 -04:00