Commit Graph

227222 Commits

Author SHA1 Message Date
Richard Biener
cdc4d4ada2 tree-optimization/124068 - fix missed AVX2 vectorization of shift
The following fixes a regression in AVX2 vectorization because on
trunk we are now correctly determine we can shorten a shift operation
but we never really bothered to check we can implement the
resulting operation.  With the patch we now check this.  For shifts
and rotates we have the choice between vector-vector and vector-scalar
operations which in the end depends on whether we perform SLP or not
and how the shift operand matches up.  The patch heuristically
assumes that constant or external shifts can be handled by vector-scalar
operations.

As we were not checking for target support was to allow recursive matching
other patterns, the following still errors on that side in case the
original operation was not supported by the target or it is binary and
the 2nd operand is a constant.  This helps avoiding regressions in
gcc.dg/vect/vect-over-widen-13.c and gcc.dg/vect/vect-div-bitmask-1.c
and gcc.target/aarch64/sve2/div-by-bitmask_1.c where the operation in
question is integer division.

	PR tree-optimization/124068
	* tree-vect-patterns.cc (target_has_vecop_for_code): Move
	earlier, add defaulted optab_subtype parameter.
	(vect_recog_over_widening_pattern): Check that the target
	supports the narrowed operation before committing to the
	pattern.

	* gcc.target/i386/vect-shift-1.c: New testcase.
2026-02-20 15:15:42 +01:00
Martin Jambor
e47f44074a ipa-cp: Also look at self-recursive ancestor jump functions (PR122856)
PR 122856 shows that when looking at self recursive calls with
self-feeding jump functions, we did consider pass-through functions
but not ancestor functions with zero offsets.  This then leads to the
fact that constants which were collected from IPA-CP lattices were not
among those collected from available edges, triggering a verification
assert.

This patch fixes that by also detecting self-feeding ancestor jump
functions.

gcc/ChangeLog:

2026-02-06  Martin Jambor  <mjambor@suse.cz>

	PR ipa/122856
	* ipa-cp.cc (self_recursive_pass_through_p): Test jump function type first.
	(self_recursive_ancestor_p): New function.
	(find_scalar_values_for_callers_subset): Test also for self-recursive
	ancestor jump functions.
	(push_agg_values_for_index_from_edge): Likewise.

gcc/testsuite/ChangeLog:

2026-02-06  Martin Jambor  <mjambor@suse.cz>

	PR ipa/122856
	* g++.dg/ipa/pr122856.C: New test.
2026-02-20 14:47:26 +01:00
Jonathan Wakely
8d8725bedd libstdc++: Fix testsuite breakage in r16-7593-g39edc2aea24f9a
Fix my broken r16-7593-g39edc2aea24f9a commit which was an incomplete
version of what I originally tested.

libstdc++-v3/ChangeLog:

	* testsuite/lib/libstdc++.exp (v3-minimum-std): Remove second
	and third args in favour of using globals.
2026-02-20 09:20:04 +00:00
Andrew Pinski
36a5d12cca fold/dse: Don't simplify/remove noreturn functions [PR121103]
This fixes 2 related bugs. The user marks memmove as noreturn
so when we simplify the memmove to a memory load/store there
is no longer a statement that can alter the CFG and things go
down hill.
The same is true for removing the call in DSE.
So the fix is not to simplify/take into account the call from
gimple-fold and DSE.

changes since v1:
 * v2: Use gimple_call_ctrl_altering_p instead of flags.

Bootstrapped and tested on x86_64-linux-gnu.

	PR tree-optimization/121103

gcc/ChangeLog:

	* gimple-fold.cc (gimple_fold_call): Don't simplify
	noreturn functions.
	* tree-ssa-dse.cc (dse_optimize_stmt): Don't handle
	calls to noreturn functions.

gcc/testsuite/ChangeLog:

	* gcc.dg/torture/pr121103-1.c: New test.

Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2026-02-20 00:45:56 -08:00
Robert Dubner
1cbfc71e53 cobol: Update and expand DejaGNU test suite.
The cobol.dg/group2 tests are extracted from a list of autotest programs
that are not maintained in the gnu GCC repository.  They can be see at
/https://gitlab.cobolworx.com/COBOLworx/gcc-cobol.

Many of these tests have been refined in order to make them work
properly when the exec-charset is ASCII, EBCDIC, or UTF16.  The changes
to existing tests seen here largely reflect those changes.

The new files shown below are newly extracted from that same list of
tests.

