Commit Graph

191389 Commits

Author SHA1 Message Date
Marek Polacek
7bd1e1296c warn-access: Prevent -Wuse-after-free on ARM [PR104213]
Here, -Wuse-after-free warns about using 'this' which, on ARM, cdtors
return, as mandated by the EABI.  To be entirely correct, it only
requires it for C1 and C2 ctors and D2 and D1 dtors, but I don't feel
like changing that now and possibly running into issues later on.

This patch uses suppress_warning on 'this' for certain cdtor_returns_this
cases in the C++ FE, and then warn_invalid_pointer makes use of this
information and doesn't warn.

In my first attempt I tried suppress_warning the MODIFY_EXPR or RETURN_EXPR
we build in build_delete_destructor_body, but the complication is that
the suppress_warning bits don't always survive gimplification; see e.g.
gimplify_modify_expr where we do

 6130       if (COMPARISON_CLASS_P (*from_p))
 6131         copy_warning (assign, *from_p);

but here we're not dealing with a comparison.  Removing that check
regresses uninit-pr74762.C.  Adding copy_warning (assign, *expr_p)
regresses c-c++-common/uninit-17.c.

	PR target/104213

gcc/cp/ChangeLog:

	* decl.cc (finish_constructor_body): Suppress -Wuse-after-free.
	(finish_destructor_body): Likewise.
	* optimize.cc (build_delete_destructor_body): Likewise.

gcc/ChangeLog:

	* gimple-ssa-warn-access.cc (pass_waccess::warn_invalid_pointer): Don't
	warn when the SSA_NAME_VAR of REF has supressed -Wuse-after-free.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Wuse-after-free2.C: New test.
	* g++.dg/warn/Wuse-after-free3.C: New test.
2022-01-26 12:18:32 -05:00
Jason Merrill
00d8321124 c++: ->template and using-decl [PR104235]
cp_parser_template_id wasn't prepared to handle getting a USING_DECL back
from cp_parser_template_name.  Let's defer that case to instantiation time,
as well.

	PR c++/104235

gcc/cp/ChangeLog:

	* parser.cc (cp_parser_template_name): Repeat lookup of USING_DECL.

gcc/testsuite/ChangeLog:

	* g++.dg/parse/template-keyword2.C: New test.
2022-01-26 11:39:40 -05:00
Martin Liska
1bc00a4890 IPA mod-ref: fix usage of --param names in dump messages.
gcc/ChangeLog:

	* ipa-modref-tree.cc (modref_access_node::update):
	Remove "--param param=foo" with "--param foo".
	(modref_access_node::insert): Likewise.
	(modref_access_node::insert_kill): Likewise.
	* ipa-modref-tree.h (struct modref_ref_node): Likewise.
	(struct modref_base_node): Likewise.
	(struct modref_tree): Likewise.

gcc/testsuite/ChangeLog:

	* gcc.dg/tree-ssa/modref-7.c: Update scanned patterns.
	* gcc.dg/tree-ssa/modref-8.c: Likewise.
