gcc.git
4 years agolibgo: handle linking to NetBSD's versioned symbols
Nikhil Benesch [Mon, 26 Oct 2020 18:42:08 +0000 (18:42 +0000)]
libgo: handle linking to NetBSD's versioned symbols

On NetBSD, for backwards compatibility, various libc symbols are
renamed to a symbol with a version suffix. For example, this is the
(abbreviated) definition of sigaction:

    int sigaction(...) __asm__ ("__sigaction14")

This poses a challenge for libgo, which attempts to link sigaction by
way of an "//extern" comment:

    //extern sigaction
    func sigaction(...)

This results in a reference to the deprecated compatibility symbol
"sigaction", rather than the desired "__sigaction14" symbol.

This patch introduces a new "//extern-sysinfo" comment to handle this
situation. The new mklinknames.awk script scans a package for these
comments and outputs a "//go:linkname" directive that links the wrapper
to the correct versioned symbol, as determined by parsing the __asm__
annotation on the function's declaration in gen-sysinfo.go.

For now, only the following packages are scanned by mklinknames.awk:

    os
    os/user
    runtime
    syscall

gotools/:
* Makefile.am (check-runtime): Add runtime_linknames.go to
--extrafiles.
* Makefile.in: Regenerate.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265125

4 years agoDaily bump.
GCC Administrator [Thu, 29 Oct 2020 00:16:50 +0000 (00:16 +0000)]
Daily bump.

4 years agoanalyzer: more non-determinism fixes
David Malcolm [Thu, 29 Oct 2020 00:11:41 +0000 (20:11 -0400)]
analyzer: more non-determinism fixes

gcc/analyzer/ChangeLog:
* program-state.cc (sm_state_map::on_liveness_change): Sort the
leaking svalues before calling on_state_leak.
(program_state::detect_leaks): Likewise when calling
on_svalue_leak.
* region-model-reachability.cc
(reachable_regions::mark_escaped_clusters): Likewise when
calling on_escaped_function.

4 years agoanalyzer: fix false leak diagnostic on offsets from malloc [PR97608]
David Malcolm [Thu, 29 Oct 2020 00:10:39 +0000 (20:10 -0400)]
analyzer: fix false leak diagnostic on offsets from malloc [PR97608]

gcc/analyzer/ChangeLog:
PR analyzer/97608
* region-model-reachability.cc (reachable_regions::handle_sval):
Operands of reachable reversible operations are reachable.

gcc/testsuite/ChangeLog:
PR analyzer/97608
* gcc.dg/analyzer/malloc-1.c (test_42d): New.
* gcc.dg/analyzer/pr97608.c: New test.

4 years agoanalyzer: move svalue and region decls to their own header files
David Malcolm [Thu, 29 Oct 2020 00:09:04 +0000 (20:09 -0400)]
analyzer: move svalue and region decls to their own header files

gcc/ChangeLog:
* Makefile.in (ANALYZER_OBJS): Add analyzer/complexity.o.

gcc/analyzer/ChangeLog:
* analyzer.h (class state_machine): New forward decl.
(class logger): Likewise.
(class visitor): Likewise.
* complexity.cc: New file, taken from svalue.cc.
* complexity.h: New file, taken from region-model.h.
* region-model.h: Include "analyzer/svalue.h" and
"analyzer/region.h".  Move struct complexity to complexity.h.
Move svalue, its subclasses and supporting decls to svalue.h.
Move region, its subclasses and supporting decls to region.h.
* region.cc: Include "analyzer/region.h".
(symbolic_region::symbolic_region): Move here from region-model.h.
* region.h: New file, based on material from region-model.h.
* svalue.cc: Include "analyzer/svalue.h".
(complexity::complexity): Move to complexity.cc.
(complexity::from_pair): Likewise.
* svalue.h: New file, based on material from region-model.h.

4 years agoanalyzer: fix more pointer-printing in logs
David Malcolm [Thu, 29 Oct 2020 00:07:35 +0000 (20:07 -0400)]
analyzer: fix more pointer-printing in logs

gcc/analyzer/ChangeLog:
* program-state.cc (sm_state_map::print): Guard the printing of
the origin pointer with !flag_dump_noaddr.
* region.cc (string_region::dump_to_pp): Likewise for
m_string_cst.

4 years agolibstdc++: Fix linker script
Jonathan Wakely [Wed, 28 Oct 2020 23:10:21 +0000 (23:10 +0000)]
libstdc++: Fix linker script

libstdc++-v3/ChangeLog:

* config/abi/pre/gnu.ver (GLIBCXX_3.4.29): Remove duplicate
patterns.
(CXXABI_1.3.13): Restore missing piece.

4 years ago[RS6000] Don't be too clever with dg-do run and dg-do compile
Alan Modra [Wed, 28 Oct 2020 08:33:04 +0000 (19:03 +1030)]
[RS6000] Don't be too clever with dg-do run and dg-do compile

Otherwise some versions of dejagnu go ahead and run the vsx tests
below when they should not.  To best cope with older dejagnu, put
"run" before "compile", the idea being that if the second dg-do always
wins then that won't cause fails.

The altivec tests also need -save-temps for the scan-assembler test to
occur when vms_hw.

* gcc.target/powerpc/vsx-load-element-extend-char.c: Put "dg-do run"
before "dg-do compile", and make them mutually exclusive.
* gcc.target/powerpc/vsx-load-element-extend-int.c: Likewise.
* gcc.target/powerpc/vsx-load-element-extend-longlong.c: Likewise.
* gcc.target/powerpc/vsx-load-element-extend-short.c: Likewise.
* gcc.target/powerpc/vsx-store-element-truncate-char.c: Likewise.
* gcc.target/powerpc/vsx-store-element-truncate-int.c: Likewise.
* gcc.target/powerpc/vsx-store-element-truncate-longlong.c: Likewise.
* gcc.target/powerpc/vsx-store-element-truncate-short.c: Likewise.
* gcc.target/powerpc/altivec-consts.c: Likewise, add -save-temps.
* gcc.target/powerpc/le-altivec-consts.c: Likewise.

4 years ago[RS6000] float128-type-2.c unsupported
Alan Modra [Wed, 28 Oct 2020 05:27:57 +0000 (15:57 +1030)]
[RS6000] float128-type-2.c unsupported

I noticed this test is unsupported on power10 when looking through
test logs.  There seems no reason why that should be the case, ie.
the target test was meant to be powerpc64*-*-linux*.  And that
simplifies down further.

* gcc.target/powerpc/float128-type-1.c: Simplify target test.
* gcc.target/powerpc/float128-type-2.c: Likewise.

4 years agoRe: testsuite: Enable and adjust powerpc fold-vec-extract/insert testcases
Alan Modra [Tue, 27 Oct 2020 23:37:44 +0000 (10:07 +1030)]
Re: testsuite: Enable and adjust powerpc fold-vec-extract/insert testcases

git commit badeac77f552 changed expected number of addi instructions,
causing these fails on powerpc-linux.

gcc.target/powerpc/fold-vec-insert-int-p9.c: \\maddi\\M found 12 times
FAIL: gcc.target/powerpc/fold-vec-insert-int-p9.c scan-assembler-times \\maddi\\M 8
gcc.target/powerpc/fold-vec-extract-char.p9.c: addi found 6 times
FAIL: gcc.target/powerpc/fold-vec-extract-char.p9.c scan-assembler-times addi 3
gcc.target/powerpc/fold-vec-extract-int.p9.c: \\maddi\\M found 6 times
FAIL: gcc.target/powerpc/fold-vec-extract-int.p9.c scan-assembler-times \\maddi\\M 3
gcc.target/powerpc/fold-vec-extract-longlong.p7.c: \\maddi\\M found 6 times
FAIL: gcc.target/powerpc/fold-vec-extract-longlong.p7.c scan-assembler-times \\maddi\\M 4
gcc.target/powerpc/fold-vec-extract-longlong.p8.c: \\maddi\\M found 6 times
FAIL: gcc.target/powerpc/fold-vec-extract-longlong.p8.c scan-assembler-times \\maddi\\M 4
changed by badeac77f552

I'm not at all sure why we are counting addi.  On linux I see
eight in fold-vec-insert-int-p9.c tearing down the stack frame in
function epilogues, and four in
        addi 9,1,16
        lvewx 0,0,9
For aix you have the above four but with a -16 offset.  There are no
stack frames, and you have four addressing stack red-zone as
        addi 9,1,-64

fold-vec-extract-char.p9.c on linux just has epilogue addi, aix has
red-zone addressing.  The same for fold-vec-extract-int.p9.c,
fold-vec-extract-longlong.p7.c and fold-vec-extract-longlong.p8.c.

It seems silly to count addi in a function epilogue, and fragile to
count them in code.  So remove the ilp32 addi checks.

* gcc.target/powerpc/fold-vec-extract-char.p9.c: Don't check addi
count for ilp32.
* gcc.target/powerpc/fold-vec-extract-int.p9.c: Likewise.
* gcc.target/powerpc/fold-vec-extract-longlong.p7.c: Likewise.
* gcc.target/powerpc/fold-vec-extract-longlong.p8.c: Likewise.
* gcc.target/powerpc/fold-vec-insert-int-p9.c: Likewise.

4 years agoc++: Improve the MVP -Wparentheses diagnostic.
Marek Polacek [Wed, 28 Oct 2020 18:45:27 +0000 (14:45 -0400)]
c++: Improve the MVP -Wparentheses diagnostic.

I noticed that declarator->parenthesized is, for this warning, only set
to the opening paren.  But we can easily make it a range and generate
a nicer diagnostic.  Moreover, we can then offer a fix-it hint.

TL;DR: This patch changes

mvp3.C:8:7: warning: unnecessary parentheses in declaration of ‘i’ [-Wparentheses]
    8 |   int (i);
      |       ^

to

mvp3.C:8:7: warning: unnecessary parentheses in declaration of ‘i’ [-Wparentheses]
    8 |   int (i);
      |       ^~~
mvp3.C:8:7: note: remove parentheses
    8 |   int (i);
      |       ^~~
      |       - -

Tested by using -fdiagnostics-generate-patch and verifying that the
generated patch DTRT.

gcc/cp/ChangeLog:

* decl.c (grokdeclarator): Offer a fix-it hint for the "unnecessary
parentheses in declaration" warning.
* parser.c (cp_parser_direct_declarator): When setting
declarator->parenthesized, use a location range.

gcc/testsuite/ChangeLog:

* g++.dg/warn/mvp3.C: New test.

4 years agoc++: Deprecate arithmetic convs on different enums [PR97573]
Marek Polacek [Tue, 27 Oct 2020 15:16:50 +0000 (11:16 -0400)]
c++: Deprecate arithmetic convs on different enums [PR97573]

I noticed that C++20 P1120R0 deprecated certain arithmetic conversions
as outlined in [depr.arith.conv.enum], but we don't warn about them.  In
particular, "If one operand is of enumeration type and the other operand
is of a different enumeration type or a floating-point type, this
behavior is deprecated."  These will likely become ill-formed in C++23,
so we should warn by default in C++20.  To this effect, this patch adds
two new warnings (like clang++): -Wdeprecated-enum-enum-conversion and
-Wdeprecated-enum-float-conversion.  They are enabled by default in
C++20.  In older dialects, to enable these warnings you can now use
-Wenum-conversion which I made available in C++ too.  Note that unlike
C, in C++ it is not enabled by -Wextra, because that breaks bootstrap.

We already warn about comparisons of two different enumeration types via
-Wenum-compare, the rest is handled in this patch: we're performing the
usual arithmetic conversions in these contexts:
  - an arithmetic operation,
  - a bitwise operation,
  - a comparison,
  - a conditional operator,
  - a compound assign operator.

Using the spaceship operator as enum <=> real_type is ill-formed but we
don't reject it yet.  We should also address [depr.array.comp] too, but
it's not handled in this patch.

gcc/c-family/ChangeLog:

PR c++/97573
* c-opts.c (c_common_post_options): In C++20, turn on
-Wdeprecated-enum-enum-conversion and
-Wdeprecated-enum-float-conversion.
* c.opt (Wdeprecated-enum-enum-conversion,
Wdeprecated-enum-float-conversion): New options.
(Wenum-conversion): Allow for C++ too.

gcc/cp/ChangeLog:

PR c++/97573
* call.c (build_conditional_expr_1): Warn about the deprecated
enum/real type conversion in C++20.  Also warn about a non-enumerated
and enumerated type in ?: when -Wenum-conversion is on.
* typeck.c (do_warn_enum_conversions): New function.
(cp_build_binary_op): Call it.

gcc/ChangeLog:

PR c++/97573
* doc/invoke.texi: Document -Wdeprecated-enum-enum-conversion
and -Wdeprecated-enum-float-conversion.  -Wenum-conversion is
no longer C/ObjC only.

gcc/testsuite/ChangeLog:

PR c++/97573
* g++.dg/cpp0x/linkage2.C: Add dg-warning.
* g++.dg/parse/attr3.C: Likewise.
* g++.dg/cpp2a/enum-conv1.C: New test.
* g++.dg/cpp2a/enum-conv2.C: New test.
* g++.dg/cpp2a/enum-conv3.C: New test.

4 years agoc++: Prevent warnings for value-dependent exprs [PR96742]
Marek Polacek [Sat, 24 Oct 2020 19:26:27 +0000 (15:26 -0400)]
c++: Prevent warnings for value-dependent exprs [PR96742]

Here, in r11-155, I changed the call to uses_template_parms to
type_dependent_expression_p_push to avoid a crash in C++98 in
value_dependent_expression_p on a non-constant expression.  But that
prompted a host of complaints that we now warn for value-dependent
expressions in templates.  Those warnings are technically valid, but
people still don't want them because they're awkward to avoid.  This
patch uses value_dependent_expression_p or type_dependent_expression_p.
But make sure that we don't ICE in value_dependent_expression_p by
checking potential_constant_expression first.

gcc/cp/ChangeLog:

PR c++/96675
PR c++/96742
* pt.c (tsubst_copy_and_build): Call value_dependent_expression_p or
type_dependent_expression_p instead of type_dependent_expression_p_push.
But only call value_dependent_expression_p for expressions that are
potential_constant_expression.

gcc/testsuite/ChangeLog:

PR c++/96675
PR c++/96742
* g++.dg/warn/Wdiv-by-zero-3.C: Turn dg-warning into dg-bogus.
* g++.dg/warn/Wtautological-compare3.C: New test.
* g++.dg/warn/Wtype-limits5.C: New test.
* g++.old-deja/g++.pt/crash10.C: Remove dg-warning.

4 years agotestsuite: Adjust target requirements for sad-vectorize and signbit.
David Edelsohn [Wed, 28 Oct 2020 18:01:17 +0000 (14:01 -0400)]
testsuite: Adjust target requirements for sad-vectorize and signbit.

More testcases with incorrect target selectors.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/sad-vectorize-1.c: Remove AIX skip.
* gcc.target/powerpc/sad-vectorize-2.c: Remove AIX skip.
* gcc.target/powerpc/sad-vectorize-3.c: Remove target.
Require p9vector_hw.
* gcc.target/powerpc/sad-vectorize-4.c: Remove target.
Require p9vector_hw.
* gcc.target/powerpc/signbit-1.c: Remove target.
Require ppc_float128_sw.
* gcc.target/powerpc/signbit-2.c: Remove target.
Require ppc_float128_sw.
* gcc.target/powerpc/signbit-3.c: Remove target.
Require ppc_float128_sw.

4 years agoc++: Member template function lookup failure [PR94799]
Marek Polacek [Mon, 19 Oct 2020 22:13:42 +0000 (18:13 -0400)]
c++: Member template function lookup failure [PR94799]

My earlier patch for this PR, r11-86, broke pybind11.  That patch
changed cp_parser_class_name to also consider the object expression
scope (parser->context->object_type) to fix parsing of

  p->template A<T>::foo(); // consider p's scope too

Here we reject

  b.operator typename B<T>::type();

because 'typename_p' in cp_parser_class_name uses 'scope', which means
that 'typename_p' will be true for the example above.  Then we create
a TYPENAME_TYPE via make_typename_type, which fails when tsubsting it;
the code basically created 'typename B::B' and then we complain that there
is no member named 'B' in 'A<int>'.  So, when deciding if we should
create a TYPENAME_TYPE, don't consider the object_type scope, like we
did pre-r11-86.

gcc/cp/ChangeLog:

PR c++/94799
* parser.c (cp_parser_class_name): Use parser->scope when
setting typename_p.

gcc/testsuite/ChangeLog:

PR c++/94799
* g++.dg/template/lookup16.C: New test.

4 years agoc++: GCC accepts junk before fold-expression [PR86773]
Marek Polacek [Mon, 26 Oct 2020 19:04:58 +0000 (15:04 -0400)]
c++: GCC accepts junk before fold-expression [PR86773]

Here we accept a bogus expression before a left fold:

Recall that a fold expression looks like:

 fold-expression:
    ( cast-expression fold-operator ... )
    ( ... fold-operator cast-expression )
    ( cast-expression fold-operator ... fold-operator cast-expression )

but here we have

    ( cast-expression ... fold-operator cast-expression )

The best fix seems to just return error_mark_node when we know this code
is invalid, and let the subsequent code report that a ) was expected.

gcc/cp/ChangeLog:

PR c++/86773
* parser.c (cp_parser_fold_expression): Return error_mark_node
if a left fold is preceded by an expression.

gcc/testsuite/ChangeLog:

PR c++/86773
* g++.dg/cpp1z/fold12.C: New test.

4 years agosyscall: don't build libcall_bsd.go on solaris
Ian Lance Taylor [Wed, 28 Oct 2020 18:48:19 +0000 (11:48 -0700)]
syscall: don't build libcall_bsd.go on solaris

This new file was based on master sources that are built for *BSD
but not Solaris

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/266017

4 years agoAArch64: Skip test for pr97535 on ILP32 since it can't express the range.
Tamar Christina [Wed, 28 Oct 2020 19:13:27 +0000 (19:13 +0000)]
AArch64: Skip test for pr97535 on ILP32 since it can't express the range.

I am excluding the test from ILP32 since the goal of the test is to test
truncations of large numbers above INT_MAX.

gcc/testsuite/ChangeLog:

PR target/97535
* gcc.target/aarch64/pr97535.c: Exclude ILP32.

4 years agovalue-range: Give up on POLY_INT_CST ranges [PR97457]
Richard Sandiford [Wed, 28 Oct 2020 19:05:49 +0000 (19:05 +0000)]
value-range: Give up on POLY_INT_CST ranges [PR97457]

This PR shows another problem with calculating value ranges for
POLY_INT_CSTs.  We have:

  ivtmp_76 = ASSERT_EXPR <ivtmp_60, ivtmp_60 > POLY_INT_CST [9, 4294967294]>

where the VQ coefficient is unsigned but is effectively acting
as a negative number.  We wrongly give the POLY_INT_CST the range:

  [9, INT_MAX]

and things go downhill from there: later iterations of the unrolled
epilogue are wrongly removed as dead.

I guess this is the final nail in the coffin for doing VRP on
POLY_INT_CSTs.  For other similarly exotic testcases we could have
overflow for any coefficient, not just those that could be treated
as contextually negative.

Testing TYPE_OVERFLOW_UNDEFINED doesn't seem like an option because we
couldn't handle warn_strict_overflow properly.  At this stage we're
just recording a range that might or might not lead to strict-overflow
assumptions later.

It still feels like we should be able to do something here, but for
now removing the code seems safest.  It's also telling that there
are no testsuite failures on SVE from doing this.

gcc/
PR tree-optimization/97457
* value-range.cc (irange::set): Don't decay POLY_INT_CST ranges
to integer ranges.

gcc/testsuite/
PR tree-optimization/97457
* gcc.dg/vect/pr97457.c: New test.

4 years agoc: Allow omitted parameter names for C2x
Joseph Myers [Wed, 28 Oct 2020 18:57:02 +0000 (18:57 +0000)]
c: Allow omitted parameter names for C2x

C2x allows parameter names to be omitted in function definitions, as
in C++; add support for this feature.  As with other features that
only result in previously rejected code being accepted, this feature
is now accepted as an extension for previous standard versions, with a
pedwarn-if-pedantic that is disabled by -Wno-c11-c2x-compat.  The
logic for avoiding unused-parameter warnings for unnamed parameters is
in code shared between C and C++, so no changes are needed there.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c/
2020-10-28  Joseph Myers  <joseph@codesourcery.com>

* c-decl.c (store_parm_decls_newstyle): Use pedwarn_c11 not
error_at for omitted parameter name.

gcc/testsuite/
2020-10-28  Joseph Myers  <joseph@codesourcery.com>

* gcc.dg/c11-parm-omit-1.c, gcc.dg/c11-parm-omit-2.c,
gcc.dg/c11-parm-omit-3.c, gcc.dg/c11-parm-omit-4.c,
gcc.dg/c2x-parm-omit-1.c, gcc.dg/c2x-parm-omit-2.c,
gcc.dg/c2x-parm-omit-3.c, gcc.dg/c2x-parm-omit-4.c: New tests.
* gcc.dg/noncompile/pr79758.c: Do not expect error for omitted
parameter name.

4 years agolibstdc++: Implement C++20 features for <sstream>
Thomas Rodgers [Wed, 28 Oct 2020 18:52:17 +0000 (11:52 -0700)]
libstdc++: Implement C++20 features for <sstream>

New ctors and ::view() accessor for -
  * basic_stingbuf
  * basic_istringstream
  * basic_ostringstream
  * basic_stringstreamm

New ::get_allocator() accessor for basic_stringbuf.

libstdc++-v3/ChangeLog:
* acinclude.m4 (glibcxx_SUBDIRS): Add src/c++20.
* config/abi/pre/gnu.ver (GLIBCXX_3.4.29): New symbols.
* configure: Regenerate.
* include/std/sstream:
(basic_stringbuf::basic_stringbuf(allocator const&)): New constructor.
(basic_stringbuf::basic_stringbuf(openmode, allocator const&)): Likewise.
(basic_stringbuf::basic_stringbuf(basic_string&&, openmode)): Likewise.
(basic_stringbuf::basic_stringbuf(basic_stringbuf&&, allocator const&)):
Likewise.
(basic_stringbuf::get_allocator()): New method.
(basic_stringbuf::view()): Likewise.
(basic_istringstream::basic_istringstream(basic_string&&, openmode)):
New constructor.
(basic_istringstream::basic_istringstream(openmode, allocator const&)):
Likewise
(basic_istringstream::view()): New method.
(basic_ostringstream::basic_ostringstream(basic_string&&, openmode)):
New constructor.
(basic_ostringstream::basic_ostringstream(openmode, allocator const&)):
Likewise
(basic_ostringstream::view()): New method.
(basic_stringstream::basic_stringstream(basic_string&&, openmode)):
New constructor.
(basic_stringstream::basic_stringstream(openmode, allocator const&)):
Likewise
(basic_stringstream::view()): New method.
* src/Makefile.in: Add c++20 directory.
* src/Makefile.am: Regenerate.
* src/c++20/Makefile.am: Add makefile for new sub-directory.
* src/c++20/Makefile.in: Generate.
* src/c++20/sstream-inst.cc: New file defining explicit
instantiations for basic_stringbuf, basic_istringstream,
basic_ostringstream, and basic_stringstream member functions
added in C++20.
* testsuite/27_io/basic_stringbuf/cons/char/2.cc: New test.
* testsuite/27_io/basic_stringbuf/cons/wchar_t/2.cc: Likewise.
* testsuite/27_io/basic_stringbuf/view/char/1.cc: Likewise.
* testsuite/27_io/basic_stringbuf/view/wchar_t/1.cc: Likewise.
* testsuite/27_io/basic_istringstream/cons/char/1.cc: Likewise.
* testsuite/27_io/basic_istringstream/cons/wchar_t/1.cc: Likewise.
* testsuite/27_io/basic_istringstream/view/char/1.cc: Likewise.
* testsuite/27_io/basic_istringstream/view/wchar_t/1.cc: Likewise.
* testsuite/27_io/basic_ostringstream/cons/char/1.cc: Likewise.
* testsuite/27_io/basic_ostringstream/cons/wchar_t/1.cc: Likewise.
* testsuite/27_io/basic_ostringstream/view/char/1.cc: Likewise.
* testsuite/27_io/basic_ostringstream/view/wchar_t/1.cc: Likewise.
* testsuite/27_io/basic_stringstream/cons/char/1.cc: Likewise.
* testsuite/27_io/basic_stringstream/cons/wchar_t/1.cc: Likewise.
* testsuite/27_io/basic_stringstream/view/char/1.cc: Likewise.
* testsuite/27_io/basic_stringstream/view/wchar_t/1.cc: Likewise.