gcc/testsuite/ChangeLog:

	* cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob: Updated.
	* cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out: Updated.
	* cobol.dg/group2/ALPHABETIC-LOWER_test.cob: Updated.
	* cobol.dg/group2/ALPHABETIC-UPPER_test.cob: Updated.
	* cobol.dg/group2/ALPHABETIC_test.cob: Updated.
	* cobol.dg/group2/Context_sensitive_words__1_.cob: Updated.
	* cobol.dg/group2/DEBUG_Line.cob: Updated.
	* cobol.dg/group2/DISPLAY__Sign_ASCII.cob: Updated.
	* cobol.dg/group2/DISPLAY__Sign_ASCII.out: Updated.
	* cobol.dg/group2/DISPLAY__Sign_ASCII__2_.cob: Updated.
	* cobol.dg/group2/DISPLAY__Sign_ASCII__2_.out: Updated.
	* cobol.dg/group2/EC-BOUND-REF-MOD_checking_process_termination.cob: Updated.
	* cobol.dg/group2/FUNCTION_BIGGER-POINTER.cob: Updated.
	* cobol.dg/group2/FUNCTION_BYTE-LENGTH.cob: Updated.
	* cobol.dg/group2/FUNCTION_BYTE-LENGTH.out: Updated.
	* cobol.dg/group2/FUNCTION_CHAR.cob: Updated.
	* cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob: Updated.
	* cobol.dg/group2/FUNCTION_HEX-OF.cob: Updated.
	* cobol.dg/group2/FUNCTION_HEX-OF.out: Updated.
	* cobol.dg/group2/FUNCTION_ORD.cob: Updated.
	* cobol.dg/group2/FUNCTION_ORD.out: Updated.
	* cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__2_.cob: Updated.
	* cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_additional.cob: Updated.
	* cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob: Updated.
	* cobol.dg/group2/Hexadecimal_literal.cob: Updated.
	* cobol.dg/group2/INSPECT_CONVERTING_TO_figurative_constants.cob: Updated.
	* cobol.dg/group2/INSPECT_CONVERTING_TO_figurative_constants.out: Updated.
	* cobol.dg/group2/LENGTH_OF_omnibus.cob: Updated.
	* cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob: Updated.
	* cobol.dg/group2/PACKED-DECIMAL_dump.cob: Updated.
	* cobol.dg/group2/PACKED-DECIMAL_dump.out: Updated.
	* cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob: Updated.
	* cobol.dg/group2/Refmod_sources_are_figurative_constants.cob: Updated.
	* cobol.dg/group2/Refmod_sources_are_figurative_constants.out: Updated.
	* cobol.dg/group2/debugging_lines__not_active_.cob: Updated.
	* cobol.dg/group2/floating-point_SUBTRACT_FORMAT_2.out: Updated.
	* cobol.dg/group2/floating-point_literals.out: Updated.
	* cobol.dg/group2/37-digit_Initialization_of_fundamental_types.cob: New test.
	* cobol.dg/group2/37-digit_Initialization_of_fundamental_types.out: New test.
	* cobol.dg/group2/ACCEPT_FROM_ENVIRONMENT-NAME.cob: New test.
	* cobol.dg/group2/ACCEPT_FROM_ENVIRONMENT-NAME.out: New test.
	* cobol.dg/group2/ACCEPT_foo_FROM_COMMAND-LINE_1_.cob: New test.
	* cobol.dg/group2/ADD_1_2_TO_3_GIVING_B.cob: New test.
	* cobol.dg/group2/ALLOCATE_Rules_6_-_9._Without_OPTION_INITIALIZE_Without_-fdefaultbyte___ASCII_.cob:
	New test.
	* cobol.dg/group2/ALLOCATE_Rules_6_-_9._Without_OPTION_INITIALIZE_Without_-fdefaultbyte___ASCII_.out:
	New test.
	* cobol.dg/group2/ALLOCATE_Rules_6_-_9._Without_OPTION_INITIALIZE_Without_-fdefaultbyte___EBCDIC_.cob:
	New test.
	* cobol.dg/group2/ALLOCATE_Rules_6_-_9._Without_OPTION_INITIALIZE_Without_-fdefaultbyte___EBCDIC_.out:
	New test.
	* cobol.dg/group2/ALLOCATE_Rules_6_-_9_Without_OPTION_INITIALIZE_With_-fdefaultbyte___UTF16_.cob:
	New test.
	* cobol.dg/group2/ALLOCATE_Rules_6_-_9_Without_OPTION_INITIALIZE_With_-fdefaultbyte___UTF16_.out:
	New test.
	* cobol.dg/group2/ANY_LENGTH__7_.cob: New test.
	* cobol.dg/group2/ANY_LENGTH__7_.out: New test.
	* cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.cob: New test.
	* cobol.dg/group2/Assorted_SPECIAL-NAMES_CLASS.out: New test.
	* cobol.dg/group2/BINARY_and_COMP-5.cob: New test.
	* cobol.dg/group2/BINARY_and_COMP-5.out: New test.
	* cobol.dg/group2/CDF2_-_DEFINE_FOO_AS_literal-1.cob: New test.
	* cobol.dg/group2/CDF2_-_DEFINE_FOO_AS_literal-1.out: New test.
	* cobol.dg/group2/CDF2_Trouble_with___IF__1_.cob: New test.
	* cobol.dg/group2/CDF2_Trouble_with___IF__2_.cob: New test.
	* cobol.dg/group2/CDF2_Trouble_with___IF__2_.out: New test.
	* cobol.dg/group2/CDF4_.cob: New test.
	* cobol.dg/group2/CDF4_.out: New test.
	* cobol.dg/group2/CDF_Feature_.cob: New test.
	* cobol.dg/group2/CDF_Feature_.out: New test.
	* cobol.dg/group2/CDF_IS_NOT_DEFINED.cob: New test.
	* cobol.dg/group2/CDF_IS_NOT_DEFINED.out: New test.
	* cobol.dg/group2/CDF__1__IF____text_.cob: New test.
	* cobol.dg/group2/CDF__1__IF____text_.out: New test.
	* cobol.dg/group2/CDF__2__IF____number_.cob: New test.
	* cobol.dg/group2/CDF__2__IF____number_.out: New test.
	* cobol.dg/group2/CDF__3__ALL_NUMERIC_COMPARISONS.cob: New test.
	* cobol.dg/group2/CDF__3__ALL_NUMERIC_COMPARISONS.out: New test.
	* cobol.dg/group2/COMP-5_Sanity_Check_.cob: New test.
	* cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_ASCII_EBCDIC.cob: New test.
	* cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_ASCII_EBCDIC.out: New test.
	* cobol.dg/group2/Complex_INITIALIZE_with_nested_tables__1_.cob: New test.
	* cobol.dg/group2/Complex_INITIALIZE_with_nested_tables__1_.out: New test.
	* cobol.dg/group2/Complex_INITIALIZE_with_nested_tables__2_.cob: New test.
	* cobol.dg/group2/Complex_INITIALIZE_with_nested_tables__2_.out: New test.
	* cobol.dg/group2/Default_Arithmetic__1_.cob: New test.
	* cobol.dg/group2/Default_Arithmetic__1_.out: New test.
	* cobol.dg/group2/ENTRY_statement.cob: New test.
	* cobol.dg/group2/ENTRY_statement.out: New test.
	* cobol.dg/group2/EVALUATE__A__OR__a_.cob: New test.
	* cobol.dg/group2/EVALUATE__A__OR__a_.out: New test.
	* cobol.dg/group2/EVALUATE_condition__1_.cob: New test.
	* cobol.dg/group2/EVALUATE_condition__1_.out: New test.
	* cobol.dg/group2/FIND-STRING__forward_.cob: New test.
	* cobol.dg/group2/FIND-STRING__forward_.out: New test.
	* cobol.dg/group2/FIND-STRING__reverse_.cob: New test.
	* cobol.dg/group2/FIND-STRING__reverse_.out: New test.
	* cobol.dg/group2/FIXED_FORMAT_data_in_cols_73_and_beyond.cob: New test.
	* cobol.dg/group2/FIXED_FORMAT_data_in_cols_73_and_beyond.out: New test.
	* cobol.dg/group2/FIXED_FORMAT_data_misplaced_asterisk.cob: New test.
	* cobol.dg/group2/FUNCTION_CONVERT.cob: New test.
	* cobol.dg/group2/FUNCTION_CONVERT.out: New test.
	* cobol.dg/group2/Fundamental_INSPECT_BACKWARD_REPLACING.cob: New test.
	* cobol.dg/group2/Fundamental_INSPECT_BACKWARD_REPLACING.out: New test.
	* cobol.dg/group2/Fundamental_INSPECT_BACKWARD_TALLYING.cob: New test.
	* cobol.dg/group2/Fundamental_INSPECT_BACKWARD_TALLYING.out: New test.
	* cobol.dg/group2/Fundamental_INSPECT_REPLACING.cob: New test.
	* cobol.dg/group2/Fundamental_INSPECT_REPLACING.out: New test.
	* cobol.dg/group2/Fundamental_INSPECT_TALLYING.cob: New test.
	* cobol.dg/group2/Fundamental_INSPECT_TALLYING.out: New test.
	* cobol.dg/group2/INITIALIZE_OCCURS_with_SIGN_LEADING___TRAILING.cob: New test.
	* cobol.dg/group2/INITIALIZE_OCCURS_with_SIGN_LEADING___TRAILING.out: New test.
	* cobol.dg/group2/INITIALIZE_OCCURS_with_numeric_edited.cob: New test.
	* cobol.dg/group2/INITIALIZE_complex_group__1_.cob: New test.
	* cobol.dg/group2/INITIALIZE_complex_group__2_.cob: New test.
	* cobol.dg/group2/INITIALIZE_complex_group__2_.out: New test.
	* cobol.dg/group2/INITIALIZE_group_entry_with_OCCURS.cob: New test.
	* cobol.dg/group2/INITIALIZE_of_EXTERNAL_data_items.cob: New test.
	* cobol.dg/group2/INITIALIZE_with_-defaultbyte__ASCII_.cob: New test.
	* cobol.dg/group2/INITIALIZE_with_-defaultbyte__ASCII_.out: New test.
	* cobol.dg/group2/INITIALIZE_with_-defaultbyte__EBCDIC_.cob: New test.
	* cobol.dg/group2/INITIALIZE_with_-defaultbyte__EBCDIC_.out: New test.
	* cobol.dg/group2/INITIALIZE_with_FILLER.cob: New test.
	* cobol.dg/group2/INITIALIZE_with_REDEFINES.cob: New test.
	* cobol.dg/group2/INITIALIZE_with_reference_modification.cob: New test.
	* cobol.dg/group2/Intrinsic_Function_ABS.cob: New test.
	* cobol.dg/group2/Intrinsic_Function_ACOS.cob: New test.
	* cobol.dg/group2/Intrinsic_Function_ANNUITY.cob: New test.
	* cobol.dg/group2/Intrinsic_Function_DATE-YYYYMMDD.cob: New test.
	* cobol.dg/group2/Intrinsic_Function_NUMVAL.cob: New test.
	* cobol.dg/group2/Intrinsic_Function_NUMVAL.out: New test.
	* cobol.dg/group2/Long_Division.cob: New test.
	* cobol.dg/group2/Long_Division.out: New test.
	* cobol.dg/group2/MOVE_X_000203_.cob: New test.
	* cobol.dg/group2/MOVE_X_000203_.out: New test.
	* cobol.dg/group2/MOVE_to_JUSTIFIED_items.cob: New test.
	* cobol.dg/group2/MOVE_to_JUSTIFIED_items.out: New test.
	* cobol.dg/group2/N-Queens_algorithm.cob: New test.
	* cobol.dg/group2/N-Queens_algorithm.out: New test.
	* cobol.dg/group2/Numeric_operations__6_.cob: New test.
	* cobol.dg/group2/Numeric_operations__6_.out: New test.
	* cobol.dg/group2/Preserve_collation_past_a_CALL.cob: New test.
	* cobol.dg/group2/Preserve_collation_past_a_CALL.out: New test.
	* cobol.dg/group2/RETURN-CODE_moving.cob: New test.
	* cobol.dg/group2/RETURN-CODE_nested.cob: New test.
	* cobol.dg/group2/SORT__table_sort__2___ASCII_.cob: New test.
	* cobol.dg/group2/SORT__table_sort__2___ASCII_.out: New test.
	* cobol.dg/group2/SORT__table_sort__2___EBCDIC_.cob: New test.
	* cobol.dg/group2/SORT__table_sort__2___EBCDIC_.out: New test.
	* cobol.dg/group2/Simple_DEBUG-ITEM.cob: New test.
	* cobol.dg/group2/Simple_DEBUG-ITEM.out: New test.
	* cobol.dg/group2/Simple_ENVIRONMENT-NAME_with_exception.cob: New test.
	* cobol.dg/group2/Simple_ENVIRONMENT-NAME_with_exception.out: New test.
	* cobol.dg/group2/UNSTRING_with_refmods.cob: New test.
	* cobol.dg/group2/UNSTRING_with_refmods.out: New test.
	* cobol.dg/group2/command-line.cob: New test.
	* cobol.dg/group2/command-line.out: New test.
	* cobol.dg/group2/floating-point_FORMAT_1.cob: New test.
	* cobol.dg/group2/floating-point_FORMAT_1.out: New test.
	* cobol.dg/group2/floating-point_FORMAT_2.cob: New test.
	* cobol.dg/group2/floating-point_FORMAT_2.out: New test.
	* cobol.dg/group2/procedure_division_using_by.cob: New test.
	* cobol.dg/group2/repository.cob: New test.
	* cobol.dg/group2/skipping_at_the_top.cob: New test.
	* cobol.dg/group2/source-computer_object-computer_repository__2_.cob: New test.