2022-01-26 16:25:10 +01:00
Raoni Fassina Firmino
8bcf835e0a rtl: builtins: Fix builtins feclearexcept and feraiseexcept operand check [PR94193]
Commit 4343f5e256 ("rtl: builtins: (not just) rs6000: Add builtins
for fegetround, feclearexcept and feraiseexcept [PR94193]") broke gcc
bootstra when building with --enable-checking=rtl[1].

The function expand_builtin_feclear_feraise_except was failing to
proper validate op0 predicate before emit_insn leading to the mismatch
type failure.

[1] https://gcc.gnu.org/pipermail/gcc-patches/2022-January/589186.html

2022-01-26  Raoni Fassina Firmino  <raoni@linux.ibm.com>

gcc/
	PR target/94193
	* builtins.cc (expand_builtin_feclear_feraise_except): Add op0
	predicate check.

Signed-off-by: Raoni Fassina Firmino <raoni@linux.ibm.com>
2022-01-26 15:20:41 +00:00
David Malcolm
9ff3e2368d analyzer: fix missing uninit warning on args to stdio builtins [PR104224]
We were failing to check for uninitialized arguments to stdio builtins,
such as when passing local "go" to the call to "printf" in "main" in
the testcase.

gcc/analyzer/ChangeLog:
	PR analyzer/104224
	* region-model.cc (region_model::check_call_args): New.
	(region_model::on_call_pre): Call it when ignoring stdio builtins.
	* region-model.h (region_model::check_call_args): New decl

gcc/testsuite/ChangeLog:
	PR analyzer/104224
	* gcc.dg/analyzer/pr104224.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-01-26 09:43:43 -05:00
David Malcolm
e966a508e0 analyzer: fix sense in range::add_bound [PR94362]
Mikael Morin spotted that I got the sense wrong when discarding
redundant constraints in
r12-6782-gc4b8f3730a80025192fdb485ad2535c165340e41.

Fixed as follows, which also moves the rejection of contradictory
constraints in range::add_bound to earlier, so that this code can
be self-tested.

gcc/analyzer/ChangeLog:
	PR analyzer/94362
	* constraint-manager.cc (range::add_bound): Fix tests for
	discarding redundant constraints.  Perform test for rejecting
	unsatisfiable constraints earlier so that they don't update
	the object on failure.
	(selftest::test_range): New.
	(selftest::test_constant_comparisons): Add test coverage for
	existing constraints becoming narrower until they are
	unsatisfiable.
	(selftest::run_constraint_manager_tests): Call test_range.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-01-26 09:41:58 -05:00
Jakub Jelinek
192e4a9fa0 testsuite: Fix up pr104188.c testcase for i686-linux [PR104188]
On i686-linux this new testcase FAILs with:
cc1: warning: SSE instruction set disabled, using 387 arithmetics
FAIL: gcc.target/i386/pr104188.c (test for excess errors)
Excess errors:
cc1: warning: SSE instruction set disabled, using 387 arithmetics
This is because it uses -mfpmath=sse, but -msse2 isn't on.  Fixed
by adding -msse2 to dg-options and requiring sse2_runtime effective
target.

2022-01-26  Jakub Jelinek  <jakub@redhat.com>

	PR target/104188
	* gcc.target/i386/pr104188.c: Add dg-require-effective-target
	sse2_runtime.  Add -msse2 to dg-options.
2022-01-26 11:58:27 +01:00
Francois-Xavier Coudert
8769f32b64 Fortran: fix bootstrap on SPARC/Solaris
libgfortran/ChangeLog:

	PR libfortran/104233
	* ieee/issignaling_fallback.h: Check GFC_REAL_16_IS_FLOAT128
	instead of __FLT128_IS_IEC_60559__.
2022-01-26 10:21:23 +01:00
Jason Merrill
f3e6ef7d87 c++: alias template and typename [PR103057]
Usually we handle DR1558 substitution near the top of tsubst, but in this
case while substituting TYPENAME_TYPE we were passing an alias
specialization to tsubst_aggr_type, which ignored its aliasness.

	PR c++/103057

gcc/cp/ChangeLog:

	* pt.cc (tsubst_aggr_type): Call tsubst for alias template
	specialization.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/alias-decl-void1.C: New test.
2022-01-25 23:22:57 -05:00
GCC Administrator
e0b8716f53 Daily bump. 2022-01-26 00:16:38 +00:00
Francois-Xavier Coudert
fa262add75 Fortran: fix issignaling() implementation
libgfortran/ChangeLog:

	* ieee/issignaling_fallback.h: Fix GCC-specific preprocessor
	macros.
2022-01-26 00:10:45 +01:00
Martin Sebor
58ec0964b1 Avoid recomputing PHI results after failure (PR104203).
Resolves:
PR tree-optimization/104203 - huge compile-time regression in pointer_query

gcc/ChangeLog:

	PR tree-optimization/104203
	* gimple-ssa-warn-access.cc (pass_data pass_data_waccess): Use
	TV_WARN_ACCESS.
	* pointer-query.cc (access_ref::merge_ref): Change return type.
	Convert failure to a conservative success.
	(access_ref::get_ref): Adjust to the change above.  Short-circuit
	PHI evaluation after first failure turned into conservative success.
	* pointer-query.h (access_ref::merge_ref): Change return type.
	* timevar.def (TV_WARN_ACCESS): New timer variable.
2022-01-25 14:22:49 -07:00
Jonathan Wakely
5c1f274e3e libstdc++: Avoid some more warnings [PR104019]
With -fno-exceptions we get a -Wmisleading-indentation warning for:

  if (cond)
    __try {}
    __catch (...) {}

This is because the __catch(...) expands to if (false), but is indented
as though it is controlled by the preceding 'if'. Surround it in braces.

The new make_shared<T[]> code triggers a bogus warning due to PR 61596,
which can be disabled with a pragma.

libstdc++-v3/ChangeLog:

	PR libstdc++/104019
	* include/bits/istream.tcc (basic_istream::sentry): Add braces
	around try-block.
	* include/bits/shared_ptr_base.h (_Sp_counted_array_base::_M_init):
	Add pragmas to disable bogus warnings from PR 61596.
2022-01-25 21:05:16 +00:00
Jonathan Wakely
e20486d508 libstdc++: Define _GNU_SOURCE for secure_getenv on Cygwin [PR104217]
For GNU/Linux G++ defines _GNU_SOURCE automatically, but not for Cygwin.
This means secure_getenv is not declared by Cygwin's <stdlib.h>, even
though autoconf detected it is present in the library. Define it in the
source files that want to use secure_getenv.

libstdc++-v3/ChangeLog:

	PR libstdc++/104217
	* src/c++17/fs_ops.cc (_GNU_SOURCE): Define.
	* src/filesystem/dir.cc (_GNU_SOURCE): Define.
	* src/filesystem/ops.cc (_GNU_SOURCE): Define.
2022-01-25 21:05:16 +00:00
Jonathan Wakely
c8bd4dc821 libstdc++: Avoid symlink race in filesystem::remove_all [PR104161]
This adds a new internal flag to the filesystem::directory_iterator
constructor that makes it fail if the path is a symlink that resolves to
a directory. This prevents filesystem::remove_all from following a
symlink to a directory, rather than deleting the symlink itself.

We can also use that new flag in recursive_directory_iterator to ensure
that we don't follow symlinks if the follow_directory_symlink option is
not set.

This also moves an error check in filesystem::remove_all after the while
loop, so that errors from the directory_iterator constructor are
reproted, instead of continuing to the filesystem::remove call below.

libstdc++-v3/ChangeLog:

	PR libstdc++/104161
	* acinclude.m4 (GLIBCXX_CHECK_FILESYSTEM_DEPS): Check for
	fdopendir.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* src/c++17/fs_dir.cc (_Dir): Add nofollow flag to constructor
	and pass it to base class constructor.
	(directory_iterator): Pass nofollow flag to _Dir constructor.
	(fs::recursive_directory_iterator::increment): Likewise.
	* src/c++17/fs_ops.cc (do_remove_all): Use nofollow option for
	directory_iterator constructor. Move error check outside loop.
	* src/filesystem/dir-common.h (_Dir_base): Add nofollow flag to
	constructor and when it's set use ::open with O_NOFOLLOW and
	O_DIRECTORY.
	* src/filesystem/dir.cc (_Dir): Add nofollow flag to constructor
	and pass it to base class constructor.
	(directory_iterator): Pass nofollow flag to _Dir constructor.
	(fs::recursive_directory_iterator::increment): Likewise.
	* src/filesystem/ops.cc (remove_all): Use nofollow option for
	directory_iterator constructor. Move error check outside loop.
2022-01-25 21:05:15 +00:00
Harald Anlauf
ec543c9833 Fortran: MOLD argument to TRANSFER intrinsic having storage size zero
gcc/fortran/ChangeLog:

	PR fortran/104227
	* check.cc (gfc_calculate_transfer_sizes): Fix checking of arrays
	passed as MOLD argument to the TRANSFER intrinsic for having
	storage size zero.

gcc/testsuite/ChangeLog:

	PR fortran/104227
	* gfortran.dg/transfer_check_6.f90: New test.
2022-01-25 21:56:39 +01:00
Harald Anlauf
34e8dafb76 Fortran: optional argument DIM for intrinsics NORM2, PARITY must be scalar
gcc/fortran/ChangeLog:

	PR fortran/104212
	* check.cc (gfc_check_norm2): Check that optional argument DIM is
	scalar.
	(gfc_check_parity): Likewise.

gcc/testsuite/ChangeLog:

	PR fortran/104212
	* gfortran.dg/argument_checking_26.f90: New test.
2022-01-25 21:17:48 +01:00
Patrick Palka
bc90dd0ecf c++: deleted fn and noexcept inst [PR101532, PR104225]
Here when attempting to use B's implicitly deleted default constructor,
mark_used rightfully returns false, but for the wrong reason: it
tries to instantiate the synthesized noexcept specifier which then only
silently fails because get_defaulted_eh_spec suppresses diagnostics
for deleted functions.  This lack of diagnostics causes us to crash on
the first testcase below (thanks to the assert in finish_expr_stmt), and
silently accept the second testcase.

To fix this, this patch makes mark_used avoid attempting to instantiate
the noexcept specifier of a deleted function, so that we'll instead
directly reject (and diagnose) the function due to its deletedness.

	PR c++/101532
	PR c++/104225

gcc/cp/ChangeLog:

	* decl2.cc (mark_used): Don't consider maybe_instantiate_noexcept
	on a deleted function.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/nsdmi-template21.C: New test.
	* g++.dg/cpp0x/nsdmi-template21a.C: New test.
2022-01-25 15:04:49 -05:00
Jason Merrill
fe5cee6f62 c++: assignment to temporary [PR59950]
Given build_this of a TARGET_EXPR, cp_build_fold_indirect_ref returns the
TARGET_EXPR.  But that's the wrong value category for the result of the
defaulted class assignment operator, which returns an lvalue, so we need to
actually build the INDIRECT_REF.

	PR c++/59950

gcc/cp/ChangeLog:

	* call.cc (build_over_call): Use cp_build_indirect_ref.

gcc/testsuite/ChangeLog:

	* g++.dg/init/assign2.C: New test.
2022-01-25 14:28:13 -05:00
Thomas Schwinge
aeac414923 Revert "Fix PR 67102: Add libstdc++ dependancy to libffi" [PR67102]
This reverts commit db1a65d936.

On 2021-09-17T01:01:39-0700, Andrew Pinski via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
> On Fri, Sep 17, 2021 at 12:46 AM Thomas Schwinge <thomas@codesourcery.com> wrote:
>> On 2021-09-15T13:56:37-0700, apinski--- via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
>> > The error message is obvious -funconfigured-libstdc++-v3 is used
>> > on the g++ command line.  So we just add the dependancy.
>>
>> > --- a/Makefile.def
>> > +++ b/Makefile.def
>> > @@ -592,6 +592,7 @@ dependencies = { module=configure-target-fastjar; on=configure-target-zlib; };
>> >  dependencies = { module=all-target-fastjar; on=all-target-zlib; };
>> >  dependencies = { module=configure-target-libgo; on=configure-target-libffi; };
>> >  dependencies = { module=configure-target-libgo; on=all-target-libstdc++-v3; };
>> > +dependencies = { module=configure-target-libffi; on=all-target-libstdc++-v3; };
>> >  dependencies = { module=all-target-libgo; on=all-target-libbacktrace; };
>> >  dependencies = { module=all-target-libgo; on=all-target-libffi; };
>> >  dependencies = { module=all-target-libgo; on=all-target-libatomic; };
>>
>> I'm confused, because given that this 'Makefile.def' change only has the
>> following effect:
>>
>> > --- a/Makefile.in
>> > +++ b/Makefile.in
>> > @@ -61261,6 +61261,7 @@ all-bison: maybe-all-intl
>> >  all-flex: maybe-all-intl
>> >  all-m4: maybe-all-intl
>> >  configure-target-libgo: maybe-all-target-libstdc++-v3
>> > +configure-target-libffi: maybe-all-target-libstdc++-v3
>> >  configure-target-liboffloadmic: maybe-configure-target-libgomp
>> >  all-target-liboffloadmic: maybe-all-target-libgomp
>> >  configure-target-newlib: maybe-all-binutils
>>
>> ... isn't that actually a no-op, because we already had such a dependency
>> listed?  Now twice:
>>
>>     $ grep -n -F 'configure-target-libffi: maybe-all-target-libstdc++-v3' -- Makefile.in
>>     61264:configure-target-libffi: maybe-all-target-libstdc++-v3
>>     61372:configure-target-libffi: maybe-all-target-libstdc++-v3
>>
>> Compared to the existing one, the one you've added is additionally
>> restricted by '@unless gcc-bootstrap'.
>>
>> I noticed this as I remembered that on our og[...] development branches
>> we have a patch in the opposite direction: get rid of this dependency via
>> removing 'lang_env_dependencies = { module=libffi; cxx=true; };' from
>> 'Makefile.def'.  See
>> <http://mid.mail-archive.com/alpine.DEB.2.21.9999.1812201344250.99920@build7-trusty-cs.sje.mentorg.com>
>> "Disable libstdc++ dependency for libffi".  (Maciej CCed in case you have
>> any further thoughts on that.)
>
> Oh, I see what happened now, the old bug was actually fixed by r6-5415
> which added cxx=true.
> So yes my patch is actually not needed and can be reverted.
> I tried to look to see if there was a dependency was there but for
> some reason I did not see it.
2022-01-25 18:46:21 +01:00
David Edelsohn
9099e0bc66 aix: AIX is not GLIBC.
A recent patch added tests for OPTION_GLIBC that is defined in
linux.h and linux64.h.  This broke bootstrap for non-Linux rs6000
configurations.  This patch defines OPTION_GLIBC as 0.

	* config/rs6000/aix.h (OPTION_GLIBC): Define as 0.
2022-01-25 10:29:21 -05:00
Jakub Jelinek
480caa1f4a libfortran: Provide fallback __issignalingl for IBM extended long double
On Mon, Jan 17, 2022 at 12:11:59AM +0100, FX via Gcc-patches wrote:
> This patch is the third in my “signaling NaN” series.
> For targets with IEEE support but without the issignaling macro in libc
> (i.e., everywhere except glibc), this allows us to provide a fallback
> implementation.

This doesn't seem to handle the powerpc* IBM double double long double.

__LDBL_IS_IEC_60559__ isn't defined for this type, because it is far from
an IEEE754 type, but it has signaling NaNs - as can be seen in glibc
libc/sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c
the type is a pair of doubles and whether it is a sNaN or qNaN is determined
by whether the first double is a sNaN or qNaN.

2022-01-25  Jakub Jelinek  <jakub@redhat.com>

	* ieee/issignaling_fallback.h (__issignalingl): Define for
	IBM extended long double are returning __issignaling on the
	first double.
2022-01-25 12:48:35 +01:00
Richard Biener
2e211a0229 tree-optimization/104214 - amend PR100740 fix for pointer compares
When we have a pointer relational compare we have stronger guarantees
about overflow, in particular rewriting BASE0 + STEP0 cmp BASE1 + STEP1
as BASE0 + STEP0 - STEP1 cmp BASE1 is always valid and the new IV0
does not overflow.  The patch basically reverts the previous change
when pointers are involved, keeping only the more conservative handling
for equality compares which can involve comparing different object
addresses.

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

	PR tree-optimization/104214
	* tree-ssa-loop-niter.cc (number_of_iterations_cond): Use
	stronger guarantees for relational pointer compares when
	rewriting BASE0 + STEP0 cmp BASE1 + STEP1 as
	BASE0 + STEP0 - STEP1 cmp BASE1.

	* gcc.dg/vect/pr81196-2.c: New variant testcase only
	requiring vect_int.
2022-01-25 12:22:30 +01:00
Florian Weimer
ab2a245778 libgcc: Fix _Unwind_Find_FDE for missing unwind data with glibc 2.35
_dl_find_object returns success even if no unwind information has been
found, and dlfo_eh_frame is NULL.

libgcc/ChangeLog:

	PR libgcc/104207
	* unwind-dw2-fde-dip.c (_Unwind_Find_FDE): Add NULL check.
2022-01-25 12:09:56 +01:00
Francois-Xavier Coudert
0d56eb93aa Fortran: fix preprocessor condition
libgfortran/ChangeLog:

	* ieee/issignaling_fallback.h: fix preprocessor condition.
2022-01-25 11:35:56 +01:00
Francois-Xavier Coudert
d0336ab4e7 Fortran: do not run signaling testsuite on 32-bit x86/x86_64
gcc/testsuite/ChangeLog:

	* gfortran.dg/ieee/signaling_3.f90: Skip test on 32-bit x86/x86_64.
2022-01-25 09:07:19 +01:00
Francois-Xavier Coudert
c0a4a65809 Fortran: fix typo in signaling NaN testcase
gcc/testsuite/ChangeLog:

	* gfortran.dg/ieee/signaling_1.f90: Fix test.
2022-01-25 09:00:38 +01:00
Jakub Jelinek
f4ee27d326 rs6000: Remove GCC 8.1 U10__float128 mangling compatibility [PR104172]
In GCC 7.x and earlier, while it had -mabi=ieeelongdouble option, that option
was undocumented and unsupported.
In GCC 8.1 that option got documented and -mabi=ieeelongdouble long double started
to be mangled as U10__float128.
In GCC 9 and backported to before 8.2 release, that mangling changed to
u9__ieee128 and a support for emitting compatibility mangling aliases have
been added.
Unfortunately, as mentioned in the PR, those don't really work well in many
cases, the free_lang_data pass throws away important trees, so e.g. with
-flto -ffat-lto-objects the compiler often ICEs on templates that involve
IEEE quad long double arguments etc. because the mangling was done too late
(at final time).
Furthermore, lto1's mangler is not the C++ mangler, so with -flto it would
often emit as "mangled identifiers" something that wasn't a valid assembler
identifier, e.g. operator+ etc.
While it is possible to do such mangling earlier, e.g. at the same time when
the C++ FE emits its mangling aliases and untested proof of concept is in
the PR, there seems to be agreement that we shouldn't bother with this
ABI compatibility with something that probably nobody really used.
GCC 8.2 already uses the new mangling, it was just a few months, but more
importantly, libstdc++ support for IEEE quad long double on
powerpc64le-linux was only added in GCC 11, and glibc support for that some
weeks after 8.2 got released.

So, the following patch just drops those aliases.

2022-01-25  Jakub Jelinek  <jakub@redhat.com>

	PR target/104172
gcc/
	* config/rs6000/rs6000-internal.h (rs6000_passes_ieee128): Don't
	declare.
	* config/rs6000/rs6000.cc (rs6000_passes_ieee128,
	ieee128_mangling_gcc_8_1): Remove.
	(TARGET_ASM_GLOBALIZE_DECL_NAME): Don't redefine.
	(rs6000_mangle_type): Return "u9__ieee128" instead of
	ieee128_mangling_gcc_8_1 ? "U10__float128" : "u9__ieee128".
	(rs6000_globalize_decl_name): Remove.
	* config/rs6000/rs6000-call.cc (init_cumulative_args,
	rs6000_function_arg_advance_1): Don't set rs6000_passes_ieee128.
2022-01-25 05:49:05 +01:00
GCC Administrator
bb99171b9b Daily bump. 2022-01-25 00:16:27 +00:00
Martin Sebor
b8e4e48d93 Remove duplicate code block.
gcc/ChangeLog:
	* pointer-query.cc (pointer_query::dump): Remove duplicate
	block.
2022-01-24 16:03:39 -07:00
Marek Polacek
ae36f83963 preprocessor: -Wbidi-chars and UCNs [PR104030]
Stephan Bergmann reported that our -Wbidi-chars breaks the build
of LibreOffice because we warn about UCNs even when their usage
is correct: LibreOffice constructs strings piecewise, as in:

  aText = u"\u202D" + aText;

and warning about that is overzealous.  Since no editor (AFAIK)
interprets UCNs to show them as Unicode characters, there's less
risk in misinterpreting them, and so perhaps we shouldn't warn
about them by default.  However, identifiers containing UCNs or
programs generating other programs could still cause confusion,
so I'm keeping the UCN checking.  To turn it on, you just need
to use -Wbidi-chars=unpaired,ucn or -Wbidi-chars=any,ucn.

The implementation is done by using the new EnumSet feature.

	PR preprocessor/104030

gcc/c-family/ChangeLog:

	* c.opt (Wbidi-chars): Mark as EnumSet.  Also accept =ucn.

gcc/ChangeLog:

	* doc/invoke.texi: Update documentation for -Wbidi-chars.

libcpp/ChangeLog:

	* include/cpplib.h (enum cpp_bidirectional_level): Add
	bidirectional_ucn.  Set values explicitly.
	* internal.h (cpp_reader): Adjust warn_bidi_p.
	* lex.cc (maybe_warn_bidi_on_close): Don't warn about UCNs
	unless UCN checking is on.
	(maybe_warn_bidi_on_char): Likewise.

gcc/testsuite/ChangeLog:

	* c-c++-common/Wbidi-chars-10.c: Turn on UCN checking.
	* c-c++-common/Wbidi-chars-11.c: Likewise.
	* c-c++-common/Wbidi-chars-14.c: Likewise.
	* c-c++-common/Wbidi-chars-16.c: Likewise.
	* c-c++-common/Wbidi-chars-17.c: Likewise.
	* c-c++-common/Wbidi-chars-4.c: Likewise.
	* c-c++-common/Wbidi-chars-5.c: Likewise.
	* c-c++-common/Wbidi-chars-6.c: Likewise.
	* c-c++-common/Wbidi-chars-7.c: Likewise.
	* c-c++-common/Wbidi-chars-8.c: Likewise.
	* c-c++-common/Wbidi-chars-9.c: Likewise.
	* c-c++-common/Wbidi-chars-ranges.c: Likewise.
	* c-c++-common/Wbidi-chars-18.c: New test.
	* c-c++-common/Wbidi-chars-19.c: New test.
	* c-c++-common/Wbidi-chars-20.c: New test.
	* c-c++-common/Wbidi-chars-21.c: New test.
	* c-c++-common/Wbidi-chars-22.c: New test.
	* c-c++-common/Wbidi-chars-23.c: New test.
2022-01-24 17:48:23 -05:00
Francois-Xavier Coudert
e89d0befe3 Fortran: provide a fallback implementation of issignaling
For targets with IEEE support but without the issignaling macro in libc
(currently, everywhere except glibc), this allows us to provide a fallback
implementation. In order to keep the code in ieee_helper.c relatively
readable, I've put that new implementation in a separate file,
issignaling_fallback.h.

libgfortran/ChangeLog:

	* ieee/issignaling_fallback.h: New file.
	* ieee/ieee_helper.c: Include issignaling_fallback.h when target
	does not define issignaling macro.

gcc/testsuite/ChangeLog:

	* gfortran.dg/ieee/signaling_1.f90: Do not require issignaling.
	* gfortran.dg/ieee/signaling_2.f90: Add comment.
	* gfortran.dg/ieee/signaling_3.f90: New test.
2022-01-24 23:16:16 +01:00
Raoni Fassina Firmino
4343f5e256 rtl: builtins: (not just) rs6000: Add builtins for fegetround, feclearexcept and feraiseexcept [PR94193]
This optimizations were originally in glibc, but was removed
and suggested that they were a good fit as gcc builtins[1].

feclearexcept and feraiseexcept were extended (in comparison to the
glibc version) to accept any combination of the accepted flags, not
limited to just one flag bit at a time anymore.

The builtin expanders needs knowledge of the target libc's FE_*
values, so they are limited to expand only to suitable libcs.

[1] https://sourceware.org/legacy-ml/libc-alpha/2020-03/msg00047.html
    https://sourceware.org/legacy-ml/libc-alpha/2020-03/msg00080.html

2020-08-13  Raoni Fassina Firmino  <raoni@linux.ibm.com>

gcc/
	PR target/94193
	* builtins.cc (expand_builtin_fegetround): New function.
	(expand_builtin_feclear_feraise_except): New function.
	(expand_builtin): Add cases for BUILT_IN_FEGETROUND,
	BUILT_IN_FECLEAREXCEPT and BUILT_IN_FERAISEEXCEPT.
	* config/rs6000/rs6000.md (fegetroundsi): New pattern.
	(feclearexceptsi): New Pattern.
	(feraiseexceptsi): New Pattern.
	* doc/extend.texi: Add a new introductory paragraph about the
	new builtins.
	* doc/md.texi: (fegetround@var{m}): Document new optab.
	(feclearexcept@var{m}): Document new optab.
	(feraiseexcept@var{m}): Document new optab.
	* optabs.def (fegetround_optab): New optab.
	(feclearexcept_optab): New optab.
	(feraiseexcept_optab): New optab.

gcc/testsuite/
	PR target/94193
	* gcc.target/powerpc/builtin-feclearexcept-feraiseexcept-1.c: New test.
	* gcc.target/powerpc/builtin-feclearexcept-feraiseexcept-2.c: New test.
	* gcc.target/powerpc/builtin-fegetround.c: New test.

Signed-off-by: Raoni Fassina Firmino <raoni@linux.ibm.com>
2022-01-24 17:00:11 +00:00
Patrick Palka
b1aa2a3cf1 c++: Fix non-portable default argument of make_auto_1 [PR104197]
Avoid using the macro current_template_depth, which expands to an
expression that uses __FUNCTION__, within the signature of a function.

	PR c++/104197

gcc/cp/ChangeLog:

	* pt.cc (make_auto_1): Use -1 as a placeholder default argument
	for level.
2022-01-24 11:47:13 -05:00
Patrick Palka
2a908f3da0 c++: value category of compound object expr [PR104173]
Here the call to (the &&-qualified) toLower() is incorrectly rejected
during overload resolution because the object expression is encoded as
an lvalue when it's really a prvalue.  The object expression,
instance()->applicationName(), is encoded as an INDIRECT_REF of a
COMPOUND_EXPR

  *(*instance ();, &TARGET_EXPR <D.2383, QCoreApplication::applicationName ()>;);

which lvalue_kind deems an lvalue.

This issue is similar to PR88103 except that here the original compound
object expression is a prvalue rather than an xvalue.  The fix there was to
adjust the result of unary_complex_lvalue in build_class_member_access_expr
so that xvalueness of the original expression is preserved.  This patch
extends that fix so that rvalueness is preserved more generally.

	PR c++/104173

gcc/cp/ChangeLog:

	* typeck.cc (build_class_member_access_expr): Extend
	unary_complex_lvalue result adjustment to preserve all
	rvalues, not just xvalues.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/ref-qual21.C: New test.
2022-01-24 09:17:35 -05:00
Martin Liska
978abe918f gcc-changelog: Be stricter for top-level dir.
contrib/ChangeLog:

	* gcc-changelog/git_commit.py: New files in toplev must
	be explicitly marked as "New file".
	* gcc-changelog/test_email.py: Test.
	* gcc-changelog/test_patches.txt: Add test.
2022-01-24 13:26:30 +01:00
Richard Biener
f1af8528d3 tree-optimization/102131 - fix niter analysis wrt overflow
This fixes the overflow issues seen with analyzing
BASE0 + STEP0 cmp BASE1 + STEP1 as BASE0 + STEP0 - STEP1 cmp BASE1
by following the logic we have when simplifying comparisons.

2022-01-24  Richard Biener  <rguenther@suse.de>
	    Jiufu Guo  <guojiufu@linux.ibm.com>

	PR tree-optimization/100740
	PR tree-optimization/101508
	PR tree-optimization/101972
	PR tree-optimization/102131
	* tree-ssa-loop-niter.cc (number_of_iterations_cond): Properly
	constrain BASE0 + STEP0 cmp BASE1 + STEP1 to
	BASE0 + STEP0 - STEP1 cmp BASE1 transform.

	* gcc.dg/torture/pr100740.c: New testcase.
	* gcc.dg/torture/pr101508.c: Likewise.
	* gcc.dg/torture/pr101972.c: Likewise.
	* gcc.dg/torture/pr102131-1.c: Likewise.
	* gcc.dg/torture/pr102131-2.c: Likewise.
	* gcc.dg/torture/pr102131-3.c: Likewise.
	* gcc.dg/torture/pr102131-4.c: Likewise.
2022-01-24 13:15:04 +01:00
Martin Liska
2755037e40 acinclude.m4: Remove duplicite AC_DEFUN.
libatomic/ChangeLog:

	* acinclude.m4: Remove duplicate
	LIBAT_CHECK_LINKER_FEATURES.
	* configure: Regenerate.
2022-01-24 12:07:02 +01:00
Jakub Jelinek
0ebb09f5e4 options: Add EnumBitSet property support [PR104158]
On Sat, Jan 22, 2022 at 01:47:08AM +0100, Jakub Jelinek via Gcc-patches wrote:
> I think with the 2) patch I achieve what we want for Fortran, for 1)
> the only behavior from gcc 11 is that
> -fsanitize-coverage=trace-cmp,trace-cmp is now rejected.
> This is mainly from the desire to disallow
> -fconvert=big-endian,little-endian or -Wbidi-chars=bidirectional,any
> etc. where it would be confusing to users what exactly it means.
> But it is the only from these options that actually acts as an Enum
> bit set, each enumerator can be specified with all the others.
> So one option would be stop requiring the EnumSet implies Set properties
> must be specified and just require that either they are specified on all
> EnumValues, or on none of them; the latter case would be for
> -fsanitize-coverage= and the non-Set case would mean that all the
> EnumValues need to have disjoint Value bitmasks and that they can
> be all specified and unlike the Set case also repeated.
> Thoughts on this?