4 years agoc++: Make OMP UDR DECL_LOCAL_DECL_P earlier
Nathan Sidwell [Wed, 28 Oct 2020 18:42:11 +0000 (11:42 -0700)]
c++: Make OMP UDR DECL_LOCAL_DECL_P earlier

I discovered that we were pushing an OMP UDR in a template before
setting DECL_LOCAL_DECL.  This caused the template machinery to give
it some template info.  It doesn't need that, and this changes the
parser to set it earlier.  We have to adjust instantiate_body to not
try and access such a function's non-existant template_info.  The
access checks that we're no longer doing are the same as those we did
on the containing function anyway.  So nothing is lost.

gcc/cp/
* parser.c (cp_parser_omp_declare_reduction): Set
DECL_LOCAL_DECL_P before push_template_decl.
* pt.c (instantiate_body): Nested fns do not have template_info.

4 years agoVSX_EXTRACT fix
Carl Love [Fri, 23 Oct 2020 17:13:55 +0000 (12:13 -0500)]
VSX_EXTRACT fix

2020-10-28  Carl Love  <cel@us.ibm.com>

gcc/

* config/rs6000/vsx.md(xxgenpcvm_<mode>_internal): Remove TARGET_64BIT.

4 years agolibstdc++: Fix arithmetic bug in year_month_weekday conversion [PR96713]
Patrick Palka [Wed, 28 Oct 2020 16:28:08 +0000 (12:28 -0400)]
libstdc++: Fix arithmetic bug in year_month_weekday conversion [PR96713]

The conversion function year_month_weekday::operator sys_days computes
the offset in days from the first weekday of the month with:

 days{(index()-1)*7}
      ^~~~~~~~~~~~~  type 'unsigned'

We want the above to yield -7d when index() is 0u, but our 'days' alias
is based on long instead of int, so the conversion from unsigned to the
underlying type of 'days' instead yields a large positive value.

This patch fixes this by casting the result of index() to int so that
the initializer is sign-extended in the conversion to long.

The added testcase also verifies we do the right thing when index() == 5.

libstdc++-v3/ChangeLog:

PR libstdc++/96713
* include/std/chrono (year_month_weekday::operator sys_days):
Cast the result of index() to int so that the initializer for
days{} is sign-extended when it's converted to the underlying
type.
* testsuite/std/time/year_month_weekday/3.cc: New test.

4 years agodump when SLP analysis fails due to shared vectype mismatch
Richard Biener [Wed, 28 Oct 2020 15:31:06 +0000 (16:31 +0100)]
dump when SLP analysis fails due to shared vectype mismatch

This adds another one.

2020-10-28  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_slp_analyze_node_operations_1): Dump
when shared vectype update fails.

4 years agoc++: Check constraints before instantiation from mark_used [PR95132]
Patrick Palka [Wed, 28 Oct 2020 15:47:26 +0000 (11:47 -0400)]
c++: Check constraints before instantiation from mark_used [PR95132]

This makes mark_used check constraints of a function _before_ calling
maybe_instantiate_decl, so that we don't try instantiating a function
(as part of return type deduction) with unsatisfied constraints.

gcc/cp/ChangeLog:

PR c++/95132
* decl2.c (mark_used): Move up the constraints_satisfied_p check
so that we check constraints before calling maybe_instantiate_decl.

gcc/testsuite/ChangeLog:

PR c++/95132
* g++.dg/cpp2a/concepts-fn7.C: New test.

4 years agoc++: Refactor push_template_decl
Nathan Sidwell [Wed, 28 Oct 2020 15:11:35 +0000 (08:11 -0700)]
c++: Refactor push_template_decl

Sadly I need to wander into push_template_decl again.  But here's a
piece of RAII goodness first.

gcc/cp/
* pt.c (push_template_decl): Refactor for some RAII.

4 years agotestsuite: Correct requirements for vadsdu*, vslv and vsrv testcases.
David Edelsohn [Wed, 28 Oct 2020 15:00:22 +0000 (11:00 -0400)]
testsuite: Correct requirements for vadsdu*, vslv and vsrv testcases.

This patch renmoves extraneous dg-requirement restrictions on the testcases.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/vadsdu-0.c: Remove target.
* gcc.target/powerpc/vadsdu-1.c: Remove target.
* gcc.target/powerpc/vadsdu-2.c: Remove target.
* gcc.target/powerpc/vadsdu-3.c: Remove target.
* gcc.target/powerpc/vadsdu-4.c: Remove target.
* gcc.target/powerpc/vadsdu-5.c: Remove target.
* gcc.target/powerpc/vadsdub-1.c: Remove target.
* gcc.target/powerpc/vadsdub-2.c: Remove target.
* gcc.target/powerpc/vadsduh-1.c: Remove target.
* gcc.target/powerpc/vadsduh-2.c: Remove target.
* gcc.target/powerpc/vadsduw-1.c: Remove target.
* gcc.target/powerpc/vadsduw-2.c: Remove target.
* gcc.target/powerpc/vslv-0.c: Remove target.
* gcc.target/powerpc/vslv-1.c: Remove target.
* gcc.target/powerpc/vsrv-0.c: Remove target.
* gcc.target/powerpc/vsrv-1.c: Remove target.

4 years agoIgnore ignored operands in vect_get_and_check_slp_defs
Richard Biener [Wed, 28 Oct 2020 14:07:02 +0000 (15:07 +0100)]
Ignore ignored operands in vect_get_and_check_slp_defs

This passes down skip_args to vect_get_and_check_slp_defs to skip
ignored ops there, too and not fail SLP discovery.  This fixes
gcc.target/aarch64/sve/reduc_strict_5.c

2020-10-28  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_get_and_check_slp_defs): For skipped
args just push NULLs and vect_uninitialized_def.
(vect_build_slp_tree_2): Allocate skip_args for all ops
and pass it down to vect_get_and_check_slp_defs.

4 years agotestsuite: Correct requirements for byte-in-* testcases.
David Edelsohn [Wed, 28 Oct 2020 14:26:45 +0000 (10:26 -0400)]
testsuite: Correct requirements for byte-in-* testcases.

commit 25ffd3d34e means we no longer define an overloaded
__builtin_byte_in_set for -m32, so the more informative
"__builtin_byte_in_set is not supported in this compiler
configuration" is not reported.

This patch changes byte-in-set-2.c to expect an implicit declaration
warning.  It also removes unnecessary target requirement for all
byte-in-*.c tests and no longer skips AIX.

gcc/testsuite/ChangeLog:

2020-10-28  David Edelsohn  <dje.gcc@gmail.com>
    Alan Modra  <amodra@gmail.com>

* gcc.target/powerpc/byte-in-either-range-0.c: Remove target.
* gcc.target/powerpc/byte-in-either-range-1.c: Remove target.
* gcc.target/powerpc/byte-in-range-0.c: Remove target.
* gcc.target/powerpc/byte-in-range-1.c: Remove target.
* gcc.target/powerpc/byte-in-set-0.c: Remove target.
* gcc.target/powerpc/byte-in-set-1.c: Remove target.
* gcc.target/powerpc/byte-in-set-2.c: Remove target. Expect
implicit declaration warning.

4 years agoFix gcc.dg/vect/bb-slp-5[89].c
Richard Biener [Wed, 28 Oct 2020 13:18:24 +0000 (14:18 +0100)]
Fix gcc.dg/vect/bb-slp-5[89].c

I forgot a vect_double check.

2020-10-28  Richard Biener  <rguenther@suse.de>

* gcc.dg/vect/bb-slp-58.c: Require vect_double.
* gcc.dg/vect/bb-slp-59.c: Likewise.

4 years agotree-optimization/97615 - avoid creating externals from patterns
Richard Biener [Wed, 28 Oct 2020 12:21:53 +0000 (13:21 +0100)]
tree-optimization/97615 - avoid creating externals from patterns

The previous change missed to check for patterns again, the following
corrects that.

2020-10-28  Richard Biener  <rguenther@suse.de>

PR tree-optimization/97615
* tree-vect-slp.c (vect_build_slp_tree_2): Do not build
an external from pattern defs.

* gcc.dg/vect/bb-slp-pr97615.c: New testcase.

4 years agoFix iteration over loads in SLP optimize
Richard Biener [Wed, 28 Oct 2020 13:16:05 +0000 (14:16 +0100)]
Fix iteration over loads in SLP optimize

I've made a typo when refactoring the iteration over all loads in
the SLP graph.  Fixed.

2020-10-28  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_optimize_slp): Fix iteration over
all loads.

4 years agolibstdc++: Add comment to nothrow new explaining catch (...)
Jonathan Wakely [Wed, 28 Oct 2020 13:19:21 +0000 (13:19 +0000)]
libstdc++: Add comment to nothrow new explaining catch (...)

The decision to not rethrow a __forced_unwind exception is deliberate,
so add a comment explaining it.

libstdc++-v3/ChangeLog:

* libsupc++/new_opnt.cc (new): Add comment about forced unwind
exceptions.

4 years agolibstdc++: Override BUFSIZ for Windows targets [PR 94268]
Jonathan Wakely [Wed, 28 Oct 2020 13:19:21 +0000 (13:19 +0000)]
libstdc++: Override BUFSIZ for Windows targets [PR 94268]

This replaces uses of BUFSIZ with a new _GLIBCXX_BUFSIZ macro that can
be overridden in target-specific config headers.

That allows the mingw and mingw-w64 targets to override it, because
BUFSIZ is apparently defined to 512, resulting in poor performance. The
MSVCRT stdio apparently uses 4096, so we use that too.

libstdc++-v3/ChangeLog:

PR libstdc++/94268
* config/os/mingw32-w64/os_defines.h (_GLIBCXX_BUFSIZ):
Define.
* config/os/mingw32/os_defines.h (_GLIBCXX_BUFSIZ):
Define.
* include/bits/fstream.tcc: Use _GLIBCXX_BUFSIZ instead
of BUFSIZ.
* include/ext/stdio_filebuf.h: Likewise.
* include/std/fstream (_GLIBCXX_BUFSIZ): Define.

4 years agoChange the way we split stores in BB vectorization
Richard Biener [Wed, 28 Oct 2020 11:56:16 +0000 (12:56 +0100)]
Change the way we split stores in BB vectorization

The following fixes missed optimizations due to the strange way we
split stores in BB vectorization.  The solution is to split at
the failure boundary and not re-align that to the initial piece
chosen vector size.  Also re-analyze any larger matching rest.

2020-10-28  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_build_slp_instance): Split the store
group at the failure boundary and also re-analyze a large enough
matching rest.

* gcc.dg/vect/bb-slp-68.c: New testcase.

4 years agodump reason for throwing away SLP instance
Richard Biener [Wed, 28 Oct 2020 11:59:07 +0000 (12:59 +0100)]
dump reason for throwing away SLP instance

This adds dumping to vect_slp_analyze_node_alignment when it fails
an SLP instance due to shared vector type conflicts.

2020-10-28  Richard Biener  <rguenther@suse.de>

* tree-vect-data-refs.c (vect_slp_analyze_node_alignment):
Dump when vect_update_shared_vectype fails.