2026-02-19 21:58:56 -05:00
GCC Administrator
85af11f7bf Daily bump. 2026-02-20 00:16:32 +00:00
Joseph Myers
fe88af4258 Regenerate .pot files
gcc/po/
	* gcc.pot: Regenerate.

libcpp/po/
	* cpplib.pot: Regenerate.
2026-02-19 21:07:55 +00:00
Tomasz Kamiński
918cf3a50d libstdc++: Rework constant_wrapper assignments and increments
This implements LWG4383 with LWG4500, LWG4523 follow-up corrections.

This patch changes the constant_wrapper assignments operator (including
compounds), increment and decrement to apply directly to value. In
consequence the operators are only supported for types, for which above
operations can be applied on const value.

libstdc++-v3/ChangeLog:

	* include/std/type_traits (_CWOperators::operator++)
	(_CWOperators::operator--, _CWOperators::operator+=)
	(_CWOperators::operator-=, _CWOperators::operator*=)
	(_CWOperators::operator/=, _CWOperators::operator%=)
	(_CWOperators::operator&=, _CWOperators::operator|=)
	(_CWOperators::operator^=, _CWOperators::operator<<=)
	(_CWOperators::operator>>=, constant_wrapper::operator=):
	Adjust definitions to apply operator on value.
	* testsuite/20_util/constant_wrapper/generic.cc:
	Remove test_pseudo_mutator.
	* testsuite/20_util/constant_wrapper/instantiate.cc:
	Test that operators are not provided if wrapped type
	do not support them, or provide mutable operators.
2026-02-19 17:10:19 +01:00
Jonathan Wakely
39edc2aea2 libstdc++: Use global variables for default/max std in libstdc++.exp
This simplifies the v3-minimum-std procedure slightly, but the main
advantage is making v3_modules_std depend on v3_max_std so that we don't
have to update two separate variables when new effective targets such as
c++29 get added.

libstdc++-v3/ChangeLog:

	* testsuite/lib/libstdc++.exp (v3_default_std, v3_max_std): New
	global variables.
	(v3-minimum-std): Use globals instead of arguments.
	(v3_modules_std): Define in terms of $v3_max_std.
	(v3-dg-runtest): Use globals instead of local variables. Adjust
	call to v3-min-std.

Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
2026-02-19 14:50:58 +00:00
Jonathan Wakely
b8b518b942 libstdc++: Replace uses of "c++2a" effective target with "c++20"
libstdc++-v3/ChangeLog:

	* testsuite/lib/libstdc++.exp (v3-minimum-std): Remove special
	case for c++2a and TODO comment.
	* testsuite/20_util/is_pod/requirements/explicit_instantiation.cc:
	Replace c++2a effective target with c++20.
	* testsuite/20_util/is_pod/requirements/typedefs.cc: Likewise.
	* testsuite/20_util/is_pod/value.cc: Likewise.
	* testsuite/20_util/reference_wrapper/result_type.cc: Likewise.
	* testsuite/20_util/reference_wrapper/typedefs-2.cc: Likewise.
	* testsuite/20_util/reference_wrapper/typedefs-3.cc: Likewise.
	* testsuite/20_util/result_of/sfinae_friendly_1.cc: Likewise.
	* testsuite/20_util/tuple/78939.cc: Likewise.
	* testsuite/20_util/uses_allocator/69293_neg.cc: Likewise.
	* testsuite/20_util/uses_allocator/cons_neg.cc: Likewise.
	* testsuite/20_util/variable_templates_for_traits.cc: Likewise.
	* testsuite/experimental/type_traits/value.cc: Likewise.
	* testsuite/ext/malloc_allocator/variadic_construct.cc:
	Likewise.
	* testsuite/ext/new_allocator/variadic_construct.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/chrono.cc: Likewise.
	* testsuite/libstdc++-prettyprinters/cxx20.cc: Likewise.
	* testsuite/std/ranges/iota/size.cc: Likewise.
	* testsuite/tr1/3_function_objects/result_of.cc: Likewise.

Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
2026-02-19 14:50:57 +00:00
Jeff Law
40186d1e93 Fix typo in last change.
gcc/testuite
	* gcc.dg/torture/pr124108.c: Fix typo.
2026-02-19 07:09:27 -07:00
jlaw
1b8bbe4a3d [PR tree-optimization/124108] Verify type_has_mode_precision before reassociating expressions
As Andrew noted in pr124108, the two patterns that reassociate expressions to
expose a rotate hidden by an embedded XOR need to check
type_has_mode_precision_p to avoid an ICE during gimple->RTL expansion.

This adds the necessary checks.  Bootstrapped and regression tested on x86.

	PR tree-optimization/124108
gcc/
	* match.pd (reassociating XOR to expose rotations): Check
	type_has_mode_precision_p before simplifying.

gcc/testsuite/
	* gcc.dg/torture/pr124108.c: New test.
2026-02-19 07:04:27 -07:00
Marek Polacek
dfd55005ea c++/reflection: introduce METAFN_KIND_ARG
This is mostly cosmetic.  It had to be a macro because a constexpr fn
would need a metafn_info* parameter but that struct comes only after
the %{ %} section in the gperf file, and we can only have one such
section.

gcc/cp/ChangeLog:

	* metafns.gperf: Define METAFN_KIND_ARG.
	* metafns.h: Regenerate.
	* reflect.cc (process_metafunction): Use METAFN_KIND_ARG.

Reviewed-by: Jason Merrill <jason@redhat.com>
2026-02-19 08:36:31 -05:00
Thomas Schwinge
8eb03ad712 Further fix up effective-target 'no_fsanitize_address' check
That got added with commit r11-4762-g65e82636bcdb72a878c2e53943e71b15dd9fb22d
"PR target/96307: Fix KASAN option checking", and already fixed up in
commit r12-3723-g6e6bf4cd21af39a7923bae007517ab43a4c3b36a
"Fix no_fsanitize_address effective target", but I just realized that on, for
example, standard x86_64-pc-linux-gnu, I'm unexpectedly seeing test cases
UNSUPPORTED, due to the effective-target 'no_fsanitize_address' check failing
with:

    Executing on host: [...]/build-gcc/gcc/xgcc -B[...]/build-gcc/gcc/  fsanitize_address3454287.c    -fdiagnostics-plain-output  -fsanitize=address -Wno-complain-wrong-lang  -lm  -o fsanitize_address3454287.exe    (timeout = 300)
    spawn [...]
    /usr/bin/ld: cannot find libasan_preinit.o: No such file or directory
    /usr/bin/ld: cannot find -lasan: No such file or directory
    collect2: error: ld returned 1 exit status
    compiler exited with status 1