Here is an incremental patch to the first two patches of the series
that implements EnumBitSet that fully restores the -fsanitize-coverage
GCC 11 behavior.

2022-01-24  Jakub Jelinek  <jakub@redhat.com>

	PR sanitizer/104158
	* opt-functions.awk (var_set): Handle EnumBitSet property.
	* optc-gen.awk: Don't disallow RejectNegative if EnumBitSet is
	specified.
	* opts.h (enum cl_enum_var_value): New type.
	* opts-common.cc (decode_cmdline_option): Use CLEV_* values.
	Handle CLEV_BITSET.
	(cmdline_handle_error): Handle CLEV_BITSET.
	* opts.cc (test_enum_sets): Also test EnumBitSet requirements.
	* doc/options.texi (EnumBitSet): Document.
	* common.opt (fsanitize-coverage=): Use EnumBitSet instead of
	EnumSet.
	(trace-pc, trace-cmp): Drop Set properties.

	* gcc.dg/sancov/pr104158-7.c: Adjust for repeating of arguments
	being allowed.
2022-01-24 11:53:08 +01:00
Jakub Jelinek
9acd5a0117 fortran: Extend -fconvert= option for ppc64le r16_ieee and r16_ibm
This patch on top of the previously posted option handling changes patch
allows specifying -fconvert=swap,r16_ieee etc. (but will error on it
when not on powerpc64le because in the library such swapping is only
implemented for HAVE_REAL_17).