4 years agolibstdc++: Fix name clash with _Cosh in QNX headers [PR 95592]
Jonathan Wakely [Wed, 28 Oct 2020 12:35:44 +0000 (12:35 +0000)]
libstdc++: Fix name clash with _Cosh in QNX headers [PR 95592]

This replaces unqualified names like _Cosh with struct std::_Cosh to
ensure there is no ambiguity with other entities with the same name.

libstdc++-v3/ChangeLog:

PR libstdc++/95592
* include/bits/valarray_after.h (_DEFINE_EXPR_UNARY_OPERATOR)
(_DEFINE_EXPR_BINARY_OPERATOR, _DEFINE_EXPR_BINARY_FUNCTION):
Use elaborated-type-specifier and qualified-id to avoid
ambiguities with QNX system headers.
* testsuite/26_numerics/valarray/95592.cc: New test.

4 years agolibstdc++: Make std::span layout-compatible with struct iovec [PR 95609]
Jonathan Wakely [Wed, 28 Oct 2020 12:07:40 +0000 (12:07 +0000)]
libstdc++: Make std::span layout-compatible with struct iovec [PR 95609]

This change reorders the data members of std::span so that span<byte> is
layout-compatible with common implementations of struct iovec. This will
allow span<byte> to be used directly in places that use a struct iovec
to do scatter-gather I/O.

It's important to note that POSIX doesn't specify the order of members
in iovec. Also the equivalent type on Windows has members in the other
order, and uses type ULONG (which is always 32-bit whereas size_t is
64-bit for Win64). So this change will only help for certain targets and
an indirection between std::span and I/O system calls will still be
needed for the general case.

libstdc++-v3/ChangeLog:

PR libstdc++/95609
* include/std/span (span): Reorder data members to match common
implementations of struct iovec.
* testsuite/23_containers/span/layout_compat.cc: New test.

4 years agoaarch64: Add vstN_lane_bf16 + vstNq_lane_bf16 intrinsics
Andrea Corallo [Thu, 8 Oct 2020 09:02:09 +0000 (11:02 +0200)]
aarch64: Add vstN_lane_bf16 + vstNq_lane_bf16 intrinsics

gcc/ChangeLog

2020-10-19  Andrea Corallo  <andrea.corallo@arm.com>

* config/aarch64/arm_neon.h (__ST2_LANE_FUNC, __ST3_LANE_FUNC)
(__ST4_LANE_FUNC): Rename the macro generating the 'q' variants
into __ST2Q_LANE_FUNC, __ST2Q_LANE_FUNC, __ST2Q_LANE_FUNC so they
all can be undefed at the and of the file.
(vst2_lane_bf16, vst2q_lane_bf16, vst3_lane_bf16, vst3q_lane_bf16)
(vst4_lane_bf16, vst4q_lane_bf16): Add new intrinsics.

gcc/testsuite/ChangeLog

2020-10-19  Andrea Corallo  <andrea.corallo@arm.com>

* gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
(hbfloat16_t): Define type.
(CHECK_FP): Make it working for bfloat types.
* gcc.target/aarch64/advsimd-intrinsics/bf16_vstN_lane_1.c: New file.
* gcc.target/aarch64/advsimd-intrinsics/bf16_vstN_lane_2.c: Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vst2_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vst2q_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vst3_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vst3q_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vst4_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vst4q_lane_bf16_indices_1.c:
Likewise.

4 years agoaarch64: Add bfloat16 vldN_lane_bf16 + vldNq_lane_bf16 intrisics
Andrea Corallo [Thu, 15 Oct 2020 08:16:18 +0000 (10:16 +0200)]
aarch64: Add bfloat16 vldN_lane_bf16 + vldNq_lane_bf16 intrisics

gcc/ChangeLog

2020-10-15  Andrea Corallo  <andrea.corallo@arm.com>

* config/aarch64/arm_neon.h (__LD2_LANE_FUNC, __LD3_LANE_FUNC)
(__LD4_LANE_FUNC): Rename the macro generating the 'q' variants
into __LD2Q_LANE_FUNC, __LD2Q_LANE_FUNC, __LD2Q_LANE_FUNC so they
all can be undefed at the and of the file.
(vld2_lane_bf16, vld2q_lane_bf16, vld3_lane_bf16, vld3q_lane_bf16)
(vld4_lane_bf16, vld4q_lane_bf16): Add new intrinsics.

gcc/testsuite/ChangeLog

2020-10-15  Andrea Corallo  <andrea.corallo@arm.com>

* gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_1.c: New
testcase.
* gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_2.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vld2_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vld2q_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vld3_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vld3q_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vld4_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vld4q_lane_bf16_indices_1.c:
Likewise.

4 years ago[PR97504] riscv needs wraplf for aux_long_long_float too
Alexandre Oliva [Wed, 28 Oct 2020 10:54:33 +0000 (07:54 -0300)]
[PR97504] riscv needs wraplf for aux_long_long_float too

riscv is another platform on which GNAT maps Long_Long_Float to double
rather than long double, so we have to explicitly avoid the long
double intrinsics.

for  gcc/ada/ChangeLog