Notice no setup for paths to build-tree libsanitizer.  Need to use a proper
'asan.exp' file with 'asan_init'/'asan_finish' calls to set up linker paths,
etc. -- however, all test cases using effective-target 'no_fsanitize_address'
are compilation test cases, so let's just reflect that in the effective-target
'no_fsanitize_address' check.  With that, I then get the desired:

    -UNSUPPORTED: gcc.dg/pr91441.c
    +PASS: gcc.dg/pr91441.c (test for excess errors)

    -UNSUPPORTED: gcc.dg/pr96260.c
    +PASS: gcc.dg/pr96260.c (test for excess errors)

    -UNSUPPORTED: gcc.dg/pr96307.c
    +PASS: gcc.dg/pr96307.c (test for excess errors)

    -UNSUPPORTED: gcc.dg/uninit-pr93100.c
    +PASS: gcc.dg/uninit-pr93100.c  (test for warnings, line 16)
    +PASS: gcc.dg/uninit-pr93100.c  (test for warnings, line 26)
    +PASS: gcc.dg/uninit-pr93100.c  (test for warnings, line 38)
    +PASS: gcc.dg/uninit-pr93100.c  (test for warnings, line 48)
    +PASS: gcc.dg/uninit-pr93100.c  (test for warnings, line 61)
    +PASS: gcc.dg/uninit-pr93100.c  (test for warnings, line 71)
    +PASS: gcc.dg/uninit-pr93100.c (test for excess errors)

    -UNSUPPORTED: g++.dg/warn/uninit-pr93100.C  -std=gnu++20
    +PASS: g++.dg/warn/uninit-pr93100.C  -std=gnu++20  (test for warnings, line 13)
    +PASS: g++.dg/warn/uninit-pr93100.C  -std=gnu++20  (test for warnings, line 20)
    +PASS: g++.dg/warn/uninit-pr93100.C  -std=gnu++20  (test for warnings, line 31)
    +PASS: g++.dg/warn/uninit-pr93100.C  -std=gnu++20  (test for warnings, line 38)
    +PASS: g++.dg/warn/uninit-pr93100.C  -std=gnu++20  (test for warnings, line 49)
    +PASS: g++.dg/warn/uninit-pr93100.C  -std=gnu++20  (test for warnings, line 56)
    +PASS: g++.dg/warn/uninit-pr93100.C  -std=gnu++20 (test for excess errors)
    [Etc.]

    -UNSUPPORTED: g++.dg/warn/uninit-pr95825-1.C  -std=gnu++20
    +PASS: g++.dg/warn/uninit-pr95825-1.C  -std=gnu++20  (test for bogus messages, line 17)
    +PASS: g++.dg/warn/uninit-pr95825-1.C  -std=gnu++20 (test for excess errors)
    [Etc.]

    -UNSUPPORTED: gnat.dg/asan1.adb
    +PASS: gnat.dg/asan1.adb (test for excess errors)

..., while these remain UNSUPPORTED for targets that don't support
'-fsanitize=address'.

	gcc/testsuite/
	* lib/target-supports.exp
	(check_effective_target_no_fsanitize_address): Check 'assembly'
	instead of 'executable'.
2026-02-19 12:53:39 +01:00
Jakub Jelinek
b81b21e6e4 c++: Clarify convert_nontype_argument return value in function comment
If tf_error is not set in COMPLAIN, whether NULL_TREE or error_mark_node
is returned doesn't matter.

2026-02-19  Jakub Jelinek  <jakub@redhat.com>

	* pt.cc (convert_nontype_argument): Clarify return value in function
	comment.
2026-02-19 12:32:24 +01:00
Thomas Schwinge
6ab26dfe7a cprop_hardreg: Use delete_insn_and_edges instead of delete_insn: gcc.dg/pr116053-1.c does 'dg-require-effective-target int128' [PR116053]
Small fix-up for commit r16-7574-g6f777c34c9f221a50d0fc22b70b1cf7dd1fd9101
"cprop_hardreg: Use delete_insn_and_edges instead of delete_insn [PR116053]",
where for certain GCC targets, we see:

    [...]gcc/testsuite/gcc.dg/pr116053-1.c:8:6: error: expected declaration specifiers or '...' before '__int128'

	PR rtl-optimization/116053
	gcc/testsuite/
	* gcc.dg/pr116053-1.c: 'dg-require-effective-target int128'.
2026-02-19 12:17:51 +01:00
Avinash Jayakar
120d00d652 vect: Fix target conditions in pr104116 test cases [PR123195]
A missing space in the target conditions of the test cases for PR104116,
caused the tests to run on platforms where it was not intended to.

This patch adds those spaces to the conditions.

2026-02-19  Avinash Jayakar  <avinashd@linux.ibm.com>

gcc/testsuite/ChangeLog:
	PR target/123195
	* gcc.dg/vect/pr104116-ceil-div-2.c: Add space.
	* gcc.dg/vect/pr104116-ceil-div-pow2.c: Likewise.
	* gcc.dg/vect/pr104116-ceil-div.c: Likewise.
	* gcc.dg/vect/pr104116-ceil-mod-2.c: Likewise.
	* gcc.dg/vect/pr104116-ceil-mod-pow2.c: Likewise.
	* gcc.dg/vect/pr104116-ceil-mod.c: Likewise.
	* gcc.dg/vect/pr104116-ceil-udiv-2.c: Likewise.
	* gcc.dg/vect/pr104116-ceil-udiv-pow2.c: Likewise.
	* gcc.dg/vect/pr104116-ceil-udiv.c: Likewise.
	* gcc.dg/vect/pr104116-ceil-umod-2.c: Likewise.
	* gcc.dg/vect/pr104116-ceil-umod-pow2.c: Likewise.
	* gcc.dg/vect/pr104116-ceil-umod.c: Likewise.
	* gcc.dg/vect/pr104116-floor-div-2.c: Likewise.
	* gcc.dg/vect/pr104116-floor-div-pow2.c: Likewise.
	* gcc.dg/vect/pr104116-floor-div.c: Likewise.
	* gcc.dg/vect/pr104116-floor-mod-2.c: Likewise.
	* gcc.dg/vect/pr104116-floor-mod-pow2.c: Likewise.
	* gcc.dg/vect/pr104116-floor-mod.c: Likewise.
	* gcc.dg/vect/pr104116-round-div-2.c: Likewise.
	* gcc.dg/vect/pr104116-round-div-pow2.c: Likewise.
	* gcc.dg/vect/pr104116-round-div.c: Likewise.
	* gcc.dg/vect/pr104116-round-mod-2.c: Likewise.
	* gcc.dg/vect/pr104116-round-mod-pow2.c: Likewise.
	* gcc.dg/vect/pr104116-round-mod.c: Likewise.
	* gcc.dg/vect/pr104116-round-udiv-2.c: Likewise.
	* gcc.dg/vect/pr104116-round-udiv-pow2.c: Likewise.
	* gcc.dg/vect/pr104116-round-udiv.c: Likewise.
	* gcc.dg/vect/pr104116-round-umod-2.c: Likewise.
	* gcc.dg/vect/pr104116-round-umod-pow2.c: Likewise.
	* gcc.dg/vect/pr104116-round-umod.c: Likewise.
2026-02-19 14:03:42 +05:30
Filip Kastl
454c829515 contrib/filter-clang-warnings.py: Ignore all .texi
Compiling GCC with Clang doesn't only yield Clang's warnings but also
warnings about .texi documentation files.  In filter-clang-warnings.py
we blacklisted some .texi files.  Blacklist all of them.

contrib/ChangeLog:

	* filter-clang-warnings.py: Filter out all warnings comming from
	files with ".texi" in their name.

Signed-off-by: Filip Kastl <fkastl@suse.cz>
2026-02-19 09:07:03 +01:00
Jakub Jelinek
8e76945889 i386: Use IN_RANGE in avx_vpermilp_parallel
On Wed, Feb 18, 2026 at 10:00:38AM +0100, Uros Bizjak wrote:
> BTW: Maybe IN_RANGE should be used more in this function? IMO,
> "!IN_RANGE (ipar[i], 2,3)" is easier to comprehend.