2022-01-24  Jakub Jelinek  <jakub@redhat.com>

	* lang.opt (fconvert=): Add EnumSet property and mention also
	r16_ieee and r16_ibm arguments.
	(big-endian, little-endian, native, swap): Add Set(1) property.
	(r16_ieee, r16_ibm): New EnumValue entries with Set(2) property.
	* trans-types.cc (gfc_init_kinds): Emit gfc_fatal_error for
	-fconvert=r16_ieee or -fconvert=r16_ibm when R16_IEEE <=> R16_IBM
	conversions aren't supported.
2022-01-24 11:52:30 +01:00
Jakub Jelinek
cd0377a460 options: Fix up -fsanitize-coverage= [PR104158]
This is incremental patch to fix up -fsanitize-coverage= option
handling, allow -fno-sanitize-coverage= again, allow both
options together in one option or make
-fsanitize-coverage=trace-pc -fsanitize-coverage=trace-cmp
actually enable both suboptions rather than the last one.

2022-01-24  Jakub Jelinek  <jakub@redhat.com>

	PR sanitizer/104158
	* common.opt (flag_sanitize_coverage): Remove Variable entry.
	(fsanitize-coverage=): Remove RejectNegative property, add
	Var(flag_sanitize_coverage) and EnumSet properties.
	(trace-pc): Add Set(1) property.
	(trace-cmp): Add Set(2) property.
	* opts.cc (common_handle_option): Don't handle
	OPT_fsanitize_coverage_.

	* gcc.dg/spellcheck-options-24.c: New test.
	* gcc.dg/sancov/pr104158-1.c: New test.
	* gcc.dg/sancov/pr104158-2.c: New test.
	* gcc.dg/sancov/pr104158-3.c: New test.
	* gcc.dg/sancov/pr104158-4.c: New test.
	* gcc.dg/sancov/pr104158-5.c: New test.
	* gcc.dg/sancov/pr104158-6.c: New test.
	* gcc.dg/sancov/pr104158-7.c: New test.