PR ada/97504
* Makefile.rtl (LIBGNAT_TARGET_PAIRS> <riscv*-*-*>: Use wraplf
version of Aux_Long_Long_Float.

4 years agoopenmp: Parsing and some semantic analysis of OpenMP allocate clause
Jakub Jelinek [Wed, 28 Oct 2020 09:38:01 +0000 (10:38 +0100)]
openmp: Parsing and some semantic analysis of OpenMP allocate clause

This patch adds parsing of OpenMP allocate clause, but still ignores
it during OpenMP lowering where we should for privatized variables
with allocate clause use the corresponding allocators rather than
allocating them on the stack.

2020-10-28  Jakub Jelinek  <jakub@redhat.com>

gcc/
* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_ALLOCATE.
* tree.h (OMP_CLAUSE_ALLOCATE_ALLOCATOR,
OMP_CLAUSE_ALLOCATE_COMBINED): Define.
* tree.c (omp_clause_num_ops, omp_clause_code_name): Add allocate
clause.
(walk_tree_1): Handle OMP_CLAUSE_ALLOCATE.
* tree-pretty-print.c (dump_omp_clause): Likewise.
* gimplify.c (gimplify_scan_omp_clauses, gimplify_adjust_omp_clauses,
gimplify_omp_for): Likewise.
* tree-nested.c (convert_nonlocal_omp_clauses,
convert_local_omp_clauses): Likewise.
* omp-low.c (scan_sharing_clauses): Likewise.
gcc/c-family/
* c-pragma.h (enum pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_ALLOCATE.
* c-omp.c: Include bitmap.h.
(c_omp_split_clauses): Handle OMP_CLAUSE_ALLOCATE.
gcc/c/
* c-parser.c (c_parser_omp_clause_name): Handle allocate.
(c_parser_omp_clause_allocate): New function.
(c_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_ALLOCATE.
(OMP_FOR_CLAUSE_MASK, OMP_SECTIONS_CLAUSE_MASK,
OMP_PARALLEL_CLAUSE_MASK, OMP_SINGLE_CLAUSE_MASK,
OMP_TASK_CLAUSE_MASK, OMP_TASKGROUP_CLAUSE_MASK,
OMP_DISTRIBUTE_CLAUSE_MASK, OMP_TEAMS_CLAUSE_MASK,
OMP_TARGET_CLAUSE_MASK, OMP_TASKLOOP_CLAUSE_MASK): Add
PRAGMA_OMP_CLAUSE_ALLOCATE.
* c-typeck.c (c_finish_omp_clauses): Handle OMP_CLAUSE_ALLOCATE.
gcc/cp/
* parser.c (cp_parser_omp_clause_name): Handle allocate.
(cp_parser_omp_clause_allocate): New function.
(cp_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_ALLOCATE.
(OMP_FOR_CLAUSE_MASK, OMP_SECTIONS_CLAUSE_MASK,
OMP_PARALLEL_CLAUSE_MASK, OMP_SINGLE_CLAUSE_MASK,
OMP_TASK_CLAUSE_MASK, OMP_TASKGROUP_CLAUSE_MASK,
OMP_DISTRIBUTE_CLAUSE_MASK, OMP_TEAMS_CLAUSE_MASK,
OMP_TARGET_CLAUSE_MASK, OMP_TASKLOOP_CLAUSE_MASK): Add
PRAGMA_OMP_CLAUSE_ALLOCATE.
* semantics.c (finish_omp_clauses): Handle OMP_CLAUSE_ALLOCATE.
* pt.c (tsubst_omp_clauses): Likewise.
gcc/testsuite/
* c-c++-common/gomp/allocate-1.c: New test.
* c-c++-common/gomp/allocate-2.c: New test.
* c-c++-common/gomp/clauses-1.c (omp_allocator_handle_t): New typedef.
(foo, bar, baz): Add allocate clauses where allowed.

4 years agoopenmp: Implicitly discover declare target for variants of declare variant calls
Jakub Jelinek [Wed, 28 Oct 2020 09:34:29 +0000 (10:34 +0100)]
openmp: Implicitly discover declare target for variants of declare variant calls

This marks all variants of declare variant also declare target if the base
functions are called directly in target regions or declare target functions.

2020-10-28  Jakub Jelinek  <jakub@redhat.com>

gcc/
* omp-offload.c (omp_declare_target_tgt_fn_r): Handle direct calls to
declare variant base functions.
libgomp/
* testsuite/libgomp.c/target-42.c: New test.

4 years agoxfail and improve some failing libgomp tests [PR81690]
Jakub Jelinek [Wed, 28 Oct 2020 09:30:41 +0000 (10:30 +0100)]
xfail and improve some failing libgomp tests [PR81690]

With the patch I've posted today to fix up declare variant LTO handling,
Tobias reported the patch still doesn't work, and there are two
reasons for that.
One is that when the base function is marked implicitly as declare target,
we don't mark also implicitly the variants.  I'll need to ask on omp-lang
about details for that, but generally the compiler should do it some way.
The other one is that the way base_delay is written, it will always
call the usleep function, which is undesirable for nvptx.  While the
compiler will replace all direct calls to base_delay to nvptx_delay,
the base_delay definition which calls usleep stays.

2020-10-28  Jakub Jelinek  <jakub@redhat.com>
    Tom de Vries  <tdevries@suse.de>

PR testsuite/81690
* testsuite/libgomp.c/usleep.h: New file.
* testsuite/libgomp.c/target-32.c: Include usleep.h.
(main): Use tgt_usleep instead of usleep.
* testsuite/libgomp.c/thread-limit-2.c: Include usleep.h.
(main): Use tgt_usleep instead of usleep.

4 years agolto: LTO cgraph support for late declare variant resolution [PR96680]
Jakub Jelinek [Wed, 28 Oct 2020 09:28:18 +0000 (10:28 +0100)]
lto: LTO cgraph support for late declare variant resolution [PR96680]

> I've tried to add the saving/restoring next to ipa refs saving/restoring, as
> the declare variant alt stuff is kind of extension of those, unfortunately
> following doesn't compile, because I need to also write or read a tree there
> (ctx is a portion of DECL_ATTRIBUTES of the base function), but the ipa refs
> write/read back functions don't have arguments that can be used for that.

This patch adds the streaming out and in of those omp_declare_variant_alt
hash table on the side data for the declare_variant_alt cgraph_nodes and
treats for LTO purposes the declare_variant_alt nodes (which have no body)
as if they contained a body that calls all the possible variants.
After IPA all the calls to these magic declare_variant_alt calls are
replaced with call to one of the variant depending on which one has the
highest score in the context.

2020-10-28  Jakub Jelinek  <jakub@redhat.com>

PR lto/96680
gcc/
* lto-streamer.h (omp_lto_output_declare_variant_alt,
omp_lto_input_declare_variant_alt): Declare variant.
* symtab.c (symtab_node::get_partitioning_class): Return
SYMBOL_DUPLICATE for declare_variant_alt nodes.
* passes.c (ipa_write_summaries): Add declare_variant_alt to
partition.
* lto-cgraph.c (output_refs): Call omp_lto_output_declare_variant_alt
on declare_variant_alt nodes.
(input_refs): Call omp_lto_input_declare_variant_alt on
declare_variant_alt nodes.
* lto-streamer-out.c (output_function): Don't call
collect_block_tree_leafs if DECL_INITIAL is error_mark_node.
(lto_output): Call output_function even for declare_variant_alt
nodes.
* omp-general.c (omp_lto_output_declare_variant_alt,
omp_lto_input_declare_variant_alt): New functions.
gcc/lto/
* lto-common.c (lto_fixup_prevailing_decls): Don't use
LTO_NO_PREVAIL on TREE_LIST's TREE_PURPOSE.
* lto-partition.c (lto_balanced_map): Treat declare_variant_alt
nodes like definitions.
libgomp/
* testsuite/libgomp.c/declare-variant-1.c: New test.

4 years agowide-int: Fix up set_bit_large
Jakub Jelinek [Wed, 28 Oct 2020 09:24:20 +0000 (10:24 +0100)]
wide-int: Fix up set_bit_large

> >> wide_int new_lb = wi::set_bit (r.lower_bound (0), 127)
> >>
> >> and creates the value:
> >>
> >> p new_lb
> >> {<wide_int_storage> = {val = {-65535, -1, 0}, len = 2, precision = 128},
> >> static is_sign_extended = true}
> >
> > This is non-canonical and so invalid, if the low HWI has the MSB set
> > and the high HWI is -1, it should have been just
> > val = {-65535}, len = 1, precision = 128}
> >
> > I guess the bug is that wi::set_bit_large doesn't call canonize.
>
> Yeah, looks like a micro-optimisation gone wrong.

2020-10-28  Jakub Jelinek  <jakub@redhat.com>

* wide-int.cc (wi::set_bit_large): Call canonize unless setting
msb bit and clearing bits above it.

4 years ago[RS6000] power10 scan-assembler tests
Alan Modra [Tue, 27 Oct 2020 11:06:06 +0000 (21:36 +1030)]
[RS6000] power10 scan-assembler tests

On power10 these are "dg-do run" tests, so need -save-temps for the
assembler scanning.

* gcc.target/powerpc/vsx-load-element-extend-char.c: Add -save-temps.
* gcc.target/powerpc/vsx-load-element-extend-int.c: Likewise.
* gcc.target/powerpc/vsx-load-element-extend-longlong.c: Likewise.
* gcc.target/powerpc/vsx-load-element-extend-short.c: Likewise.
* gcc.target/powerpc/vsx-store-element-truncate-char.c: Likewise.
* gcc.target/powerpc/vsx-store-element-truncate-int.c: Likewise.
* gcc.target/powerpc/vsx-store-element-truncate-longlong.c: Likewise.
* gcc.target/powerpc/vsx-store-element-truncate-short.c: Likewise.

4 years ago[RS6000] dg-do !compile and scan-assembler
Alan Modra [Tue, 27 Oct 2020 07:02:13 +0000 (17:32 +1030)]
[RS6000] dg-do !compile and scan-assembler

These tests never checked assembly, because .s files were not
produced.  One was looking for the wrong instructions.

A typical error log
PASS: gcc.target/powerpc/vec-permute-ext-runnable.c (test for excess errors)
gcc.target/powerpc/vec-permute-ext-runnable.c output file does not exist
UNRESOLVED: gcc.target/powerpc/vec-permute-ext-runnable.c scan-assembler-times \\mpermx\\M 10

* gcc.target/powerpc/vec-blend-runnable.c: Add save-temps.
* gcc.target/powerpc/vec-insert-word-runnable.c: Likewise.
* gcc.target/powerpc/vec-permute-ext-runnable.c: Likewise.
* gcc.target/powerpc/vec-replace-word-runnable.c: Likewise.
* gcc.target/powerpc/vec-splati-runnable.c: Likewise.
* gcc.target/powerpc/vec-ternarylogic-3.c: Likewise.
* gcc.target/powerpc/vec-ternarylogic-9.c: Likewise.
* gcc.target/powerpc/vsx_mask-count-runnable.c: Likewise.
* gcc.target/powerpc/vsx_mask-expand-runnable.c: Likewise.
* gcc.target/powerpc/vsx_mask-extract-runnable.c: Likewise.
* gcc.target/powerpc/vsx_mask-move-runnable.c: Likewise.
* gcc.target/powerpc/vec-shift-double-runnable.c: Likewise,
and correct assembly match.

4 years agoTweaks to ranger API routines.
Andrew MacLeod [Wed, 28 Oct 2020 00:13:46 +0000 (20:13 -0400)]
Tweaks to ranger API routines.

Remove the gcc_assert wrappers that contain statements that need to be
executed.
Audit routines to ensure range is set to UNDEFINED when false is returned.

* gimple-range-gori.cc (gori_compute_cache::cache_stmt): Accumulate
return values and only set cache when everything returned true.
* gimple-range.cc (get_tree_range): Set the return range to UNDEFINED
when the range isn't supported.
(gimple_ranger::calc_stmt): Return varying if the type is supported,
even if the stmt processing failed.  False otherwise.
(range_of_builtin_ubsan_call): Don't use gcc_assert.
(range_of_builtin_call): Ditto.
(gimple_ranger::range_of_cond_expr): Ditto.
(gimple_ranger::range_of_expr): Ditto
(gimple_ranger::range_on_entry): Ditto.
(gimple_ranger::range_on_exit): Ditto.
(gimple_ranger::range_on_edge): DItto.
(gimple_ranger::range_of_stmt): Don't use gcc_assert, and initialize
return value to UNDEFINED.

4 years agoDaily bump.
GCC Administrator [Wed, 28 Oct 2020 00:16:38 +0000 (00:16 +0000)]
Daily bump.

4 years agoc: Allow duplicate C2x standard attributes
Joseph Myers [Tue, 27 Oct 2020 22:15:46 +0000 (22:15 +0000)]
c: Allow duplicate C2x standard attributes

N2557, accepted into C2x at the October WG14 meeting, removes the
requirement that duplicates of standard attributes cannot appear
within an attribute list (so allowing e.g. [[deprecated, deprecated]],
where previously that was disallowed but [[deprecated]] [[deprecated]]
was OK).  Remove the code checking for this (standard attributes
aren't in any released version of the C standard) and update tests
accordingly.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc/c/
2020-10-27  Joseph Myers  <joseph@codesourcery.com>

* c-parser.c (c_parser_std_attribute_specifier): Allow duplicate
standard attributes.

gcc/testsuite/
2020-10-27  Joseph Myers  <joseph@codesourcery.com>

* gcc.dg/c2x-attr-deprecated-4.c, gcc.dg/c2x-attr-fallthrough-4.c,
gcc.dg/c2x-attr-maybe_unused-4.c: Allow duplicate attributes.

4 years agolibgo: update to Go 1.15.3 release
Ian Lance Taylor [Sat, 24 Oct 2020 21:47:44 +0000 (14:47 -0700)]
libgo: update to Go 1.15.3 release

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265717

4 years agoFix PR97497
Andreas Krebbel [Tue, 27 Oct 2020 19:57:39 +0000 (20:57 +0100)]
Fix PR97497

This works around a limitation of gcse with handling of partially
clobbered registers.  With this patch our GOT pointer register r12 is
not marked as partially clobbered anymore for the -m31 -mzarch -fpic
combination. This is correct since all the bits in r12 we actually
care about are in fact preserved.

gcc/ChangeLog:

PR rtl-optimization/97497
* config/s390/s390.c (s390_hard_regno_call_part_clobbered): Do not
return true for r12 when -fpic is used.

gcc/testsuite/ChangeLog:

* gcc.target/s390/pr97497.c: New test.

4 years agoPR fortran/97491 - Wrong restriction for VALUE arguments of pure procedures
Harald Anlauf [Tue, 27 Oct 2020 19:25:23 +0000 (20:25 +0100)]
PR fortran/97491 - Wrong restriction for VALUE arguments of pure procedures

A dummy argument with the VALUE attribute may be redefined in a PURE or
ELEMENTAL procedure.  Adjust the associated purity check.

gcc/fortran/ChangeLog:

* resolve.c (gfc_impure_variable): A dummy argument with the VALUE
attribute may be redefined without making a procedure impure.

gcc/testsuite/ChangeLog:

* gfortran.dg/value_8.f90: New test.

4 years agoPPC testsuite fixes
Carl Love [Fri, 23 Oct 2020 17:52:31 +0000 (12:52 -0500)]
PPC testsuite fixes

2020-10-27  Carl Love  <cel@us.ibm.com>

gcc/testsuite
* gcc.target/powerpc/vec-blend-runnable.c: Change #ifdef
DEBUG to #if DEBUG.
Fix printf line so it is less then 80 characters long.
* gcc.target/powerpc/vec-insert-word-runnable.c: Change
#ifdef DEBUG to #if DEBUG.
* gcc.target/powerpc/vec-permute-ext-runnable.c: Change
#ifdef DEBUG to #if DEBUG.
* gcc.target/powerpc/vec-replace-word-runnable.c: Change
#ifdef DEBUG to #if DEBUG.
Fix printf lines so they are less then 80 characters long.
* gcc.target/powerpc/vec-shift-double-runnable.c: Change
#ifdef DEBUG to #if DEBUG.

4 years agocompiler, go/internal/gccgoimporter: export notinheap annotation
Ian Lance Taylor [Mon, 26 Oct 2020 23:48:03 +0000 (16:48 -0700)]
compiler, go/internal/gccgoimporter: export notinheap annotation

This is the gofrontend version of https://golang.org/cl/259297.
This is required now because that change is in the 1.15.3 release.

This requires changing the go/internal/gccgoimporter package, to skip
the new annotation. This change will need to be ported to the gc and
x/tools repos.

For golang/go#41761

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265258

4 years agocompiler: remove unused Type::in_heap_ member variable
Ian Lance Taylor [Mon, 26 Oct 2020 22:40:42 +0000 (15:40 -0700)]
compiler: remove unused Type::in_heap_ member variable

This member variable was added in https://golang.org/cl/46490, but it
was never used. The code uses Named_type::in_heap_ instead.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265257

4 years agoc++: Kill nested_udts
Nathan Sidwell [Tue, 27 Oct 2020 16:59:15 +0000 (09:59 -0700)]
c++: Kill nested_udts

During the implementation of modules I added myself a note to
implement nested_udt handling.  It wasn't obvious to me what they were
for and nothing seemed to be broken in ignoring them.  I figured
something would eventually pop up and I'd add support.  Nothing popped up.

Investigating on trunk discovered 3 places where we look at the
nested-udts.  I couldn't figure how the one in lookup_field_r was
needed -- surely the regular lookup would find the type.  It turned
out that code was unreachable.  So we can delete it.

Next in do_type_instantiation, we walk the nested-utd table
instantiating types.  But those types are also on the TYPE_FIELDS
list, which we've just iterated over.  So I can move the handling into
that loop.

The final use is in handling structs that have a typedef name for
linkage purposes.  Again, we can just iterate over TYPE_FIELDS.  (As
commented, we probably don't need to do even that, as a DR, whose
number I forget, requires such structs to only have C-like things in
them.  But I didn't go that far.

Having removed all the uses of nested-udts, I can remove their
creation from name-lookup, and as the only instance of a binding_table
object, we can remove all that code too.

gcc/cp/
* cp-tree.h (struct lang_type): Delete nested_udts field.
(CLASSTYPE_NESTED_UTDS): Delete.
* name-lookup.h (binding_table, binding_entry): Delete typedefs.
(bt_foreach_proc): Likewise.
(struct binding_entry_s): Delete.
(SCOPE_DEFAULT_HT_SIZE, CLASS_SCOPE_HT_SIZE)
(NAMESPACE_ORDINARY_HT_SIZE, NAMESPACE_STD_HT_SIZE)
(GLOBAL_SCOPE_HT_SIZE): Delete.
(binding_table_foreach, binding_table_find): Delete declarations.
* name-lookup.c (ENTRY_INDEX): Delete.
(free_binding_entry): Delete.
(binding_entry_make, binding_entry_free): Delete.
(struct binding_table_s): Delete.
(binding_table_construct, binding_table_free): Delete.
(binding_table_new, binding_table_expand): Delete.
(binding_table_insert, binding_table_find): Delete.
(binding_table_foreach): Delete.
(maybe_process_template_type_declaration): Delete
CLASSTYPE_NESTED_UTDS insertion.
(do_pushtag): Likewise.
* decl2.c (bt_reset_linkage_1): Fold into reset_type_linkage_1.
(reset_type_linkage_2, bt_reset_linkage_2): Fold into
reset_type_linkage.
* pt.c (instantiate_class_template_1): Delete NESTED_UTDs comment.
(bt_instantiate_type_proc): Delete.
(do_type_instantiation): Instantiate implicit typedef fields.
Delete NESTED_UTD walk.
* search.c (lookup_field_r): Delete unreachable NESTED_UTD
search.

4 years agoc++: Small cleanup for do_type_instantiation
Nathan Sidwell [Tue, 27 Oct 2020 15:48:26 +0000 (08:48 -0700)]
c++: Small cleanup for do_type_instantiation

In working on a bigger cleanup I noticed some opportunities to make
do_type_instantiation's control flow simpler.

gcc/cp/
* parser.c (cp_parser_explicit_instantiation): Refactor some RAII.
* pt.c (bt_instantiate_type_proc): DATA is the tree, pass type to
do_type_instantiation.
(do_type_instantiation): Require T to be a type.  Refactor for
some RAII.

4 years agoAArch64: Fix overflow in memcopy expansion on aarch64.
Tamar Christina [Tue, 27 Oct 2020 16:30:31 +0000 (16:30 +0000)]
AArch64: Fix overflow in memcopy expansion on aarch64.

Currently the inline memcpy expansion code for AArch64 is using a signed int
to hold the number of elements to copy.  When you giver give it a value larger
than INT_MAX it will overflow.

The overflow causes the maximum number of instructions we want to expand to
check to fail since this assumes an unsigned number.

This patch changes the maximum isns arithmetic to be unsigned HOST_WIDE_INT.

note that the calculation *must* remained signed as the memcopy issues
overlapping unaligned copies.  This means the pointer must be moved back and
so you need signed arithmetic.

gcc/ChangeLog:

PR target/97535
* config/aarch64/aarch64.c (aarch64_expand_cpymem): Use unsigned
arithmetic in check.

gcc/testsuite/ChangeLog:

PR target/97535
* gcc.target/aarch64/pr97535.c: New test.

4 years agoaarch64: Add vcopy(q)__lane(q)_bf16 intrinsics
Andrea Corallo [Thu, 8 Oct 2020 10:29:00 +0000 (12:29 +0200)]
aarch64: Add vcopy(q)__lane(q)_bf16 intrinsics

gcc/ChangeLog

2020-10-20  Andrea Corallo  <andrea.corallo@arm.com>

* config/aarch64/arm_neon.h (vcopy_lane_bf16, vcopyq_lane_bf16)
(vcopyq_laneq_bf16, vcopy_laneq_bf16): New intrinsics.

gcc/testsuite/ChangeLog

2020-10-20  Andrea Corallo  <andrea.corallo@arm.com>

* gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c:
New test.
* gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_2.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_2.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_2.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_1.c:
Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_2.c:
Likewise.

4 years agolibstdc++: Fix ODR violations caused by <tr1/functional>
Jonathan Wakely [Tue, 27 Oct 2020 16:32:53 +0000 (16:32 +0000)]
libstdc++: Fix ODR violations caused by <tr1/functional>

The placeholders for std::tr1::bind are defined in an anonymous
namespace, which means they have internal linkage. This will cause ODR
violations when used in function templates (such as std::tr1::bind) from
multiple translation units. Although probably harmless (every definition
will generate identical code, even if technically ill-formed) we can
avoid the ODR violations by reusing the std::placeholder objects as the
std::tr1::placeholder objects.

To make this work, the std::_Placeholder type needs to be defined for
C++98 mode, so that <tr1/functional> can use it. The members of the
std::placeholder namespace must not be defined by <functional> in C++98
mode, because "placeholders", "_1", "_2" etc. are not reserved names in
C++98. Instead they can be declared in <tr1/functional>, because those
names *are* reserved in that header. With the std::placeholders objects
declared, a simple using-directive suffices to redeclare them in
namespace std::tr1::placeholders. This means any use of the TR1
placeholders actually refers to the C++11 placeholders, which are
defined with external linkage and exported from the library, so don't
cause ODR violations.

libstdc++-v3/ChangeLog:

* include/std/functional (std::_Placeholder): Define for C++98
as well as later standards.
* include/tr1/functional (std::placeholders::_1 etc): Declare
for C++98.
(tr1::_Placeholder): Replace with using-declaration for
std::_Placeholder.
(tr1::placeholders::_1 etc.): Replace with using-directive for
std::placeholders.

4 years agolibstdc++: Remove unused variables in special functions
Jonathan Wakely [Tue, 27 Oct 2020 16:32:53 +0000 (16:32 +0000)]
libstdc++: Remove unused variables in special functions

libstdc++-v3/ChangeLog:

* include/tr1/ell_integral.tcc (__ellint_rf, __ellint_rd)
(__ellint_rc, __ellint_rj): Remove unused variables.
* include/tr1/modified_bessel_func.tcc (__airy): Likewise.

4 years agolibstdc++: Fix -Wsign-compare warnings in headers
Jonathan Wakely [Tue, 27 Oct 2020 16:32:53 +0000 (16:32 +0000)]
libstdc++: Fix -Wsign-compare warnings in headers

libstdc++-v3/ChangeLog:

* include/bits/locale_conv.h (__str_codecvt_out_all):
Add cast to compare operands of the same signedness.
* include/bits/locale_facets_nonio.tcc
(time_get::_M_extract_wday_or_month): Likewise.
* include/bits/sstream.tcc (basic_stringbuf::overflow):
Likewise.
* include/tr1/legendre_function.tcc (__sph_legendre): Use
unsigned for loop variable.

4 years agoExtract VX_CPU_PREFIX up into config/vxworks.h
Olivier Hainque [Tue, 20 Oct 2020 15:15:51 +0000 (15:15 +0000)]
Extract VX_CPU_PREFIX up into config/vxworks.h

Move VX_CPU_PREFIX to a place where it can be
reused by multiple target ports.

2020-10-21  Olivier Hainque  <hainque@adacore.com>

gcc/
* config/vxworks.h (VX_CPU_PREFIX): #define here.
* config/rs6000/vxworks.h: Remove #definition.

4 years agoFix glitch on VX_CPU selection for E6500
Olivier Hainque [Tue, 27 Oct 2020 13:16:11 +0000 (13:16 +0000)]
Fix glitch on VX_CPU selection for E6500

Proper macro name is PPCE6500, not E6500.
Introduced accidentally during a pre-commit minor rearrangement.

2020-10-27  Olivier Hainque  <hainque@adacore.com>

gcc/
* config/rs6000/vxworks.h (CPP_SPEC): Fix macro definition
for -mcpu=e6500.

4 years agoFix BB store group splitting group size compute
Richard Biener [Tue, 27 Oct 2020 14:55:01 +0000 (15:55 +0100)]
Fix BB store group splitting group size compute

This fixes a mistake in the previous change in this area to what
was desired - figure the largest power-of-two group size fitting
in the matching area.

2020-10-27  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_build_slp_instance): Use ceil_log2
to compute maximum group-size.

* gcc.dg/vect/bb-slp-67.c: New testcase.

4 years agoFix ipa-modref signature updates
Jan Hubicka [Tue, 27 Oct 2020 15:25:12 +0000 (16:25 +0100)]
Fix ipa-modref signature updates

PR ipa/97586
* ipa-modref-tree.h (modref_tree::remap_params): New member function.
* ipa-modref.c (modref_summaries_lto::duplicate): Check that
optimization summaries are not duplicated.
(remap_arguments): Remove.
(modref_transform): Rename to ...
(update_signature): ... this one; handle also lto summary.
(pass_ipa_modref::execute): Update signatures here rather
than in transform hook.

4 years agolibstdc++: Add missing noexcept to std::from_chars declarations
Jonathan Wakely [Tue, 27 Oct 2020 14:49:47 +0000 (14:49 +0000)]
libstdc++: Add missing noexcept to std::from_chars declarations

libstdc++-v3/ChangeLog:

* include/std/charconv (from_chars): Add noexcept to match
definitions in src/c++17/floating_from_chars.cc

4 years agolibstdc++: Fix directory_iterator exception specification
Jonathan Wakely [Tue, 27 Oct 2020 14:49:37 +0000 (14:49 +0000)]
libstdc++: Fix directory_iterator exception specification

libstdc++-v3/ChangeLog:

* src/c++17/fs_dir.cc (fs::directory_iterator::operator*):
Add noexcept. Do not throw on precondition violation.

4 years agolibstdc++: Add noexcept to declaration of path::_List members
Jonathan Wakely [Tue, 27 Oct 2020 14:48:50 +0000 (14:48 +0000)]
libstdc++: Add noexcept to declaration of path::_List members

libstdc++-v3/ChangeLog:

* include/bits/fs_path.h (path::_List::begin, path::_List::end):
Add noexcept to match definitions in src/c++17/fs_path.cc.

4 years agoAdd tests for PR92942 - missing -Wstringop-overflow for allocations with a negative...
Martin Sebor [Tue, 27 Oct 2020 14:31:53 +0000 (08:31 -0600)]
Add tests for PR92942 - missing -Wstringop-overflow for allocations with a negative lower bound size.

gcc/testsuite/ChangeLog:

PR middle-end/92942
* gcc.dg/Wstringop-overflow-56.c: New test.
* gcc.dg/Wstringop-overflow-57.c: Same.

4 years agoRemove .s file.
Martin Sebor [Tue, 27 Oct 2020 14:22:26 +0000 (08:22 -0600)]
Remove .s file.

gcc/testsuite/ChangeLog:
* gcc.dg/Wstringop-overflow-44.s: Remove.

4 years agoCombine logical OR ranges properly. pr97567
Andrew MacLeod [Tue, 27 Oct 2020 14:13:18 +0000 (10:13 -0400)]
Combine logical OR ranges properly. pr97567

update testcase to work on 32 bit targets

gcc/testsuite
* gcc.dg/pr97567.c: Update to work with 32 bit targets.

4 years agoAdjust BB vectorization function splitting
Richard Biener [Tue, 27 Oct 2020 13:16:45 +0000 (14:16 +0100)]
Adjust BB vectorization function splitting

This adjusts the condition when to split at control altering stmts,
only when there's a definition.  It also removes the only use
of --param slp-max-insns-in-bb which a previous change left doing
nothing (but repeatedly print a message for each successive
instruction...).

2020-10-27  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_slp_bbs): Remove no-op
slp-max-insns-in-bb check.
(vect_slp_function): Dump when splitting the function.
Adjust the split condition for control altering stmts.
* params.opt (-param=slp-max-insns-in-bb): Remove.
* doc/invoke.texi (-param=slp-max-insns-in-bb): Likewise.

4 years agoanalyzer: don't assume extern const vars are zero-initialized [PR97568]
David Malcolm [Tue, 27 Oct 2020 13:54:25 +0000 (09:54 -0400)]
analyzer: don't assume extern const vars are zero-initialized [PR97568]

gcc/analyzer/ChangeLog:
PR analyzer/97568
* region-model.cc (region_model::get_initial_value_for_global):
Move check that !DECL_EXTERNAL from here to...
* region.cc (decl_region::get_svalue_for_initializer): ...here,
using it to reject zero initialization.

gcc/testsuite/ChangeLog:
PR analyzer/97568
* gcc.dg/analyzer/pr97568.c: New test.

4 years agoanalyzer: Change cast from long to intptr_t [PR96608]
Markus Böck [Tue, 27 Oct 2020 13:53:08 +0000 (09:53 -0400)]
analyzer: Change cast from long to intptr_t [PR96608]

Casting to intptr_t states the intent of an integer to pointer cast
more clearly and ensures that the cast causes no loss of precision on
any platforms. LLP64 platforms eg. have a long value of 4 bytes and
pointer values of 8 bytes which may even cause compiler errors.

gcc/analyzer/ChangeLog:
PR analyzer/96608
* store.h (hash): Cast to intptr_t instead of long

4 years agoanalyzer: eliminate non-deterministic behavior
David Malcolm [Tue, 27 Oct 2020 13:52:00 +0000 (09:52 -0400)]
analyzer: eliminate non-deterministic behavior

This patch is a followup to the previous one, eliminating
non-determinism in the behavior of the analyzer (rather than just in
the logs), by sorting whenever the result previously depended on
pointer values.  Tested as per the previous patch.

gcc/analyzer/ChangeLog:
* constraint-manager.cc (svalue_cmp_by_ptr): Delete.
(equiv_class::canonicalize): Use svalue::cmp_ptr_ptr instead.
(equiv_class_cmp): Eliminate pointer comparison.
* diagnostic-manager.cc (dedupe_key::comparator): If they are at
the same location, also compare epath ength and pending_diagnostic
kind.
* engine.cc (readability_comparator): If two path_vars have the
same readability, then impose an arbitrary ordering on them.
(worklist::key_t::cmp): If two points have the same plan ordering,
continue the comparison.  Call sm_state_map::cmp rather than
comparing hash values.
* program-state.cc (sm_state_map::entry_t::cmp): New.
(sm_state_map::cmp): New.
* program-state.h (sm_state_map::entry_t::cmp): New decl.
(sm_state_map::elements): New.
(sm_state_map::cmp): New.

4 years agoanalyzer: eliminate non-determinism in logs
David Malcolm [Tue, 27 Oct 2020 13:51:19 +0000 (09:51 -0400)]
analyzer: eliminate non-determinism in logs

This patch and the followup eliminate various forms of non-determinism
in the analyzer due to changing pointer values.

This patch fixes churn seen when diffing analyzer logs.  The patch
avoids embedding pointers in various places, and adds sorting when
dumping hash_set and hash_map for various analyzer types.  Doing so
requires implementing a way to sort svalue instances, and assigning UIDs
to gimple statements.

Tested both patches together via a script that runs a testcase 100 times,
and then using diff and md5sum to verify that the results are consistent
in the face of address space randomization:

FILENAME=$1
rm $FILENAME.*
for i in `seq 1 100`; do
    echo "iteration: $i"
    ./xgcc -B. -fanalyzer -c ../../src/gcc/testsuite/gcc.dg/analyzer/$FILENAME \
       --Wanalyzer-too-complex \
       -fdump-analyzer-supergraph \
       -fdump-analyzer-exploded-graph \
       -fdump-analyzer \
       -fdump-noaddr \
       -fdump-analyzer-exploded-nodes-2
    mv $FILENAME.supergraph.dot $FILENAME.$i.supergraph.dot
    mv $FILENAME.analyzer.txt $FILENAME.$i.analyzer.txt
    mv $FILENAME.supergraph-eg.dot $FILENAME.$i.supergraph-eg.dot
    mv $FILENAME.eg.txt $FILENAME.$i.eg.txt
    mv $FILENAME.eg.dot $FILENAME.$i.eg.dot
done

gcc/analyzer/ChangeLog:
* engine.cc (setjmp_record::cmp): New.
(supernode_cluster::dump_dot): Avoid embedding pointer in cluster
name.
(supernode_cluster::cmp_ptr_ptr): New.
(function_call_string_cluster::dump_dot): Avoid embedding pointer
in cluster name.  Sort m_map when dumping child clusters.
(function_call_string_cluster::cmp_ptr_ptr): New.
(root_cluster::dump_dot): Sort m_map when dumping child clusters.
* program-point.cc (function_point::cmp): New.
(function_point::cmp_ptr): New.
* program-point.h (function_point::cmp): New decl.
(function_point::cmp_ptr): New decl.
* program-state.cc (sm_state_map::print): Sort the values.  Guard
the printing of pointers with !flag_dump_noaddr.
(program_state::prune_for_point): Sort the regions.
(log_set_of_svalues): Sort the values.  Guard the printing of
pointers with !flag_dump_noaddr.
* region-model-manager.cc (log_uniq_map): Sort the values.
* region-model-reachability.cc (dump_set): New function template.
(reachable_regions::dump_to_pp): Use it.
* region-model.h (svalue::cmp_ptr): New decl.
(svalue::cmp_ptr_ptr): New decl.
(setjmp_record::cmp): New decl.
(placeholder_svalue::get_name): New accessor.
(widening_svalue::get_point): New accessor.
(compound_svalue::get_map): New accessor.
(conjured_svalue::get_stmt): New accessor.
(conjured_svalue::get_id_region): New accessor.
(region::cmp_ptrs): Rename to...
(region::cmp_ptr_ptr): ...this.
* region.cc (region::cmp_ptrs): Rename to...
(region::cmp_ptr_ptr): ...this.
* state-purge.cc
(state_purge_per_ssa_name::state_purge_per_ssa_name): Sort
m_points_needing_name when dumping.
* store.cc (concrete_binding::cmp_ptr_ptr): New.
(symbolic_binding::cmp_ptr_ptr): New.
(binding_map::cmp): New.
(get_sorted_parent_regions): Update for renaming of
region::cmp_ptrs to region::cmp_ptr_ptr.
(store::dump_to_pp): Likewise.
(store::to_json): Likewise.
(store::can_merge_p): Sort the base regions before considering
them.
* store.h (concrete_binding::cmp_ptr_ptr): New decl.
(symbolic_binding::cmp_ptr_ptr): New decl.
(binding_map::cmp): New decl.
* supergraph.cc (supergraph::supergraph): Assign UIDs to the
gimple stmts.
* svalue.cc (cmp_cst): New.
(svalue::cmp_ptr): New.
(svalue::cmp_ptr_ptr): New.

4 years agoanalyzer: fix param "analyzer-max-enodes-per-program-point"
David Malcolm [Tue, 27 Oct 2020 13:50:24 +0000 (09:50 -0400)]
analyzer: fix param "analyzer-max-enodes-per-program-point"

This was effectively checking for one beyond the limit, rather than
the limit itself.

Seen when fixing PR analyzer/97514.

gcc/analyzer/ChangeLog:
* engine.cc (exploded_graph::get_or_create_node): Fix off-by-one
when imposing param_analyzer_max_enodes_per_program_point limit.

4 years agolibstdc++: Include <cstdint> in tests that use std::uintptr_t
Jonathan Wakely [Tue, 27 Oct 2020 13:48:36 +0000 (13:48 +0000)]
libstdc++: Include <cstdint> in tests that use std::uintptr_t

libstdc++-v3/ChangeLog:

* testsuite/experimental/memory_resource/new_delete_resource.cc:
Add missing <cstdint> header.
* testsuite/experimental/memory_resource/resource_adaptor.cc:
Likewise.

4 years agoanalyzer: implement region_model::get_representative_path_var for labels
David Malcolm [Tue, 27 Oct 2020 13:48:00 +0000 (09:48 -0400)]
analyzer: implement region_model::get_representative_path_var for labels

This fixes an ICE seen e.g. with gcc.dg/analyzer/data-model-16.c when
enabling -fdump-analyzer.

gcc/analyzer/ChangeLog:
* region-model.cc (region_model::get_representative_path_var):
Implement case RK_LABEL.
* region-model.h (label_region::get_label): New accessor.

4 years agotestsuite: restrict test to c++11 and later [PR97590]
Jakub Jelinek [Tue, 27 Oct 2020 13:45:15 +0000 (14:45 +0100)]
testsuite: restrict test to c++11 and later [PR97590]

2020-10-27  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/97560
PR testsuite/97590
* g++.dg/pr97560.C: Require c++11 effective target and add comment
with PR number.

4 years agoRefactor array descriptor field access
Richard Biener [Fri, 16 Oct 2020 08:32:26 +0000 (10:32 +0200)]
Refactor array descriptor field access

This refactors the array descriptor component access tree building
to commonize code into new helpers to provide a single place to
fix correctness issues with respect to TBAA.

The only interesting part is the gfc_conv_descriptor_data_get change
to drop broken special-casing of REFERENCE_TYPE desc which, when hit,
would build invalid GENERIC trees, missing an INDIRECT_REF before
subsetting the descriptor with a COMPONENT_REF.

2020-10-16  Richard Biener  <rguenther@suse.de>

gcc/fortran/ChangeLog:
* trans-array.c (gfc_get_descriptor_field): New helper.
(gfc_conv_descriptor_data_get): Use it - drop strange
REFERENCE_TYPE handling and make sure we don't trigger it.
(gfc_conv_descriptor_data_addr): Use gfc_get_descriptor_field.
(gfc_conv_descriptor_data_set): Likewise.
(gfc_conv_descriptor_offset): Likewise.
(gfc_conv_descriptor_dtype): Likewise.
(gfc_conv_descriptor_span): Likewise.
(gfc_get_descriptor_dimension): Likewise.
(gfc_conv_descriptor_token): Likewise.
(gfc_conv_descriptor_subfield): New helper.
(gfc_conv_descriptor_stride): Use it.
(gfc_conv_descriptor_lbound): Likewise.
(gfc_conv_descriptor_ubound): Likewise.

4 years agoSLP vectorize across PHI nodes
Richard Biener [Fri, 16 Oct 2020 07:43:22 +0000 (09:43 +0200)]
SLP vectorize across PHI nodes

This makes SLP discovery detect backedges by seeding the bst_map with
the node to be analyzed so it can be picked up from recursive calls.
This removes the need to discover backedges in a separate walk.

This enables SLP build to handle PHI nodes in full, continuing
the SLP build to non-backedges.  For loop vectorization this
enables outer loop vectorization of nested SLP cycles and for
BB vectorization this enables vectorization of PHIs at CFG merges.

It also turns code generation into a SCC discovery walk to handle
irreducible regions and nodes only reachable via backedges where
we now also fill in vectorized backedge defs.

This requires sanitizing the SLP tree for SLP reduction chains even
more, manually filling the backedge SLP def.

This also exposes the fact that CFG copying (and edge splitting
until I fixed that) ends up with different edge order in the
copy which doesn't play well with the desired 1:1 mapping of
SLP PHI node children and edges for epilogue vectorization.
I've tried to fixup CFG copying here but this really looks
like a dead (or expensive) end there so I've done fixup in
slpeel_tree_duplicate_loop_to_edge_cfg instead for the cases
we can run into.

There's still NULLs in the SLP_TREE_CHILDREN vectors and I'm
not sure it's possible to eliminate them all this stage1 so the
patch has quite some checks for this case all over the place.

Bootstrapped and tested on x86_64-unknown-linux-gnu.  SPEC CPU 2017
and SPEC CPU 2006 successfully built and tested.

2020-10-27  Richard Biener  <rguenther@suse.de>

* gimple.h (gimple_expr_type): For PHIs return the type
of the result.
* tree-vect-loop-manip.c (slpeel_tree_duplicate_loop_to_edge_cfg):
Make sure edge order into copied loop headers line up with the
originals.
* tree-vect-loop.c (vect_transform_cycle_phi): Handle nested
loops with SLP.
(vectorizable_phi): New function.
(vectorizable_live_operation): For BB vectorization compute insert
location here.
* tree-vect-slp.c (vect_free_slp_tree): Deal with NULL
SLP_TREE_CHILDREN entries.
(vect_create_new_slp_node): Add overloads with pre-existing node
argument.
(vect_print_slp_graph): Likewise.
(vect_mark_slp_stmts): Likewise.
(vect_mark_slp_stmts_relevant): Likewise.
(vect_gather_slp_loads): Likewise.
(vect_optimize_slp): Likewise.
(vect_slp_analyze_node_operations): Likewise.
(vect_bb_slp_scalar_cost): Likewise.
(vect_remove_slp_scalar_calls): Likewise.
(vect_get_and_check_slp_defs): Handle PHIs.
(vect_build_slp_tree_1): Handle PHIs.
(vect_build_slp_tree_2): Continue SLP build, following PHI
arguments.  Fix memory leak.
(vect_build_slp_tree): Put stub node into the hash-map so
we can discover cycles directly.
(vect_build_slp_instance): Set the backedge SLP def for
reduction chains.
(vect_analyze_slp_backedges): Remove.
(vect_analyze_slp): Do not call it.
(vect_slp_convert_to_external): Release SLP_TREE_LOAD_PERMUTATION.
(vect_slp_analyze_node_operations): Handle stray failed
backedge defs by failing.
(vect_slp_build_vertices): Adjust leaf condition.
(vect_bb_slp_mark_live_stmts): Handle PHIs, use visited
hash-set to handle cycles.
(vect_slp_analyze_operations): Adjust.
(vect_bb_partition_graph_r): Likewise.
(vect_slp_function): Adjust split condition to allow CFG
merges.
(vect_schedule_slp_instance): Rename to ...
(vect_schedule_slp_node): ... this.  Move DFS walk to ...
(vect_schedule_scc): ... this new function.
(vect_schedule_slp): Call it.  Remove ad-hoc vectorized
backedge fill code.
* tree-vect-stmts.c (vect_analyze_stmt): Call
vectorizable_phi.
(vect_transform_stmt): Likewise.
(vect_is_simple_use): Handle vect_backedge_def.
* tree-vectorizer.c (vec_info::new_stmt_vec_info): Only
set loop header PHIs to vect_unknown_def_type for loop
vectorization.
* tree-vectorizer.h (enum vect_def_type): Add vect_backedge_def.
(enum stmt_vec_info_type): Add phi_info_type.
(vectorizable_phi): Declare.

* gcc.dg/vect/bb-slp-54.c: New test.
* gcc.dg/vect/bb-slp-55.c: Likewise.
* gcc.dg/vect/bb-slp-56.c: Likewise.
* gcc.dg/vect/bb-slp-57.c: Likewise.
* gcc.dg/vect/bb-slp-58.c: Likewise.
* gcc.dg/vect/bb-slp-59.c: Likewise.
* gcc.dg/vect/bb-slp-60.c: Likewise.
* gcc.dg/vect/bb-slp-61.c: Likewise.
* gcc.dg/vect/bb-slp-62.c: Likewise.
* gcc.dg/vect/bb-slp-63.c: Likewise.
* gcc.dg/vect/bb-slp-64.c: Likewise.
* gcc.dg/vect/bb-slp-65.c: Likewise.
* gcc.dg/vect/bb-slp-66.c: Likewise.
* gcc.dg/vect/vect-outer-slp-1.c: Likewise.
* gfortran.dg/vect/O3-bb-slp-1.f: Likewise.
* gfortran.dg/vect/O3-bb-slp-2.f: Likewise.
* g++.dg/vect/simd-11.cc: Likewise.

4 years agoAvoid uniform lane BB vectorization
Richard Biener [Tue, 27 Oct 2020 10:03:27 +0000 (11:03 +0100)]
Avoid uniform lane BB vectorization

This makes sure to use splats early when facing uniform internal
operands in BB SLP discovery rather than relying on the late
heuristincs re-building nodes from scratch.

2020-10-27  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_build_slp_tree_2): When vectorizing
BBs splat uniform operands and stop SLP discovery.

* gcc.target/i386/pr95866-1.c: Adjust.

4 years ago[RS6000] Unsupported test options for -m32
Alan Modra [Sat, 24 Oct 2020 05:47:39 +0000 (16:17 +1030)]
[RS6000] Unsupported test options for -m32

FAIL: gcc.target/powerpc/swaps-p8-22.c (test for excess errors)
Excess errors:
cc1: error: '-mcmodel' not supported in this configuration

* gcc.target/powerpc/swaps-p8-22.c: Enable only for aix and
-m64 linux.

4 years agod: Remove the d_critsec_size target hook.
Iain Buclaw [Fri, 23 Oct 2020 14:48:25 +0000 (16:48 +0200)]
d: Remove the d_critsec_size target hook.

The allocation of mutex objects for synchronized statements has been
moved to the library as of merging druntime 58560d51.  All support code
in the compiler for getting the OS critical section size has been
removed along with it.

Reviewed-on: https://github.com/dlang/dmd/pull/11902
     https://github.com/dlang/druntime/pull/3248

gcc/ChangeLog:

* config/aarch64/aarch64-linux.h (GNU_USER_TARGET_D_CRITSEC_SIZE):
Remove.
* config/glibc-d.c (glibc_d_critsec_size): Likewise.
(TARGET_D_CRITSEC_SIZE): Likewise.
* config/i386/linux-common.h (GNU_USER_TARGET_D_CRITSEC_SIZE):
Likewise.
* config/sol2-d.c (solaris_d_critsec_size): Likewise.
(TARGET_D_CRITSEC_SIZE):  Likewise.
* doc/tm.texi.in (TARGET_D_CRITSEC_SIZE): Likewise.
* doc/tm.texi: Regenerate.

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd bec5973b0.
* d-target.cc (Target::critsecsize): Remove.
* d-target.def: Remove d_critsec_size.

libphobos/ChangeLog:

* libdruntime/MERGE: Merge upstream druntime 58560d51.

4 years agod: Merge upstream dmd 0fcdaab32
Iain Buclaw [Fri, 23 Oct 2020 07:41:11 +0000 (09:41 +0200)]
d: Merge upstream dmd 0fcdaab32

Fixes a bug where there was undefined template references when compiling
upstream dmd mainline.

In `TemplateInstance::semantic`, there exists special handling of
matching template instances for the same template declaration to ensure
that only at most one instance gets codegen'd.

If the primary instance `inst` originated from a non-root module, the
`minst` field will be updated so it is now coming from a root module,
however all Dsymbol `inst->members` of the instance still have their
`_scope->minst` pointing at the original non-root module. We must now
propagate `minst` to all members so that forward referenced dependencies
that get instantiated will also be appended to the root module,
otherwise there will be undefined references at link-time.

This doesn't affect compilations where all modules are compiled
together, as every module is a root module in that situation.  What this
primarily affects are cases where there is a mix of root and non-root
modules, and a template was first instantiated in a non-root context,
then later instantiated again in a root context.

Reviewed-on: https://github.com/dlang/dmd/pull/11867

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd 0fcdaab32

4 years agogcov-profile: use static pool for TOPN first
Martin Liska [Mon, 19 Oct 2020 15:40:00 +0000 (17:40 +0200)]
gcov-profile: use static pool for TOPN first

gcc/ChangeLog:

PR gcov-profile/97461
* gcov-io.h (GCOV_PREALLOCATED_KVP): Pre-allocate 64
static counters.

libgcc/ChangeLog:

PR gcov-profile/97461
* libgcov.h (gcov_counter_add): Use first static counters
as it should help to have malloc wrappers set up.

gcc/testsuite/ChangeLog:

PR gcov-profile/97461
* gcc.dg/tree-prof/pr97461.c: New test.

4 years agoRe-enable fnspec checking once fortran frontend is fixed.
Jan Hubicka [Tue, 27 Oct 2020 09:23:46 +0000 (10:23 +0100)]
Re-enable fnspec checking once fortran frontend is fixed.

* tree-ssa-alias.c (attr_fnspec::verify): Re-enabl checking.

4 years ago[Ada] vx7r2cert: port ARM, PowerPC and x86 targets
Doug Rupp [Wed, 16 Sep 2020 15:05:10 +0000 (08:05 -0700)]
[Ada] vx7r2cert: port ARM, PowerPC and x86 targets

gcc/ada/

* Makefile.rtl: Add vx7r2cert spec file to ARM, PowerPC and x86
targets.
* vxworks7-cert-rtp-link.spec: New spec file.

4 years ago[Ada] Warnings on g-spogwa.adb
Arnaud Charlet [Thu, 24 Sep 2020 08:00:51 +0000 (04:00 -0400)]
[Ada] Warnings on g-spogwa.adb

gcc/ada/

* Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add g-spogwa object.
* libgnat/g-spogwa.adb: Fix style errors.

4 years ago[Ada] Fix GNATprove support for iterated_component_associations
Piotr Trojanek [Wed, 23 Sep 2020 14:38:10 +0000 (16:38 +0200)]
[Ada] Fix GNATprove support for iterated_component_associations

gcc/ada/

* exp_spark.adb (Expand_SPARK_Array_Aggregate): Dedicated
routine for array aggregates; mostly reuses existing code, but
calls itself recursively for multi-dimensional array aggregates.
(Expand_SPARK_N_Aggregate): Call Expand_SPARK_Array_Aggregate to
do the actual expansion, starting from the first index of the
array type.

4 years ago[Ada] Multidimensional arrays with Iterated_Component_Associations
Ed Schonberg [Mon, 21 Sep 2020 13:37:46 +0000 (15:37 +0200)]
[Ada] Multidimensional arrays with Iterated_Component_Associations

gcc/ada/

* sem_aggr.adb (Resolve_Iterated_Component_Association): new
internal subprogram Remove_References, to reset semantic
information on each reference to the index variable of the
association, so that Collect_Aggregate_Bounds can work properly
on multidimensional arrays with nested associations, and
subsequent expansion into loops can verify that dimensions of
each subaggregate are compatible.

4 years ago[Ada] CUDA: handle parameter associations in expansion of CUDA_Execute
Ghjuvan Lacambre [Wed, 23 Sep 2020 07:33:54 +0000 (09:33 +0200)]
[Ada] CUDA: handle parameter associations in expansion of CUDA_Execute

gcc/ada/

* exp_prag.adb (Append_Copies): Handle N_Parameter_Associations.

4 years ago[Ada] Remove Digits_From_Size and Width_From_Size
Eric Botcazou [Mon, 21 Sep 2020 20:04:55 +0000 (22:04 +0200)]
[Ada] Remove Digits_From_Size and Width_From_Size

gcc/ada/

* ada_get_targ.adb (Digits_From_Size): Delete.
(Width_From_Size): Likewise.
* get_targ.adb (Digits_From_Size): Likewise.
(Width_From_Size): Likewise.
* get_targ.ads (Digits_From_Size): Likewise.
(Width_From_Size): Likewise.
* ttypes.ads: Remove with clause for Get_Targ.
(Standard_Short_Short_Integer_Width): Delete.
(Standard_Short_Integer_Width): Likewise.
(Standard_Integer_Width): Likewise.
(Standard_Long_Integer_Width): Likewise.
(Standard_Long_Long_Integer_Width): Likewise.
(Standard_Long_Long_Long_Integer_Width): Likewise.
(Standard_Short_Float_Digits): Likewise.
(Standard_Float_Digits): Likewise.
(Standard_Long_Float_Digits): Likewise.
(Standard_Long_Long_Float_Digits): Likewise.
* gnat1drv.adb (Adjust_Global_Switches): Adjust.

4 years ago[Ada] New flag Transform_Function_Array
Arnaud Charlet [Tue, 22 Sep 2020 08:50:22 +0000 (04:50 -0400)]
[Ada] New flag Transform_Function_Array

gcc/ada/

* exp_ch6.adb, freeze.adb, gnat1drv.adb, opt.ads, sem_ch6.adb
(Transform_Function_Array): New flag, split from Modify_Tree_For_C.
* exp_unst.adb: Minor reformatting.

4 years ago[Ada] Improve EINTR error handling on "poll" system call
Dmitriy Anisimkov [Mon, 21 Sep 2020 06:00:41 +0000 (12:00 +0600)]
[Ada] Improve EINTR error handling on "poll" system call

gcc/ada/

* libgnat/g-socpol.adb (Wait): Do not exit from loop on EINTR
error and timeout is over.