This patch does that.

2026-02-19  Jakub Jelinek  <jakub@redhat.com>

	* config/i386/i386.cc (avx_vpermilp_parallel): Use IN_RANGE
	macro.
2026-02-19 07:56:59 +01:00
Jakub Jelinek
cb617bedc8 c++: Fix up convert_nontype_argument [PR124070]
Some of the following testcases are incorrectly accepted.
The problem is in convert_nontype_argument.  It just does
maybe_constant_value earlier.  Later on for integral/enum/floating
point args it uses cxx_constant_value for complain & tf_error if
not val_dep_p and expr is not a simple constant, similarly for
class type it calls
      /* Replace the argument with a reference to the corresponding template
         parameter object.  */
      if (!val_dep_p)
        expr = create_template_parm_object (expr, complain);
      if (expr == error_mark_node)
        return NULL_TREE;
etc.  But for NULLPTR_TYPE_P and REFLECTION_TYPE_P cases (I bet
Marek has based the latter on the former) it only verifies the type
and not the actual expression.
I think we need to do that, because if maybe_constant_value fails, it
just returns the passed in argument and if nothing checks it, we accept
whatever was there (and sometimes ICE later).

The following patch implements that.

2026-02-19  Jakub Jelinek  <jakub@redhat.com>

	PR c++/124070
	* pt.cc (convert_nontype_argument): For NULLPTR_TYPE_P case
	if expr is not integer_zerop and is not val_dep_p try harder,
	for complain & tf_error use cxx_constant_value and return NULL_TREE
	for error_mark_node, without tf_error return NULL_TREE.  Similarly
	for REFLECTION_TYPE_P case if expr is not REFLECT_EXPR and is not
	val_dep_p try harder like for NULLPTR_TYPE_P.

	* g++.dg/cpp26/pr124070.C: New test.
	* g++.dg/reflect/parameters_of4.C: Expect different diagnostics.
	* g++.dg/reflect/define_aggregate7.C: New test.
	* g++.dg/reflect/define_aggregate8.C: New test.
2026-02-19 07:55:38 +01:00
Jakub Jelinek
3cd8377957 ++: Implement proposed CWG 3123 resolution
On Wed, Feb 11, 2026 at 02:56:36AM +0200, Ville Voutilainen wrote:
> > Anyway, with the hope that CWG 3123 is voted in, this patch adds
> > a testcase for it.
>
> This was discussed some moments ago on the Core reflector, and it was
> pointed out that it's quite
> intentional in the proposed resolution of CWG 3123 that there's no
> overload resolution used for
> determining whether iteration is the chosen approach instead of
> destructuring, just a viability check.
> As far as I understand the code, finish_call_expr indeed does overload
> resolution.
>
> This additional testcase was provided: https://godbolt.org/z/o39hEs876
>
> In it, overload resolution fails due to an ambiguity, for iteration,
> and then destructuring is used instead. But the intent
> of the proposed resolution is that the semantics are (more) similar to
> what range-for uses, so the intent
> is that for iteration, only the presence of viable overloads is
> checked, and then iteration is committed to,
> and then the testcase should be rejected because the actual attempt to
> expand with iteration fails due to the aforementioned
> ambiguity.
>
> None of that affects this patch as such, but I think it's worth
> pointing out where this should eventually be going.

Ah, you're right.

We don't have any API to return whether there are any viable candidates.
I was looking into adding one, but realized that finish_call_expr
does way too many things before calling build_new_function_call
which does further stuff that
would also need to be duplicated before we can reach to splice_viable.

So, instead of duplicating all of that I've added tf_any_viable (using
an unused bit in tsubst_flags_t), which is then handled in
finish_call_expr, perform_overload_resolution and build_new_function_call
functions to return void_node instead of actually building any calls
if there are any viable candidates (and keep returning error_mark_node
if something earlier fails or there are no viable candidates)
and filtered out of complain flags for calls where it shouldn't be propagated.

The new testcase adds some extra new tests, e.g. struct with begin and
end non-static data members (my reading is that in that case E.begin
and E.end has been found, so we commit to iterating expansion stmt and
fail unless e.g. they whould have class type and usable operator ()).

2026-02-19  Jakub Jelinek  <jakub@redhat.com>

	* cp-tree.h: Implement proposed CWG 3123 resolution.
	(enum tsubst_flags): Add tf_any_viable enumerator.  Indent all
	comments the same.
	* call.cc (perform_overload_resolution): For tf_any_viable
	return the first candidate instead of doing tourney.  Filter out
	tf_any_viable flag from add_candidates call.
	(build_new_function_call): For tf_any_viable return void_node
	if any viable candidates are found rather than build_over_call.
	Filter out tf_any_viable flag from resolve_args call.
	* parser.cc (cp_perform_range_for_lookup): Pass COMPLAIN to
	cp_range_for_member_function calls.  If not tf_error, for
	successful ADL if one or both of finish_call_expr calls returns
	error_mark_node, retry with tf_any_viable.  If both begin and
	end expressions have a viable candidate or when member lookup
	found both begin and end members, return NULL_TREE rather than
	error_mark_node even when both *begin and *end are error_mark_node.
	(cp_range_for_member_function): Add COMPLAIN argument, pass it
	down to finish_class_member_access_expr and finish_call_expr.
	* pt.cc (finish_expansion_stmt): Use esk_iterating if
	cp_perform_range_for_lookup returned something other than
	error_mark_node or if both begin_expr and end_expr are not
	error_mark_node.
	* semantics.cc (finish_call_expr): Filter out tf_any_viable
	flag from all uses of complain except one build_new_function_call
	call for the is_overloaded_fn case.

	* g++.dg/cpp26/expansion-stmt29.C: New test.
	* g++.dg/cpp26/expansion-stmt30.C: New test.
2026-02-19 07:51:50 +01:00
Robert Dubner
e7356e34b2 cobol: Improve generated code for fast_add and fast_subtract.
These changes improve the efficiency of generated code by recognizing
more instances where operations are on little-endian binary COBOL
variables and then avoiding calls to libgcobol.  The generated code
also reduces the number of intermediate variables created for that
little-endian arithmetic.

gcc/cobol/ChangeLog:

	* genapi.cc (tree_type_from_field_type): Move static code.
	(compare_binary_binary): Identify little-endian compares.
	(psa_FldLiteralN): Eliminate obsolete development code; make the
	initialized variables TREE_CONSTANT.
	(parser_symbol_add): Adjust for modified FldLiteralN.
	* genmath.cc (all_results_binary): Renamed. Modified for fastness.
	(all_results_integer): Likewise.
	(all_refers_integer): Likewise.
	(largest_binary_term): Likewise.
	(fast_add): Expand conditions.  Use get_binary_value_tree.
	(fast_subtract): Likewise.
	(fast_multiply): Expand conditions.
	(fast_divide): Expand conditions.
	(parser_add): Avoid fast_add when error or not-error are specified.
	(parser_multiply): Likewise.
	(parser_divide): Likewise.
	(parser_subtract): Likewise.
	* genutil.cc (tree_type_from_field): Disable; flagged for removal.
	(get_binary_value): Use get_binary_value_tree.
	(get_binary_value_tree): Avoid intermediate variables when possible.
	(refer_is_clean): Formatting.
	(is_pure_integer): Refine test for little-endian binary.
	* genutil.h (get_binary_value_tree): New declaration.
	(is_pure_integer): New declaration.
	* symbols.cc (symbol_table_init): Explanatory ZEROS comment.

libgcobol/ChangeLog:

	* gfileio.cc (__gg__file_reopen): Raise exception on failed OPEN
	* gmath.cc (__gg__fixed_phase2_assign_to_c): Let pointer arithmetic
	go negative.
	(__gg__subtractf2_fixed_phase1): Edit a comment.
2026-02-18 23:21:22 -05:00
David Malcolm
bfa59652d2 testsuite: remove xfails from analyzer test [PR108400,PR124116]
gcc/testsuite/ChangeLog:
	PR analyzer/108400
	PR analyzer/124116
	* c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c:
	Remove xfails; these false positives appears to have been fixed by
	r16-7365-g498fb8a24516b1.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2026-02-18 21:58:32 -05:00