2022-01-24 11:51:49 +01:00
Jakub Jelinek
385196adb5 options: Add EnumSet and Set property support [PR104158]
The following patch is infrastructure support for at least 3 different
options that need changes:
1) PR104158 talks about a regression with the -fsanitizer-coverage=
   option; in GCC 11 and older and on trunk prior to r12-1177, this
   option behaved similarly to -f{,no-}sanitizer{,-recover}= options,
   namely that the option allows negative and argument of the option
   is a list of strings, each of them has some enumerator and
   -fsanitize-coverage= enabled those bits in the underlying
   flag_sanitize_coverage, while -fno-sanitize-coverage= disabled them.
   So, -fsanitize-coverage=trace-pc,trace-cmp was equivalent to
   -fsanitize-coverage=trace-pc -fsanitize-coverage=trace-cmp and both
   set flag_sanitize_coverage to
   (SANITIZE_COV_TRACE_PC | SANITIZE_COV_TRACE_CMP)
   Also, e.g.
   -fsanitize-coverage=trace-pc,trace-cmp -fno-sanitize-coverage=trace-pc
   would in the end set flag_sanitize_coverage to
   SANITIZE_COV_TRACE_CMP (first set both bits, then subtract one)
   The r12-1177 change, I think done to improve argument misspelling
   diagnostic, changed the option incompatibly in multiple ways,
   -fno-sanitize-coverage= is now rejected, only a single argument
   is allowed, not multiple and
   -fsanitize-coverage=trace-pc -fsanitize-coverage=trace-cmp
   enables just SANITIZE_COV_TRACE_CMP and not both (each option
   overrides the previous value)