Pan Li
63fc48f077 RISC-V: Add another combine pattern for vfmin/max on cost model
The recent change introduce another form of vfmin/max, which is
more "literal" compare the previous one.  The related vx_vf/vf*
test cases also failed due to this change.  Thus, add the pattern
to make the test case happy.

The below test suites are passed for this patch series.
* The rv64gcv fully regression test.
* Fix the vx_vf/vf* testcases.

gcc/ChangeLog:

	* config/riscv/autovec-opt.md (*literal_v<ieee_fmaxmin_op>_vf_<mode>):
	Add new pattern for vfmax/min combine to fx.

Signed-off-by: Pan Li <pan2.li@intel.com>
2026-02-19 09:12:24 +08:00
Jerry DeLisle
ff2f6c5153 Fortran: Fix heap-use-after-free
This fix stops freeing the current BLOCK namespace during malformed
END error recovery.  It now lets normal block unwinding/cleanup handle
the free, preventing the heap-use-after-free.

Suggested-by: Jakub Jelinek <jakub@redhat.com>
Signed-off-by: Christopher Albert <albert@tugraz.at>

	PR fortran/122491

gcc/fortran/ChangeLog:

	* decl.cc (gfc_match_end): Do not free current BLOCK namespace
	during malformed END cleanup.
2026-02-18 16:34:53 -08:00
H.J. Lu
c475080b3a x86: Update gcc.target/i386/pr108938-3.c
commit 4b71cafc84
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Feb 17 11:43:43 2026 +0100

    bswap: Handle VEC_PACK_TRUNC_EXPR [PR120233]

compiles

void
foo2 (char* a, short* __restrict b)
{
  a[0] = b[0] >> 8;
  a[1] = b[0];
  a[2] = b[1] >> 8;
  a[3] = b[1];
}

into

	movl	(%rsi), %eax
	bswap	%eax
	roll	$16, %eax
	movl	%eax, (%rdi)
	ret

instead of

	movzwl	(%rsi), %eax
	movzwl	2(%rsi), %edx
	movl	%eax, %ecx
	sall	$16, %eax
	sarw	$8, %cx
	movzwl	%cx, %ecx
	orl	%ecx, %eax
	movd	%eax, %xmm0
	movl	%edx, %eax
	sall	$16, %edx
	sarw	$8, %ax
	movdqa	%xmm0, %xmm2
	movzwl	%ax, %eax
	orl	%eax, %edx
	movd	%edx, %xmm1
	punpcklbw	%xmm1, %xmm2
	punpcklbw	%xmm1, %xmm0
	pshufd	$65, %xmm2, %xmm2
	punpcklbw	%xmm2, %xmm0
	movd	%xmm0, (%rdi)
	ret

Update gcc.target/i386/pr108938-3.c to also scan 3 bswaps for x86-64.

	PR target/120233
	* gcc.target/i386/pr108938-3.c: Also scan 3 bswaps for x86-64.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2026-02-19 08:16:05 +08:00
Marek Polacek
77aedc8741 c++/reflection: add fixed test [PR123440]
This test crashed until r16-7330.  The errors are expected.
Let's make sure the crash doesn't come back.

	PR c++/123440

gcc/testsuite/ChangeLog:

	* g++.dg/reflect/extract10.C: New test.
2026-02-18 15:53:31 -05:00
Andrew Pinski
6f777c34c9 cprop_hardreg: Use delete_insn_and_edges instead of delete_insn [PR116053]
So delete_insn_and_edges was added explicitly to solve the problem of having
to cleanup the dead eh edges when a load becomes dead (non-trapping in this case).
This moves the one call to delete_insn in cprop_hardreg over to use delete_insn_and_edges
to fix this case.
Basically we copyprop the sp register into a memory load. This memory load is normally
dead way before but with non-call eh and -fno-delete-dead-exceptions, it is alive until
cprop_hardreg. After thie copy prop of the sp register into the memory address of the load,
the load becomes non-trapping and is allowed to be deleted. Except we don't remove the eh edges
because cprop_hardreg only called delete_insn. So this updates the call to delete_insn_and_edges
which removes the eh edges.

Bootstrapped and tested on x86_64-linux-gnu with no regressions.

	PR rtl-optimization/116053

gcc/ChangeLog:

	* regcprop.cc (copyprop_hardreg_forward_1): Use delete_insn_and_edges
	instead of delete_insn.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr116053-1.c: New test.

Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2026-02-18 12:15:14 -08:00
Vladimir N. Makarov
a169450924 [PR120169, LRA]: Fix up REG_ARGS_SIZE note for output reloads
In this test case, LRA reloads arg push insn but does not move original
REG_ARGS_SIZE note to the reload insn which becomes a new arg push.  The
patch fixes it.

gcc/ChangeLog:

	PR rtl-optimization/120169
	* lra-int.h (lra_process_new_insns): Modify the prototype.
	* lra.cc (lra_process_new_insns): Add arg fixup_reg_args_size with
	implicit value.  Move REG_ARGS_SIZE note if necessary.
	* lra-constraints.cc (curr_insn_transform): Pass the new arg value.

gcc/testsuite/ChangeLog:

	PR rtl-optimization/120169
	* gcc.target/m68k/pr120169.c: New.
2026-02-18 13:06:51 -05:00
Maciej W. Rozycki
c42f1c6abb AMDGCN: Disable subdirectory configuration for unsupported GAS and LD
The `amdgcn' target is not supported by GAS or LD, so disable building
in the respective subdirectories, removing configuration errors such as:

This target is no longer supported in gas
make[1]: *** [Makefile:5473: configure-gas] Error 1

and:

*** ld does not support target amdgcn-unknown-none
*** see ld/configure.tgt for supported targets
make[1]: *** [Makefile:6968: configure-ld] Error 1

in builds where no explicit `--disable-gas' and `--disable-ld' options
have been used with the top-level `configure' script.  Users must not
have to disable features selected by default to get a working
configuration.

	/
	* configure.ac <amdgcn-*-*> (noconfigdirs): Add `ld' and `gas'.
	* configure: Regenerate.
2026-02-18 17:32:33 +00:00
Jakub Jelinek
319db4667f c: Call relayout_decl in build_compound_literal when completing type [PR123365]
Most other spots inthe C FE which change type of some VAR_DECL
through complete_array_type call relayout_decl to fix up DECL_MODE
etc., but build_compound_literal strangely does not.

It has layout_decl (decl, 0); call later on but I think that is
quite useless given that already the build_decl call earlier
calls that and so the second layout_decl probably does nothing
most of the time.

On the following testcase, the compound literal VAR_DECL has
BLKmode from the time it had incomplete array type and isn't
changed to DImode that the completed type has and asm stmt
expansion is unhappy about that.

Fixed thusly.

2026-02-18  Jakub Jelinek  <jakub@redhat.com>

	PR c/123365
	* c-decl.cc (build_compound_literal): Call relayout_decl
	after completing the type.

	* gcc.c-torture/compile/pr123365.c: New test.
2026-02-18 17:46:38 +01:00
Patrick Palka
8ba1e2077f libstdc++: Add [[no_unique_address]] to repeat_view::_M_value [PR121402]
PR libstdc++/121402

libstdc++-v3/ChangeLog:

	* include/std/ranges (repeat_view::_M_value): Add
	[[no_unique_address]].
	* testsuite/std/ranges/adaptors/sizeof.cc
	[__cpp_lib_ranges_repeat]: New test.

Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
2026-02-18 10:13:51 -05:00
Torbjörn SVENSSON
c94fdc1590 testsuite: arm: Use effective-target for aes-fuse-[12].c
gcc/testsuite/ChangeLog:

	* gcc.target/arm/aes-fuse-1.c: Use effective-target
	arm_cpu_cortex_a53.
	* gcc.target/arm/aes-fuse-2.c: Likewise.
	* lib/target-supports.exp: Define effective-target
	arm_cpu_cortex_a53.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2026-02-18 15:59:58 +01:00
Richard Biener
d96b9b689f target/123137 - improve TLS call placement validity check
When we search for a point in an inseration candidate block that has
incoming live call clobbered regs we look for REG_DEAD notes of
those and indication of FLAGS reg becoming live.  But we consider
insns like