2) Thomas Koenig wants to extend Fortran -fconvert= option for the
   ppc64le real(kind=16) swapping support; currently the option
   accepts -fconvert={native,swap,big-endian,little-endian} and the
   intent is to add support for -fconvert=r16_ibm and -fconvert=r16_ieee
   (that alone is just normal Enum), but also to handle
   -fconvert=swap,r16_ieee or -fconvert=r16_ieee,big-endian but not
   -fconvert=big-endian,little-endian - the
   native/swap/big-endian/little-endian are one mutually exclusive set
   and r16_ieee/r16_ibm another one.
   See https://gcc.gnu.org/pipermail/gcc-patches/2022-January/587943.html
   and thread around that.
3) Similarly Marek Polacek wants to extend the -Wbidi-chars= option,
   such that it will handle not just the current
   -Wbidi-chars={none,bidirectional,any}, but also -Wbidi-chars=ucn
   and bidirectional,ucn and ucn,any etc.  Again two separate sets,
   one none/bidirectional/any and another one ucn.
   See https://gcc.gnu.org/pipermail/gcc-patches/2022-January/588960.html

The following patch adds framework for this and I'll post incremental
patches for 1) and 2).
As I've tried to document, such options are marked by additional
EnumSet property on the option and in that case all the EnumValues
in the Enum referenced from it must use a new Set property with set
number (initially I wanted just mark last enumerator in each mutually
exclusive set, but optionlist is sorted and so it doesn't really work
well).  So e.g. for the Fortran -fconvert=, one specifies:
fconvert=
Fortran RejectNegative Joined Enum(gfc_convert) EnumSet Var(flag_convert) Init(GFC_FLAG_CONVERT_NATIVE)
-fconvert=<big-endian|little-endian|native|swap|r16_ieee|r16_ibm>      The endianness used for unformatted files.