(insn 807 805 6 2 (parallel [
            (set (subreg:SI (reg:HI 509) 0)
                (lshiftrt:SI (reg:SI 514)
                    (const_int 16 [0x10])))
            (clobber (reg:CC 17 flags))
        ]) "/home/packages/tmp/onednn-3.9.1+ds/src/cpu/x64/brgemm/jit_brgemm_amx_uker.cpp":1891:25 1213 {*lshrsi3_1}
     (expr_list:REG_UNUSED (reg:CC 17 flags)
        (expr_list:REG_DEAD (reg:SI 514)
            (nil))))

making the FLAGS_REG live despite the REG_UNUSED note or the setter
being a CLOBBER.  The following optimizes this by in turn honoring
REG_UNUSED for FLAGS_REG, pruning it immediately again.

This reduces required expensive iteration to other candidate BBs,
reducing compile-time for the testcase in the PR from hours to 6s.

	PR target/123137
	* config/i386/i386-features.cc (ix86_emit_tls_call): Improve
	local FLAGS_REG liveness calculation.

	* g++.dg/torture/pr124137.C: New testcase.
2026-02-18 15:20:44 +01:00
Marek Polacek
2206271ead c++: bit_cast and consteval-only types [PR124096]
[bit.cast]/2: Mandates: Neither To nor From are consteval-only types

but we are not checking this, so the attached test compiled.  I'm
adding the check into cp_build_bit_cast rather than <bit> so that
we detect this even for __builtin_bit_cast.

	PR c++/124096

gcc/cp/ChangeLog:

	* semantics.cc (cp_build_bit_cast): Check that neither argument is
	consteval-only.

gcc/testsuite/ChangeLog:

	* g++.dg/reflect/bit_cast.C: New test.

Reviewed-by: Jakub Jelinek <jakub@redhat.com>
2026-02-18 09:15:32 -05:00
Victor Do Nascimento
735165a0e5 vect: Fix vect-fncall-mask-math.c test
Given the release of relevant lmvec suport, the test's expected
failure is no longer satisfied as we are now able to emmit masked
calls to math functions, in this case expf.

We therefore change the xfail to a pass and, while at it, fix the
testism in the test, where temporary names had previously been
hardcoded.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/vect-fncall-mask-math.c: Fix test.
2026-02-18 09:40:53 +00:00
Jakub Jelinek
b95f529df4 i386: Fix up avx_vpermilp_parallel [PR124138]
r16-3677 extended avx_vpermilp_parallel so that it handles also V8DImode
(among others) and broke this testcase.
For V8DFmode the bug existed there already since r0-127405 which extended
avx_vpermilp_parallel to handle V8DFmode.
For V16SImode/V16SFmode I think the code is correct, in that case it can
for V4SImode/V4SFmode choose any permutation it wants and the
V8S{I,F}mode and V16S{I,F}mode cases before FALLTHRU verify the upper lanes
match those lower ones.
For V[48]D[IF]mode the function uses different checking, where it checks
each pair of ipar separately:
    case E_V8DFmode:
    case E_V8DImode:
      /* In the 512-bit DFmode case, we can only move elements within
         a 128-bit lane.  First fill the second part of the mask,
         then fallthru.  */
      for (i = 4; i < 6; ++i)
        {
          if (ipar[i] < 4 || ipar[i] >= 6)
            return 0;
          mask |= (ipar[i] - 4) << i;
        }
      for (i = 6; i < 8; ++i)
        {
          if (ipar[i] < 6)
            return 0;
          mask |= (ipar[i] - 6) << i;
        }
      /* FALLTHRU */

    case E_V4DFmode:
    case E_V4DImode:
      /* In the 256-bit DFmode case, we can only move elements within
         a 128-bit lane.  */
      for (i = 0; i < 2; ++i)
        {
          if (ipar[i] >= 2)
            return 0;
          mask |= ipar[i] << i;
        }
      for (i = 2; i < 4; ++i)
        {
          if (ipar[i] < 2)
            return 0;
          mask |= (ipar[i] - 2) << i;
        }
      break;
so that it directly computes corresponding mask bit.
Earlier in the function it verified ipar[i] wasn't above
nelts (nor negative), so just checking if (ipar[i] >= 2) is ok, it can't
be negative, and just checking if (ipar[i] < 6) is also fine, because
it can never be 8 or above (because nelts is 8 in that case).
Though, the if (ipar[i] < 2) case check used to be correct only when
nelts could be only 4, when it can be 8 too, it will as in the following
testcase happily accept values in the [4, 7] range which shouldn't be
accepted (it can only handle [2, 3]).

Fixed thusly.

2026-02-17  Jakub Jelinek  <jakub@redhat.com>

	PR target/124138
	* config/i386/i386.cc (avx_vpermilp_parallel): Verify
	ipar[2] and ipar[3] aren't larger than 3.

	* gcc.dg/pr124138.c: New test.
	* gcc.target/i386/avx512f-pr124138-1.c: New test.
	* gcc.target/i386/avx512f-pr124138-2.c: New test.
2026-02-18 10:28:34 +01:00
Tobias Burnus
f3e998780d OpenMP/Fortran: Error for groupprivate + threadprivate
As OpenMP spec issue 4663 has been voted on, replace warning by error when
mixing threadprivate with groupprivate.

gcc/fortran/ChangeLog:

	* symbol.cc (gfc_check_conflict): Reject mixing OpenMP threadprivate
	with groupprivate.
	* trans-common.cc (build_common_decl): Remove warning when mixing
	threadprivate with groupprivate.
	* trans-decl.cc (add_attributes_to_decl): Likewise.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/groupprivate-1.f90: Update test.
	* gfortran.dg/gomp/groupprivate-4.f90: Likewise.
	* gfortran.dg/gomp/groupprivate-6.f90: Likewise.
	* gfortran.dg/gomp/groupprivate-7.f90: Extend test.
2026-02-18 10:05:39 +01:00
H.J. Lu
b54533a286 x86: Update stack alignment only if stack is used
The same hard register may be used for both stack and non-stack accesses.
Update ix86_find_max_used_stack_alignment to adjust stack alignment only
when a hard register used for a stack access is defined in a basic block
that dominates the block where it is used.

gcc/

	PR target/124098
	* config/i386/i386.cc (ix86_access_stack_p): New.
	(ix86_find_max_used_stack_alignment): Update stack alignment only
	if stack is used.

gcc/testsuite/

	PR target/124098
	* gcc.target/i386/pr124098.c: New test.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2026-02-18 13:14:15 +08:00
GCC Administrator
5df731da12 Daily bump. 2026-02-18 00:16:35 +00:00
H.J. Lu
58b6004e92 x86: Don't mark clobbered FLAGS_REG as live
Don't mark clobbered FLAGS_REG as live in

(parallel [(set (reg:SI 119)
                (lshiftrt:SI (reg:SI 121)
                    (const_int 16 [0x10])))
           (clobber (reg:CC 17 flags))])

gcc/

	PR target/124136
	* config/i386/i386-features.cc (ix86_check_flags_reg): Don't
	mark clobbered FLAGS_REG as live.

gcc/testsuite/

	PR target/124136
	* g++.target/i386/pr124136.C: New file.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2026-02-18 07:30:17 +08:00
David Malcolm
f310e487e1 analyzer: fix ICE due to sloppy types in unaryop_svalue [PR124104]
gcc/analyzer/ChangeLog:
	PR analyzer/124104
	* svalue.cc (unaryop_svalue::maybe_get_value_range): Bail out for
	incompatible types.

gcc/testsuite/ChangeLog:
	PR analyzer/124104
	* c-c++-common/analyzer/casts-3.c: New test.
	* gcc.dg/analyzer/ice-pr124104.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2026-02-17 18:04:17 -05:00
David Malcolm
5869ac36fa analyzer: fix ICE when throw-handling hits svalue complexity limit [PR124139]
gcc/analyzer/ChangeLog:
	PR analyzer/124139
	* engine.cc (exploded_node::on_throw): Bail out if we can't get
	the fndecl for the call.

gcc/testsuite/ChangeLog:
	PR analyzer/124139
	* g++.dg/analyzer/exception-ice-pr124139.C: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2026-02-17 18:04:16 -05:00