Enum
Name(gfc_convert) Type(enum gfc_convert) UnknownError(Unrecognized option to endianness value: %qs)

EnumValue
Enum(gfc_convert) String(big-endian) Value(GFC_FLAG_CONVERT_BIG) Set(1)

EnumValue
Enum(gfc_convert) String(little-endian) Value(GFC_FLAG_CONVERT_LITTLE) Set(1)

EnumValue
Enum(gfc_convert) String(native) Value(GFC_FLAG_CONVERT_NATIVE) Set(1)

EnumValue
Enum(gfc_convert) String(swap) Value(GFC_FLAG_CONVERT_SWAP) Set(1)

EnumValue
Enum(gfc_convert) String(r16_ieee) Value(GFC_FLAG_CONVERT_R16_IEEE) Set(2)

EnumValue
Enum(gfc_convert) String(r16_ibm) Value(GFC_FLAG_CONVERT_R16_IBM) Set(2)

and this says to the option handling code that
1) if only one arg is specified to one instance of the option, it can be any
of those 6
2) if two args are specified, one has to be from the first 4 and another
from the last 2, in any order
3) at most 2 args may be specified (there are just 2 sets)

There is a requirement on the Value values checked in self-test, the
values from one set ored together must be disjunct from values from
another set ored together.  In the Fortran case, the first 4 are 0-3
so mask is 3, and the last 2 are 4 and 8, so mask is 12.
When say -fconvert=big-endian is specified, it sets the first set
to GFC_FLAG_CONVERT_BIG (2) but doesn't modify whatever value the
other set had, so e.g.
-fconvert=big-endian -fconvert=r16_ieee
-fconvert=r16_ieee -fconvert=big-endian
-fconvert=r16_ieee,big_endian
-fconvert=big_endian,r16_ieee
all behave the same.

Also, with the EnumSet support, it is now possible to allow
not specifying RejectNegative - we can set some set's value and
then clear it and set it again to some other value etc.

I think with the 2) patch I achieve what we want for Fortran, for 1)
the only behavior from gcc 11 is that
-fsanitize-coverage=trace-cmp,trace-cmp is now rejected.
This is mainly from the desire to disallow
-fconvert=big-endian,little-endian or -Wbidi-chars=bidirectional,any
etc. where it would be confusing to users what exactly it means.
But it is the only from these options that actually acts as an Enum
bit set, each enumerator can be specified with all the others.
So one option would be stop requiring the EnumSet implies Set properties
must be specified and just require that either they are specified on all
EnumValues, or on none of them; the latter case would be for
-fsanitize-coverage= and the non-Set case would mean that all the
EnumValues need to have disjoint Value bitmasks and that they can
be all specified and unlike the Set case also repeated.
Thoughts on this?

2022-01-24  Jakub Jelinek  <jakub@redhat.com>

	PR sanitizer/104158
	* opt-functions.awk (var_set): Handle EnumSet property.
	* optc-gen.awk: Don't disallow RejectNegative if EnumSet is
	specified.
	* opt-read.awk: Handle Set property.
	* opts.h (CL_ENUM_SET_SHIFT, CL_ERR_ENUM_SET_ARG): Define.
	(struct cl_decoded_option): Mention enum in value description.
	Add mask member.
	(set_option): Add mask argument defaulted to 0.
	* opts.cc (test_enum_sets): New function.
	(opts_cc_tests): Call it.
	* opts-common.cc (enum_arg_to_value): Change return argument
	from bool to int, on success return index into the cl_enum_arg
	array, on failure -1.  Add len argument, if non-0, use strncmp
	instead of strcmp.
	(opt_enum_arg_to_value): Adjust caller.
	(decode_cmdline_option): Handle EnumSet represented as
	CLVC_ENUM with non-zero var_value.  Initialize decoded->mask.
	(decode_cmdline_options_to_array): CLear opt_array[0].mask.
	(handle_option): Pass decoded->mask to set_options last argument.
	(generate_option): Clear decoded->mask.
	(generate_option_input_file): Likewise.
	(cmdline_handle_error): Handle CL_ERR_ENUM_SET_ARG.
	(set_option): Add mask argument, use it for CLVC_ENUM.
	(control_warning_option): Adjust enum_arg_to_value caller.
	* doc/options.texi: Document Set and EnumSet properties.