Richard Earnshaw
06221fe413 arm: don't allow movMcc when short-it but no vsel [PR124134]
Perverse combinations of options can lead to the compiler having to
work around unexpected situations.  Armv8 originally specified that
complex IT sequences were deprecated for performance (it was later
rescinded).  If the options restrict the floating-point unit to
one without vsel, then movMcc patterns need complex IT sequences
and we can end up with unmatched RTL patterns.  Avoid this by
failing early when the target patterns are disabled.

gcc/ChangeLog:

	PR target/124134
	* config/arm/arm.md (movsfcc): FAIL if using restricted IT
	blocks and we lack VSEL.
	(movdfcc): Likewise.

gcc/testsuite/ChangeLog:

	PR target/124134
	* gcc.target/arm/pr124134.c: New test.
2026-02-17 17:59:53 +00:00
Jakub Jelinek
a0c3298890 testsuite: Add testcase for latent PR [PR123048]
This testcase started to be miscompiled with r16-4186 and went latent
again r16-6651.

2026-02-17  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/123048
	* gcc.dg/pr123048.c: New test.
2026-02-17 17:44:04 +01:00
Tomasz Kamiński
f3ba5ad088 libstdc++: Correct requirements for atomic/cons/zero_padding.cc tests again [PR124124]
The requirements introduced in previous patch r16-7548-g060d7c2a9c1fe1,
were not sufficient for types of size bigger than 64B (Ctor or long double),
as dg-add-options of libatomic, links libatomic only if it is required to
handle atomics of 64B types or pointers.

This patch addresses above, by reducing the size of Ctor struct to fit in
64 bytes, and moving long double test to separate file, that requires and
links with libatomic.

	PR libstdc++/124124

libstdc++-v3/ChangeLog:

	* testsuite/29_atomics/atomic/cons/zero_padding.cc: Updated
	Ctor class and move test_floating to...
	* testsuite/29_atomics/atomic_float/zero_padding.cc: Extracted
	test_floating.

Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
2026-02-17 17:33:35 +01:00
Patrick Palka
44a51e8c70 c++: void(concept-id) evaluation [PR121822]
Similar to r16-7056-g22f51c0f5e62a4, here the expression within
the decltype void(Derived<T>) is non-dependent enough that we
instantiate/fold it immediately, during which however convert_to_void
tries to evaluate the concept-id, which fails.  When in an
unevaluated context such as decltype I don't think convert_to_void
should be evaluating concept-ids.

	PR c++/121822

gcc/cp/ChangeLog:

	* cvt.cc (convert_to_void): Don't evaluate a concept-id
	in an unevaluated context.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/concepts-decltype6.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2026-02-17 11:21:45 -05:00
Patrick Palka
9fe46ba8eb c++: unifying LAMBDA_EXPR [PR122318]
This patch makes the default case of unify accept LAMBDA_EXPR P/A pairs,
which we can legitimately hit during alias CTAD guide overload resolution.
We can also less legimitately hit this during partial specialization
matching (likely IFNDR).

I'm not totally sure if we want to handle them like any other non-deducible
expression vs handling them separately (returning success iff they're ==).
I couldn't come up with a testcase for which it mattered so I went the
simpler route.

	PR c++/122318
	PR c++/101670

gcc/cp/ChangeLog:

	* pt.cc (unify) <default>: Accept LAMBDA_EXPR.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/lambda-targ20.C: New test.
	* g++.dg/cpp2a/lambda-targ21.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2026-02-17 11:21:42 -05:00
Jakub Jelinek
5932fb71d5 c++: Implement __builtin_constexpr_diag (aka P2758 implementation)
I know P2758R5 didn't make it into C++26, but on IRC Ville said it would be
useful anyway, so here is a quick attempt at implementing it.

Not adding anything on the libstdc++ side, because I don't know where
experimental stuff like that should go, whether it would be in the
implementation namespace etc.

Tags are currently parsed and printed in the diagnostics, but -Wconstexpr-msg=
option and being able to #pragma GCC diagnostic ignore -Wconstexpr-msg=blah
will need to wait for GCC 17.

In any case, the compiler side is just one new builtin,
__builtin_constexpr_diag, whose first argument is 0 for print,
or 1 for warning or 2 for error (or that ored with 16 if location shouldn't
be caller's location but caller's caller location - useful when adding some
wrappers around the builtin), second argument is string_view of the tag
(or "" for no tag) and third argument is string_view or u8string_view
with the message.  The builtin also handles string literals.

2026-02-17  Jakub Jelinek  <jakub@redhat.com>

gcc/cp/
	* cp-tree.h (enum cp_built_in_function): Add
	CP_BUILT_IN_CONSTEXPR_DIAG.
	(cexpr_str::cexpr_str): Add new default ctor.
	(cexpr_str::type_check): Add optional allow_char8_t arg.
	(cexpr_str::extract): Add optional ctx, non_constant_p, overflow_p
	and jump_target arguments.
	* cp-gimplify.cc (cp_gimplify_expr): Throw away
	__builtin_constexpr_diag calls after gimplification of
	their arguments.
	* decl.cc (cxx_init_decl_processing): Create __builtin_constexpr_diag
	FE builtin decl.
	* constexpr.cc (call_stack, call_stack_tick, last_cx_error_tick):
	Moved earlier.
	(cxx_eval_constexpr_diag): New function.
	(cxx_eval_builtin_function_call): Handle __builtin_constexpr_diag
	calls.
	* tree.cc (builtin_valid_in_constant_expr_p): Return true for
	CP_BUILT_IN_CONSTEXPR_DIAG.
	* semantics.cc (cexpr_str::type_check): Add allow_char8_t argument,
	if true, allow data to return const char8_t *.
	(cexpr_str::extract): Add ctx, non_constant_p, overflow_p and
	jump_target arguments, if they are non-NULL, evalute expressions
	in that context rather than using cxx_constant_value and translate
	back to SOURCE_CHARSET even if message_data or message_sz are NULL.
gcc/testsuite/
	* g++.dg/ext/constexpr-diag1.C: New test.
	* g++.dg/ext/constexpr-diag2.C: New test.
	* g++.dg/ext/constexpr-diag3.C: New test.
	* g++.dg/ext/constexpr-diag4.C: New test.
	* g++.dg/ext/constexpr-diag5.C: New test.
	* g++.dg/ext/constexpr-diag6.C: New test.
2026-02-17 15:56:59 +01:00
Jeff Law
3a7143ed83 [RISC-V][PR target/124048] Fix RTL generated by conditional AND splitter
The recently added patterns for recovering good code generation of conditional
operations on RISC-V with Zicond had a nasty little bug causing this bootstrap
failure.

The main patterns are fine -- in those cases the czero produces a neutral
value.  So for example a conditional IOR can use a czero to select between an
IOR's operand and zero, then we do an unconditional IOR of the common value and
the result of the czero.

For AND the neutral value is -1 rather than 0.  So we need a different
sequence.  We emit the AND into a temporary.  Then select between the common
term and zero.  Then IOR the temporary with the selected value.  That sequence
requires the tense of the selection to be inverted which I failed to do in the
split RTL output of the pattern.

Those had been tested by inspection only and the tense flip was missed.  Doko's
bootstrap test with zicond enabled by default was able to trip this problem.
Thankfully it was easy to reproduce and bisect and was mostly a matter of
waiting for builds to run.

I've bootstrapped this on one of my BPIs with B, V and Zicond enabled by
default.  I'll be pushing it to the trunk momentarily.  I never actually
compared assembly or debugged the resulting code, it was found purely by
inspection once I knew where to look.  ie, I don't have a testcase for the
testsuite, but this is covered by bootstrapping with Zicond enabled.

I'd been somewhat worried about this possibility for a while -- the B, V and
Zicond extensions are not well represented by CI systems for bootstrap testing.
Given the Pioneer here is still limping along, it's a good test of rv64gc and
I've hacked things up so that the BPI will enable B, V and Zicond by default.

The baseline run is still in progress (bootstrapping and regression testing on
the BPI is up to 30 hours now), but we'll have coverage going forward.
Obviously when the K3 systems come out the hope is this cycle time will drop
meaningfully.

	PR target/124048
gcc/
	* config/riscv/zicond.md (conditional AND patterns): Fix missed
	flipping the condition's test in RTL output.
2026-02-17 07:45:57 -07:00