2022-01-24 11:50:15 +01:00
Jakub Jelinek
2c31a8be4a properly disable -fsplit-stack on non-glibc targets [PR104170]
On Sat, Jan 22, 2022 at 10:32:21AM +0100, Martin Liška wrote:
> I've just noticed the patch broke a few cross compilers:
>
> s390x-ibm-tpf:
>
> /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/s390/s390-common.cc: In function ‘bool s390_supports_split_stack(bool, gcc_options*)’:
> /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/s390/s390-common.cc:126:13: error: ‘struct gcc_options’ has no member named ‘x_linux_libc’
>   126 |   if (opts->x_linux_libc == LIBC_GLIBC)
>       |             ^~~~~~~~~~~~
>
> i686-kopensolaris-gnu, i686-symbolics-gnu
>
> /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/i386/i386-common.cc: In function ‘bool ix86_supports_split_stack(bool, gcc_options*)’:
> /home/marxin/buildworker/zen2-cross-compilers/build/gcc/common/config/i386/i386-common.cc:1721:13: error: ‘struct gcc_options’ has no member named ‘x_linux_libc’
>  1721 |   if (opts->x_linux_libc != LIBC_GLIBC)
>       |             ^~~~~~~~~~~~
> make[1]: *** [Makefile:2418: i386-common.o] Error 1
>
> Can you please take a look? Btw. do you have a bugzilla account?

I bet instead of opts->x_linux_libc != LIBC_GLIBC it needs to use
 #ifdef OPTION_GLIBC
   if (!OPTION_GLIBC)
 #endif
or so.  I think the first committed patch actually used that
but used it in #if directive, which is wrong because it is something
that needs to be evaluated at runtime.

That doesn't work well either, because the *supports_split_stack
hooks have opts argument and OPTION_GLIBC doesn't take that.

So, here is a patch that introduces OPTION_*_P macros that take opts
as an argument and redefines OPTION_* using those (similarly to how
the option scripts create TARGET_*_P and TARGET_* macros).

2022-01-24  Jakub Jelinek  <jakub@redhat.com>

	PR bootstrap/104170
	* config/linux.h (OPTION_GLIBC_P, OPTION_UCLIBC_P,
	OPTION_BIONIC_P, OPTION_MUSL_P): Define.
	(OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine
	using OPTION_*_P macros.
	* config/alpha/linux.h (OPTION_GLIBC_P, OPTION_UCLIBC_P,
	OPTION_BIONIC_P, OPTION_MUSL_P): Define.
	(OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine
	using OPTION_*_P macros.
	* config/rs6000/linux.h (OPTION_GLIBC_P, OPTION_UCLIBC_P,
	OPTION_BIONIC_P, OPTION_MUSL_P): Define.
	(OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine
	using OPTION_*_P macros.
	* config/rs6000/linux64.h (OPTION_GLIBC_P, OPTION_UCLIBC_P,
	OPTION_BIONIC_P, OPTION_MUSL_P): Define.
	(OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine
	using OPTION_*_P macros.
	* config/fuchsia.h (OPTION_MUSL_P): Redefine.
	* config/glibc-stdint.h (OPTION_MUSL_P): Define if not defined.
	* common/config/s390/s390-common.cc (s390_supports_split_stack): Re-add
	ATTRIBUTE_UNUSED to opts parameter.  If OPTION_GLIBC_P is defined, use
	OPTION_GLIBC_P (opts) as condition, otherwise assume if (false).
	* common/config/i386/i386-common.cc (ix86_supports_split_stack): If
	OPTION_GLIBC_P is defined use !OPTION_GLIBC_P (opts) as condition,
	otherwise assume if (true).
2022-01-24 11:13:39 +01:00
Kito Cheng
c106529eb2 RISC-V: Fix testcase after bump isa spec version
Extension version might be different among different ISA spec version,
add explicitly isa-spec version to prevent that might fail when build
GCC with different default ISA version.

gcc/testsuite/ChangeLog

	* gcc.target/riscv/attribute-19.c: Add -misa-spec=2.2
2022-01-24 17:46:01 +08:00
Kito Cheng
ca2bbb88f9 RISC-V: Do not emit zcisr and zifencei if i-ext is 2.0
I-ext 2.0 already included zicsr and zifencei, skip that prevent
confusing binutils.

gcc/ChangeLog

	* common/config/riscv/riscv-common.cc (riscv_subset_list::to_string):
	Skip zicsr and zifencei if I-ext is 2.0.
2022-01-24 17:44:12 +08:00
Jia-Wei Chen
98416dbb0a RISC-V: Change default ISA version into 20191213
Bump default ISA spec to newer version 20191213, current default ISA spec
is 2.2, but it's already out of date for a long time, sync with binutils
ISA version, convention in toolchain use.

gcc/ChangeLog:

	* config.gcc: Modify default isa_spec version.
2022-01-24 17:42:21 +08:00
Jiufu Guo
634de54f9c Update the type of control.base after changed
This patch correct the type of niter->control.base, when it is updated
as a PLUS expr.
During build PLUS expr, the result type should align with the type of
the operands.

	PR tree-optimization/102087

gcc/ChangeLog:

	* tree-ssa-loop-niter.cc (number_of_iterations_until_wrap):
	Correct PLUS result type.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr102087_1.c: New test.
2022-01-24 17:07:16 +08:00
LiaoShihua
add6bb52e3 RISC-V: Update testcases info with new implement info
After commit 591b6e00d1 " riscv: fix -Wformat-diag errors ", some strings in implement was changed.
    This patch update the check info in testcases to sync with it.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/arch-9.c: Update the check info.
	* gcc.target/riscv/arch-10.c: Ditto.
	* gcc.target/riscv/arch-12.c: Ditto.
2022-01-24 11:27:11 +08:00
David Edelsohn
7b84fa2a2d testsuite: Ignore pr104159 psabi warning.
gcc/testsuite/ChangeLog:

	* gcc.dg/analyzer/torture/pr104159.c: Ignore psabi warning.
2022-01-23 20:09:15 -05:00
H.J. Lu
4d2321314a x86: Also check mode of memory broadcast in bcst_mem_operand
Return false for invalid mode on memory broadcast in bcst_mem_operand:

(vec_duplicate:V16SF (mem/j:V4SF (reg/v/f:DI 109 [ b ])))

gcc/

	PR target/104188
	* config/i386/predicates.md (bcst_mem_operand): Also check mode
	of memory broadcast.

gcc/testsuite/

	PR target/104188
	* gcc.target/i386/pr104188.c: New test.
2022-01-23 16:40:24 -08:00