gcc.git
4 years agolibstdc++: Add PR number to ChangeLog entry and fix typos
Jonathan Wakely [Tue, 7 Jul 2020 07:23:12 +0000 (08:23 +0100)]
libstdc++: Add PR number to ChangeLog entry and fix typos

4 years agoaccept <case> and [cond] in ChangeLog
Alexandre Oliva [Tue, 7 Jul 2020 07:02:01 +0000 (09:02 +0200)]
accept <case> and [cond] in ChangeLog

Only '(' and ':' currently terminate file lists in ChangeLog entries
in the ChangeLog parser.  This rules out such legitimate entries as:

* filename <CASE>:
* filename [COND]:

This patch extends the ChangeLog parser to recognize these forms.

for  contrib/ChangeLog

* gcc-changelog/git_commit.py: Support CASE and COND.
* gcc-changelog/test_patches.txt: Add test.
* gcc-changelog/test_email.py: Add test.

Co-Authored-By: Martin Liska <mliska@suse.cz>
4 years agofix LTO streaming order dependence on randomness
Richard Biener [Mon, 6 Jul 2020 09:30:53 +0000 (11:30 +0200)]
fix LTO streaming order dependence on randomness

This fixes the sorting of to copy symbols in lto_output introduced
with GCC 10 to not depend on the actual values of the randomness
we append to LTO section names but instead on the order they appear
in the unsorted array.

This fixed observed debug info differences due to tree merging
prevailing different early debug pointers.

2020-07-06  Richard Biener  <rguenther@suse.de>

* lto-streamer-out.c (cmp_symbol_files): Use the computed
order map to sort symbols from the same sub-file together.
(lto_output): Compute a map of sub-file to an order number
it appears in the symbol output array.

4 years agoDaily bump.
GCC Administrator [Tue, 7 Jul 2020 00:16:40 +0000 (00:16 +0000)]
Daily bump.

4 years agoExclude calls to variadic lambda stubs from -Wnonnull checking (PR c++/95984).
Martin Sebor [Mon, 6 Jul 2020 21:23:37 +0000 (15:23 -0600)]
Exclude calls to variadic lambda stubs from -Wnonnull checking (PR c++/95984).

Resolves:
PR c++/95984 - Internal compiler error: Error reporting routines re-entered in -Wnonnull on a variadic lamnda
PR c++/96021 - missing -Wnonnull passing nullptr to a nonnull variadic lambda

gcc/c-family/ChangeLog:

PR c++/95984
* c-common.c (check_function_nonnull): Avoid checking syntesized calls
to stub lambda objects with null this pointer.
(check_nonnull_arg): Handle C++ nullptr.

gcc/cp/ChangeLog:

PR c++/95984
* call.c (build_over_call): Check calls only when tf_warning is set.

gcc/testsuite/ChangeLog:

PR c++/95984
* g++.dg/warn/Wnonnull6.C: New test.

4 years agolibstdc++: Cleanup whitespace and type trait usage in <optional>
Jonathan Wakely [Mon, 6 Jul 2020 20:54:12 +0000 (21:54 +0100)]
libstdc++: Cleanup whitespace and type trait usage in <optional>

This makes the formatting in <optional> consistent and also removes
redundant && tokens from template arguments for traits like
is_constructible and is_convertible.

libstdc++-v3/ChangeLog:

* include/std/optional (_Optional_payload_base, _Optional_base)
(optional, __optional_hash_call_base): Adjust whitespace and
other formatting. Remove redundant && tokens on template
arguments to type traits.

4 years agolibstdc++: Constrain std::make_optional
Jonathan Wakely [Mon, 6 Jul 2020 20:54:12 +0000 (21:54 +0100)]
libstdc++: Constrain std::make_optional

The standard rquires that std::make_optional is constrained similarly to
the std::optional constructors, which our implementation fails to do.

As a conforming extension this also adds a noexcept-specifier to each
std::make_optional overload.

libstdc++-v3/ChangeLog:

* include/std/optional (make_optional): Add enable_if
constraints and noexcept-specifier to each overload.
* testsuite/20_util/optional/make_optional-2.cc: New test.

4 years agolibstdc++: Add noexcept to std::optional initialization (PR 96036)
Jonathan Wakely [Mon, 6 Jul 2020 20:54:12 +0000 (21:54 +0100)]
libstdc++: Add noexcept to std::optional initialization (PR 96036)

libstdc++-v3/ChangeLog:

PR libstdc++/96036
* include/std/optional (optional): Add noexcept-specifier to
every constructor, assignment operator, emplace function and
dereference operator.
* testsuite/20_util/optional/assignment/noexcept.cc: New test.
* testsuite/20_util/optional/cons/noexcept.cc: New test.

4 years agoc++: Always use pushdecl for exception library helpers
Nathan Sidwell [Mon, 6 Jul 2020 16:54:40 +0000 (09:54 -0700)]
c++: Always use pushdecl for exception library helpers

The ABI exception helpers like __throw were being created by first
looking for them, and then adding if not found.  Primarily because
libitm wasn't declaring them with the correct exception specifiers.  I
fixed libitm a while back, so let's just use push_library_fn and let
the symbol table machinery deal with duplicates.  push_library_fn was
making the assumtion there wasn't already a decl available, by always
returning the new decl.  Bad things would happen if there was a
duplicate, because duplicate_decls explicitly gcc_frees the new decl.
Fixed by having it return whatever pushdecl returns.

gcc/cp/
* decl.c (push_library_fn): Return the decl pushdecl_toplevel returns.
* except.c (verify_library_fn): Replace with ...
(declare_library_fn_1): ... this fn.  Always push the fn.
(declare_library_fn): Call it.
(build_throw): Call declare_library_fn_1.
gcc/testsuite/
* g++.dg/eh/builtin10.C: Adjust expected errors.
* g++.dg/eh/builtin11.C: Likewise.
* g++.dg/eh/builtin5.C: Likewise.
* g++.dg/eh/builtin6.C: Likewise.
* g++.dg/eh/builtin7.C: Likewise.
* g++.dg/eh/builtin9.C: Likewise.
* g++.dg/parse/crash55.C: Likewise.

4 years agoPR fortran/95980 - ICE on using sync images with -fcheck=bounds
Harald Anlauf [Mon, 6 Jul 2020 16:58:23 +0000 (18:58 +0200)]
PR fortran/95980 - ICE on using sync images with -fcheck=bounds

In SELECT TYPE, the argument may be an incorrectly specified unlimited
polymorphic variable.  Avoid a NULL pointer dereference for clean error
recovery.

gcc/fortran/
PR fortran/95980
* match.c (copy_ts_from_selector_to_associate, build_class_sym):
Distinguish between unlimited polymorphic and ordinary variables
to avoid NULL pointer dereference.
* resolve.c (resolve_select_type):
Distinguish between unlimited polymorphic and ordinary variables
to avoid NULL pointer dereference.

4 years agoPR fortran/95709 - ICE in gfc_resolve_code, at fortran/resolve.c:11807
Harald Anlauf [Mon, 6 Jul 2020 16:52:39 +0000 (18:52 +0200)]
PR fortran/95709 - ICE in gfc_resolve_code, at fortran/resolve.c:11807

The legacy "assigned GOTO" accepts only scalar integer variables.
Check for proper arguments.

gcc/fortran/
PR fortran/95709
* resolve.c (gfc_resolve_code): Check for valid arguments to
assigned GOTO.

4 years agolibstdc++: Fix -Wmismatched-tags warnings (PR 96063)
Jonathan Wakely [Mon, 6 Jul 2020 15:19:23 +0000 (16:19 +0100)]
libstdc++: Fix -Wmismatched-tags warnings (PR 96063)

libstdc++-v3/ChangeLog:

* include/bits/fs_dir.h: Use consistent tag in class-head.
* include/bits/localefwd.h: Likwise.
* include/bits/regex.h: Likwise.
* include/bits/stl_map.h: Likwise.
* include/bits/stl_multimap.h: Likwise.
* include/bits/stl_multiset.h: Likwise.
* include/bits/stl_set.h: Likwise.
* include/std/complex: Likwise.
* include/std/functional: Likwise.
* include/std/future: Likwise.
* include/std/system_error: Likwise.
* include/std/thread: Likwise.
* include/std/tuple: Likwise.
* include/std/type_traits: Likwise.
* include/std/valarray: Likwise.

4 years agoc++: Allow empty-declaration in C++11 and later (PR 96068)
Jonathan Wakely [Mon, 6 Jul 2020 14:58:33 +0000 (15:58 +0100)]
c++: Allow empty-declaration in C++11 and later (PR 96068)

Since C++11 a semim-colon on its own at namespace scope is not invalid,
so do not give a pedantic diagnostic about it.

gcc/cp/ChangeLog:

PR c++/96068
* parser.c (cp_parser_toplevel_declaration): Only do pedwarn for
empty-declaration in C++98.

gcc/testsuite/ChangeLog:

* g++.old-deja/g++.bugs/900404_04.C: Add c++98_only selector to
dg-error for extra ';'.
* g++.old-deja/g++.law/missed-error2.C: Likewise.

4 years agotree-optimization/96075 - fix bogus misalignment calculation
Richard Biener [Mon, 6 Jul 2020 14:26:50 +0000 (16:26 +0200)]
tree-optimization/96075 - fix bogus misalignment calculation

This fixes bogus misalignment calculation for negative steps
since an assertion a previous comment indicated no longer holds:

      /* DR_STEP(dr) is the same as -TYPE_SIZE of the scalar type,
         otherwise we wouldn't be here.  */

Thus the following replaces DR_STEP by -TYPE_SIZE.

2020-07-06  Richard Biener  <rguenther@suse.de>

PR tree-optimization/96075
* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Use
TYPE_SIZE_UNIT of the vector component type instead of DR_STEP
for the misalignment calculation for negative step.

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

4 years ago[Ada] Avoid forced loading of System.Priority in CodePeer mode
Piotr Trojanek [Sun, 10 May 2020 08:03:35 +0000 (10:03 +0200)]
[Ada] Avoid forced loading of System.Priority in CodePeer mode

gcc/ada/

* checks.adb (Apply_Scalar_Range_Check): Use Is_RTE.

4 years ago[Ada] Time_IO.Image: Allow printing the time zone
Bob Duff [Sun, 10 May 2020 15:29:27 +0000 (11:29 -0400)]
[Ada] Time_IO.Image: Allow printing the time zone

gcc/ada/

* libgnat/g-catiio.ads: Document newly supported format.  Add
ISO_Time constant, for convenience.
* libgnat/g-catiio.adb (Image_Helper): New helper function to do
all the formatting work, called by the two exported Image
functions.  Add support for "%:::z" here. Add a Time_Zone
parameter used by the "%:::z" processing. This parameter is not
used for the actual time zone computations; local time is always
used for that, for ease of implementation reasons.  It would
make sense to use Append throughout this function, but that's a
cleanup for another day.
(Image): Modify these to pass the local time zone, or the
specified time zone, as appropriate.

4 years ago[Ada] Time_IO.Value: Allow subseconds and time zones together
Bob Duff [Sun, 10 May 2020 00:23:58 +0000 (20:23 -0400)]
[Ada] Time_IO.Value: Allow subseconds and time zones together

gcc/ada/

* libgnat/g-catiio.ads: Change the regular expression that
documents the allowed format to match what ISO-8601 allows.
* libgnat/g-catiio.adb (Scan_Subsecond): Rewrite so it doesn't
assume the subsecond comes last.
(Parse_ISO_8601): Parse an optional subsecond, followed by an
optional time zone, rather than making these alternatives to
each other.

4 years ago[Ada] Clean up GNAT.Calendar.Time_IO.Value
Bob Duff [Sat, 9 May 2020 17:09:37 +0000 (13:09 -0400)]
[Ada] Clean up GNAT.Calendar.Time_IO.Value

gcc/ada/

* libgnat/g-catiio.adb (Parse_ISO_8601): Minor cleanups:

Give some objects clearer names.
Make some objects more local to where they are used.

Remove some validity checks that can't fail, because some of
the variables tested have been moved so they're not visible here.
Anyway, Wrong_Syntax is about errors in the input, not data
validity.

Use Time_Zone_Seen instead of Local_Sign = ' ' to determine
that a time zone indication was seen.

We don't need to distinguish two different kinds of
syntax error (End_Of_Source_Reached and Wrong_Syntax),
so use Wrong_Syntax always.

Remove comment, "Certain scanning scenarios may handle
this exception on their own."; there are no such scenarios.

4 years ago[Ada] Implement Time_IO.Image with Time_Zone
Bob Duff [Fri, 8 May 2020 22:37:50 +0000 (18:37 -0400)]
[Ada] Implement Time_IO.Image with Time_Zone

gcc/ada/

* libgnat/g-catiio.ads, libgnat/g-catiio.adb (Image): New
function. It might seem like the local-time Image should be
implemented in terms of the Time_Zone Image, but that would be
far harder to implement, so we do it the other way around.

4 years ago[Ada] Use Stream_Element_Arrays internally for secure hash computations
Thomas Quinot [Thu, 7 May 2020 14:08:03 +0000 (16:08 +0200)]
[Ada] Use Stream_Element_Arrays internally for secure hash computations

gcc/ada/

* libgnat/g-sechas.ads, libgnat/g-sechas.adb: Refactor to use
Stream_Element_Array as the internal buffer type.
* libgnat/g-shshco.adb: Adjust to use Stream_Element_Offset
instead of Integer as the index in the internal state buffer.

4 years ago[Ada] Various typo fixes and reformatting of comments
Gary Dismukes [Thu, 7 May 2020 18:58:33 +0000 (14:58 -0400)]
[Ada] Various typo fixes and reformatting of comments

gcc/ada/

* doc/gnat_rm/implementation_defined_pragmas.rst, errout.ads,
erroutc.adb, exp_ch4.adb, exp_ch6.adb, freeze.adb: Comment
rewording/reformatting/typo fixes.  Replace "ie." with "that is"
in comment; "can not" -> "cannot", and remove an extraneous
underscore in another comment.
* gnat_rm.texi, gnat_ugn.texi: Regenerate.

4 years ago[Ada] Ada2020: AI12-0198 potentially unevaluated array components
Javier Miranda [Tue, 5 May 2020 17:22:47 +0000 (13:22 -0400)]
[Ada] Ada2020: AI12-0198 potentially unevaluated array components

gcc/ada/

* sem_util.ads (Interval_Lists.Aggregate_Intervals): New
subprogram.
* sem_util.adb (Has_Null_Others_Choice,
Non_Static_Or_Null_Range, Interval_Lists.Aggregate_Intervals):
New subprograms.
(Is_Potentially_Unevaluated): Adding support to detect
potentially unevaluated components of array aggregates.

4 years ago[Ada] Correct time zone in GNAT.Calendar.Time_IO.Value
Bob Duff [Fri, 8 May 2020 13:55:36 +0000 (09:55 -0400)]
[Ada] Correct time zone in GNAT.Calendar.Time_IO.Value

gcc/ada/

* libgnat/g-catiio.adb (Parse_ISO_8601): New name for
Parse_ISO_8861_UTC.  8601 is the correct ISO standard number.
Also, "UTC" was confusing. All Time values are represented in
UTC, but the ISO 8601 date strings include a time zone.

If a time zone was specified, call
Ada.Calendar.Formatting.Time_Of instead of
GNAT.Calendar.Time_Of, because the latter adjusts to the current
time zone, whereas we want to use (just) the time zone specified
in the ISO string.  This allows us to pass Time_Zone instead to
Time_Of, instead of adjusting by Local_Disp by hand.

If no time zone was specified, call GNAT.Calendar.Time_Of as
before.

Use expanded names to clarify which Time_Of is being called.
Remove redundant comment, and move nonredundant part of the
commment to the spec.
(Value): Minor: use "not in" instead of "or else".
* libgnat/g-catiio.ads: Comment moved here. Correct the ISO
standard number.
* libgnat/g-calend.adb: Add ??? comments.
* libgnat/a-calend.ads, libgnat/a-calend.adb: Update obsolete
comments regarding the representation of type Time. Move the
information about the epoch (year 2150) to the spec, and avoid
uttering "2150" more than once.
* libgnat/a-catizo.ads (Time_Offset): Add comment.

4 years ago[Ada] Crash on derived type with rep. clause and renamed discriminant
Ed Schonberg [Fri, 8 May 2020 13:27:24 +0000 (09:27 -0400)]
[Ada] Crash on derived type with rep. clause and renamed discriminant

gcc/ada/

* exp_ch5.adb (Find_Component): If the target type is a derived
record type and the required component is a discriminant that is
renamed in the derived type declaration, use the name of the
original discriminant to locate the intended target component.

4 years ago[Ada] Hang on generic declaration with ambiguous formal package
Justin Squirek [Thu, 7 May 2020 11:26:59 +0000 (07:26 -0400)]
[Ada] Hang on generic declaration with ambiguous formal package

gcc/ada/

* sem_ch12.adb (Analyze_Associations): Add check for errors on
the generic formal before continuing with instantiation.

4 years ago[Ada] AI12-0366 Changes to Big_Integer and Big_Real
Arnaud Charlet [Thu, 7 May 2020 07:09:18 +0000 (03:09 -0400)]
[Ada] AI12-0366 Changes to Big_Integer and Big_Real

gcc/ada/

* libgnat/a-nbnbin.ads, libgnat/a-nbnbin.adb,
libgnat/a-nbnbin__gmp.adb: Use more Valid_Big_Integer.

4 years ago[Ada] Fix typo in comment of Get_Index_Subtype
Piotr Trojanek [Thu, 7 May 2020 13:52:20 +0000 (15:52 +0200)]
[Ada] Fix typo in comment of Get_Index_Subtype

gcc/ada/

* exp_util.ads (Get_Index_Subtype): Fix duplicate "Last".

4 years ago[Ada] There is no Expressions field in N_Delta_Aggregate node
Ed Schonberg [Thu, 7 May 2020 14:07:17 +0000 (10:07 -0400)]
[Ada] There is no Expressions field in N_Delta_Aggregate node

gcc/ada/

* sinfo.ads: Indicate that Field 1 of an N_Delta_Aggregate is
unused. Previously it was erroneously labelled as holding an
Expressions list, in analogy with other aggregate constructs,
but there are no Expressions attached to this node syntactically
or semantically.

4 years ago[Ada] Fix evaluation of Enum_Rep applied to imported constant
Piotr Trojanek [Thu, 7 May 2020 12:08:07 +0000 (14:08 +0200)]
[Ada] Fix evaluation of Enum_Rep applied to imported constant

gcc/ada/

* sem_attr.adb (Eval_Attribute): Check if constant has an
initialization expression.

4 years ago[Ada] Set range checks flag on 'Update for GNATprove in expansion
Piotr Trojanek [Wed, 29 Apr 2020 20:15:16 +0000 (22:15 +0200)]
[Ada] Set range checks flag on 'Update for GNATprove in expansion

gcc/ada/

* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Apply
scalar range checks.
* sem_attr.adb (Resolve_Attribute): Do not set scalar range
checks when resolving attribute Update.

4 years ago[Ada] Predicates and the current instance of a subtype (AI12-0068)
Gary Dismukes [Wed, 6 May 2020 01:10:25 +0000 (21:10 -0400)]
[Ada] Predicates and the current instance of a subtype (AI12-0068)

gcc/ada/

* sem_attr.adb (Analyze_Attribute, Attribute_Constrained): Issue
a warning if the attribute prefix is a current instance
reference within an aspect of a type or subtype.
(Address_Checks): Replace test of Is_Object (Ent) with
Is_Object_Reference (P) so that testing for current instances
will be done.
(Eval_Attribute): Add test for current instance reference, to
ensure that we still fold array attributes when current
instances are involved, since value prefixes are allowed for
array attributes, and will now be excluded by
Is_Object_Reference.
* sem_util.ads (Is_Current_Instance_Reference_In_Type_Aspect):
New exported query function.
* sem_util.adb (Is_Object_Reference): Return False for the case
where N is a current instance reference within an
aspect_specification of a type or subtype (basically if the
reference occurs within a predicate, invariant, or DIC aspect
expression).
(Is_Current_Instance_Reference_In_Type_Aspect): New function
that tests whether a node is a reference to a current instance
formal of a predicate, invariant, or
Default_Initial_Condition (DIC) subprogram.

4 years ago[Ada] Visibility error with aggregate in Declare_Expression
Ed Schonberg [Wed, 6 May 2020 16:03:27 +0000 (12:03 -0400)]
[Ada] Visibility error with aggregate in Declare_Expression

gcc/ada/

* sem_res.adb (Resolve_Declare_Expression): New subprogram, to
install the scope holding local declarations of the expression,
before completing its resolution.
(Resolve): For an Expression_With_Actions that comes from a
source occurrence of a Declare_Expression, call new subprogram.

4 years ago[Ada] Simplify implicit loading of Tasking_State in GNATprove_Mode
Piotr Trojanek [Wed, 6 May 2020 15:19:56 +0000 (17:19 +0200)]
[Ada] Simplify implicit loading of Tasking_State in GNATprove_Mode

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Reuse SPARK_Implicit_Load.

4 years ago[Ada] Crash when an exception handler is executed with -gnatdk
Piotr Trojanek [Wed, 6 May 2020 16:40:22 +0000 (18:40 +0200)]
[Ada] Crash when an exception handler is executed with -gnatdk

gcc/ada/

* sem_ch5.adb (Analyze_Loop_Parameter_Specification): Propagate
exception when switch -gnatdk is used and no previous errors are
present.
* sem_eval.adb (Compile_Time_Known_Value, Is_In_Range):
Likewise.
* sem_warn.adb (Operand_Has_Warnings_Suppressed): Likewise.

4 years ago[Ada] Refine use of access types in unnesting
Richard Kenner [Mon, 4 May 2020 13:47:30 +0000 (09:47 -0400)]
[Ada] Refine use of access types in unnesting

gcc/ada/

* exp_unst.adb (Needs_Fat_Pointer): Don't check for formal.
(Unnest_Subprogram): Use 'Unchecked_Access instead of 'Access
when populating activation record.

4 years ago[Ada] Fix bad interaction between Unchecked_Conversion and limited type
Eric Botcazou [Tue, 5 May 2020 20:54:29 +0000 (22:54 +0200)]
[Ada] Fix bad interaction between Unchecked_Conversion and limited type

gcc/ada/

* exp_ch6.adb (Add_Simple_Call_By_Copy_Code): Rename parameter
from Bit_Packed_Array to Force.
(Expand_Actuals): Do not apply BIP processing if the subprogram
is intrinsic.  Adjust calls to Add_Simple_Call_By_Copy_Code and
add one for In parameters whose actual is a CPP constructor call.

4 years ago[Ada] Remove obsolete code in Eval_Attribute
Eric Botcazou [Tue, 5 May 2020 14:09:33 +0000 (16:09 +0200)]
[Ada] Remove obsolete code in Eval_Attribute

gcc/ada/

* sem_attr.adb (Eval_Attribute): Do not apply range checks in
the case of 'Pos applied to an integer type here.

4 years ago[Ada] Crash on declaration with aggregate for unchecked union
Ed Schonberg [Tue, 5 May 2020 00:05:03 +0000 (20:05 -0400)]
[Ada] Crash on declaration with aggregate for unchecked union

gcc/ada/

* sem_ch3.adb (Analyze_Object_Declaration): If the type is an
Unchecked_Union, and the expression is an aggregate. complete
the analysis and resolution of the aggregate, and treat like a
regular object declaration, instead of as a renaming
declarattion.

4 years ago[Ada] Small cleanup throughout Exp_Ch9
Eric Botcazou [Tue, 5 May 2020 08:54:56 +0000 (10:54 +0200)]
[Ada] Small cleanup throughout Exp_Ch9

gcc/ada/

* exp_ch9.adb (Is_Potentially_Large_Family): Add documentation.
(Actual_Index_Expression): Use Entry_Index_Type.
(Build_Entry_Count_Expression): Likewise.
(Build_Find_Body_Index): Likewise.
(Collect_Entry_Families): Likewise. Use directly the bounds of
the index type to find out whether the family is large.
(Entry_Index_Expression): Likewise.

4 years ago[Ada] Remove special case for processing null range in GNATprove
Piotr Trojanek [Mon, 4 May 2020 17:14:19 +0000 (19:14 +0200)]
[Ada] Remove special case for processing null range in GNATprove

gcc/ada/

* sem_res.adb (Resolve_Range): Resolve both low and high bounds
with the range type.

4 years ago[Ada] AI12-0376 Relax RM 13.1(10) rule wrt primitive operations
Arnaud Charlet [Wed, 1 Apr 2020 10:29:53 +0000 (06:29 -0400)]
[Ada] AI12-0376 Relax RM 13.1(10) rule wrt primitive operations

gcc/ada/

* aspects.ads (Is_Representation_Aspect):
Default_Component_Value is a representation aspect.
* sem_ch13.adb (Check_Aspect_Too_Late, Rep_Item_Too_Late): Relax
RM 13.1(10) rule wrt primitive operations for Ada 202x.

4 years ago[Ada] Improve run-time performance for large initialized allocators
Eric Botcazou [Mon, 4 May 2020 17:56:28 +0000 (19:56 +0200)]
[Ada] Improve run-time performance for large initialized allocators

gcc/ada/

* exp_aggr.adb (Aggr_Assignment_OK_For_Backend): Move to library
level and use a new predicate Is_OK_Aggregate to recognize the
aggregates suitable for direct assignment by the back-end.
(Convert_Array_Aggr_In_Allocator): If neither in CodePeer mode nor
generating C code, generate a direct assignment instead of further
expanding if Aggr_Assignment_OK_For_Backend returns true.

4 years ago[Ada] Wording problems with predicates (AI12-0099)
Gary Dismukes [Sun, 3 May 2020 22:45:37 +0000 (18:45 -0400)]
[Ada] Wording problems with predicates (AI12-0099)

gcc/ada/

* sem_aux.adb: Add a with clause for Nlists.
(Nearest_Ancestor): Test for the case of concurrent
types (testing for both Is_Concurrent_Type and
Is_Concurrent_Record_Type), and return the first ancestor in the
Interfaces list if present (otherwise will return Empty if no
interfaces).
* sem_ch13.adb (Build_Predicate_Functions): Add a ??? comment
about missing handling for adding predicates when they can be
inherited from multiple progenitors.

4 years ago[Ada] Default_Initial_Condition check done after extended return with init
Arnaud Charlet [Mon, 4 May 2020 08:56:52 +0000 (04:56 -0400)]
[Ada] Default_Initial_Condition check done after extended return with init

gcc/ada/

* par-ch6.adb (P_Return_Object_Declaration): Set
Has_Init_Expression flag.

4 years agonvptx: Add support for vadd.add and vsub.add instructions.
Roger Sayle [Mon, 6 Jul 2020 06:46:52 +0000 (07:46 +0100)]
nvptx: Add support for vadd.add and vsub.add instructions.

The following patch adds support for three-input addition instructions to
the nvptx backend.  The PTX ISA's "vadd.u32.u32.u32.add d, a, b, c"
instruction effectively implements 32-bit d = a+b+c, and the
"vsub.u32.u32.u32 d,a,b,c" instruction that provides 32-bit d = (a-b)+c.
The hope is that these mnemonics help ptxas generate the low-level
hardware's IADD3 instruction.

2020-07-06  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog:
* config/nvptx/nvptx.md (*vadd_addsi4): New instruction.
(*vsub_addsi4): New instruction.

gcc/testsuite/ChangeLog:
* gcc.target/nvptx/vadd_add.c: New test.
* gcc.target/nvptx/vsub_add.c: New test.

4 years agocris: New peephole2 movulsr + test-case.
Hans-Peter Nilsson [Mon, 6 Jul 2020 00:04:48 +0000 (02:04 +0200)]
cris: New peephole2 movulsr + test-case.

Combine likes to change a zero-extension / and + shift as seen
in the test-case source to a logical shift followed by an and of
the shifted mask, like:
 lsrq 1,r0
 and.d 0x7f,r0

This was observed in the hot loop of coremark crcu16 and crcu32,
when doing other changes affecting instruction selection.  While
fixable by other means (like instruction costs or combine
patches), I wanted to break this out from those "other means".
The similarity to extant peephole optimizations is not
deliberate.

I noticed some paths to other peephole2 test-cases have changed
due to moves and renaming, so I updated them.

gcc:
* config/cris/cris.md (movulsr): New peephole2.

gcc/testsuite:
* gcc.target/cris/peep2-movulsr.c: New test.

4 years agocris: Correct gcc_assert for atomic_fetch_op pattern
Hans-Peter Nilsson [Sun, 5 Jul 2020 23:51:42 +0000 (01:51 +0200)]
cris: Correct gcc_assert for atomic_fetch_op pattern

Yet another misnumbering of operands: the asserted non-overlap
would be the only benign operands overlap.  "Suddenly" exposed
by g++.dg/cpp0x/pr81325.C when testing unrelated changes
affecting register allocation.

To wit, operands 2 and 1 are the only ones that are safe for
overlap, it's only that it doesn't seem to make much sense to
write the address of the atomic data as the atomic data.

gcc:
* config/cris/sync.md ("cris_atomic_fetch_<atomic_op_name><mode>_1"):
Correct gcc_assert of overlapping operands.

4 years agoDaily bump.
GCC Administrator [Mon, 6 Jul 2020 00:16:29 +0000 (00:16 +0000)]
Daily bump.

4 years agocris: update recent patterns. Simplify cris_select_cc_mode.
Hans-Peter Nilsson [Sun, 5 Jul 2020 23:10:54 +0000 (01:10 +0200)]
cris: update recent patterns. Simplify cris_select_cc_mode.

The code in cris_select_cc_mode for selecting CC_NZmode was
partly inconsistent with the comment and partly seemed
ambiguous.  I couldn't find a reason why I qualified selection
of CC_NZmode on the setting operation once a matching user was
spotted, so I just removed that.  The cris.c update was due to
observing the new test-case failing; the CC_NZmode compare
wasn't eliminated.

The recently re-instated adds/addu/subs/subu/bound patterns are
rewritten to replace the use of match_operator with iterators.

gcc:
* config/cris/cris.c (cris_select_cc_mode): Always return
CC_NZmode for matching comparisons.  Clarify comments.
* config/cris/cris-modes.def: Clarify mode comment.
* config/cris/cris.md (plusminus, plusminusumin, plusumin): New
code iterators.
(addsub, addsubbo, nd): New code iterator attributes.
("*<addsub><su>qihi"): Rename from "*extopqihi".  Use code
iterator constructs instead of match_operator constructs.
("*<addsubbo><su><nd><mode>si<setnz>"): Similar from
"*extop<mode>si<setnz>".
("*add<su>qihi_swap"): Similar from "*addxqihi_swap".
("*<addsubbo><su><nd><mode>si<setnz>_swap"): Similar from
"*extop<mode>si<setnz>_swap".

gcc/testsuite:
* gcc.target/cris/pr93372-39.c: New test.

4 years agocris.md: Reinstate add/sub with extend
Hans-Peter Nilsson [Sun, 5 Jul 2020 22:52:39 +0000 (00:52 +0200)]
cris.md: Reinstate add/sub with extend

When cleaning out the multitude of patterns with unknown
coverage, this one went the way of the bathwater.  It's use is
barely common enough to mark when diffing libgcc, and has a
minimal impact on performance-testsuites.  Anyway, reinstated
with a couple of test-cases.  It's suboptimal of gcc-core not to
make use of the SImode pattern when performing HImode; see the
FIXME (which is actually also reinstated).

This version uses match_operator, for continuity but will be
replaced with a version making use of iterators (like it does
for the mode).

gcc:
* config/cris/cris.md ("*extopqihi", "*extop<mode>si<setnz>_swap")
("*extop<mode>si<setnz>", "*addxqihi_swap"): Reinstate.

gcc/testsuite:
* gcc.target/cris/pr93372-36.c, gcc.target/cris/pr93372-37.c,
gcc.target/cris/pr93372-38.c: New tests.

4 years agoTest global identifiers against what is specified interfaces.
Thomas Koenig [Sun, 5 Jul 2020 18:11:35 +0000 (20:11 +0200)]
Test global identifiers against what is specified interfaces.

Apart from calling gfc_compare_interfaces to check interfaces against
global identifiers, this also sets and check a few sym->error flags
to avoid duplicate error messages.  I thought about issuing errors
on mismatched interfaces, but when the procedure is not invoked,
a warning should be enough to alert the user.

gcc/fortran/ChangeLog:

PR fortran/27318
* frontend-passes.c (check_against_globals): New function.
(gfc_check_externals): Split; also invoke check_against_globals
via gfc_traverse_ns.
(gfc_check_externals0): Recursive part formerly in
gfc_check_externals.
* resolve.c (resolve_global_procedure): Set sym->error on
interface mismatch.
* symbol.c (ambiguous_symbol): Check for, and set sym->error.

gcc/testsuite/ChangeLog:

PR fortran/27318
* gfortran.dg/error_recovery_1.f90: Adjust test case.
* gfortran.dg/use_15.f90: Likewise.
* gfortran.dg/interface_47.f90: New test.

4 years agoDaily bump.
GCC Administrator [Sun, 5 Jul 2020 00:16:21 +0000 (00:16 +0000)]
Daily bump.

4 years agocoroutines, testsuite: Rename a test, NFC.
Iain Sandoe [Sat, 4 Jul 2020 18:01:03 +0000 (19:01 +0100)]
coroutines, testsuite: Rename a test, NFC.

The test was committed with a placeholder name, this
renames it as described in the PR.

gcc/testsuite/ChangeLog:

* g++.dg/coroutines/pr9xxxx-mismatched-traits-and-promise-prev.C: Moved to...
* g++.dg/coroutines/pr94760-mismatched-traits-and-promise-prev.C: ...here.

4 years agoDaily bump.
GCC Administrator [Sat, 4 Jul 2020 00:16:26 +0000 (00:16 +0000)]
Daily bump.

4 years agoExtend store merging to STRING_CST
Eric Botcazou [Fri, 3 Jul 2020 16:10:25 +0000 (18:10 +0200)]
Extend store merging to STRING_CST

The GIMPLE store merging pass doesn't merge STRING_CSTs in the general
case, although they are accepted by native_encode_expr; the reason is
that the pass only works with integral modes, i.e. with chunks whose
size is a power of two.

There are two possible ways of extending it to handle STRING_CSTs:
1) lift the condition of integral modes and treat STRING_CSTs as
other _CST nodes but with arbitrary size; 2) implement a specific
and separate handling for STRING_CSTs.

The attached patch implements 2) for the following reasons: on the
one hand, even in Ada where character strings are first-class citizens,
cases where merging STRING_CSTs with other *_CST nodes would be possible
are quite rare in practice; on the other hand, string concatenations
happen more naturally and frequently thanks to the "&" operator, giving
rise to merging opportunities.

gcc/ChangeLog:
* gimple-fold.c (gimple_fold_builtin_memory_op): Fold calls that
were initially created for the assignment of a variable-sized
object and whose source is now a string constant.
* gimple-ssa-store-merging.c (struct merged_store_group): Document
STRING_CST for rhs_code field.
Add string_concatenation boolean field.
(merged_store_group::merged_store_group): Initialize it as well as
bit_insertion here.
(merged_store_group::do_merge): Set it upon seeing a STRING_CST.
Also set bit_insertion here upon seeing a BIT_INSERT_EXPR.
(merged_store_group::apply_stores): Clear it for small regions.
Do not create a power-of-2-sized buffer if it is still true.
And do not set bit_insertion here again.
(encode_tree_to_bitpos): Deal with BLKmode for the expression.
(merged_store_group::can_be_merged_into): Deal with STRING_CST.
(imm_store_chain_info::coalesce_immediate_stores): Set bit_insertion
to true after changing MEM_REF stores into BIT_INSERT_EXPR stores.
(count_multiple_uses): Return 0 for STRING_CST.
(split_group): Do not split the group for a string concatenation.
(imm_store_chain_info::output_merged_store): Constify and rename
some local variables.  Build an array type as destination type
for a string concatenation, as well as a zero mask, and call
build_string to build the source.
(lhs_valid_for_store_merging_p): Return true for VIEW_CONVERT_EXPR.
(pass_store_merging::process_store): Accept STRING_CST on the RHS.
* gimple.h (gimple_call_alloca_for_var_p): New accessor function.
* gimplify.c (gimplify_modify_expr_to_memcpy): Set alloca_for_var.
* tree.h (CALL_ALLOCA_FOR_VAR_P): Document it for BUILT_IN_MEMCPY.

gcc/testsuite/ChangeLog:
* gnat.dg/opt87.adb: New test.
* gnat.dg/opt87_pkg.ads: New helper.
* gnat.dg/opt87_pkg.adb: Likewise.

4 years agoipa-sra: Avoid transitive splits with type mismatches (PR 96040)
Martin Jambor [Fri, 3 Jul 2020 15:37:33 +0000 (17:37 +0200)]
ipa-sra: Avoid transitive splits with type mismatches (PR 96040)

PR 96040 revealed IPA-SRA, when checking whether an intended split is
the same as the one in a called function does not also check if the
types match and the transformation code does not handle any resulting
type mismatches.  This patch simply avoids the the split in the case
of mismatches, so that we do not have to be careful about invalid
floating-point values being passed in floating point registers and
related issues.

gcc/ChangeLog:

2020-07-03  Martin Jambor  <mjambor@suse.cz>

PR ipa/96040
* ipa-sra.c (all_callee_accesses_present_p): Do not accept type
mismatched accesses.

gcc/testsuite/ChangeLog:

2020-07-03  Martin Jambor  <mjambor@suse.cz>

PR ipa/96040
* gcc.dg/ipa/pr96040.c: New test.

4 years ago[OpenACC] Revert always-copyfrom behavior for 'GOMP_MAP_FORCE_FROM' in 'libgomp/oacc...
Thomas Schwinge [Thu, 14 May 2020 18:48:10 +0000 (20:48 +0200)]
[OpenACC] Revert always-copyfrom behavior for 'GOMP_MAP_FORCE_FROM' in 'libgomp/oacc-mem.c:goacc_exit_data_internal'

As done for 'GOMP_MAP_FROM', also for 'GOMP_MAP_FORCE_FROM' we should only
'gomp_copy_dev2host' if 'n->refcount == 0'.

This had gotten altered in commit 378da98fcc907d05002bcd3d6ff7951f0cf485e5
(r279621) "OpenACC reference count overhaul".

libgomp/
* oacc-mem.c (goacc_exit_data_internal): Revert always-copyfrom
behavior for 'GOMP_MAP_FORCE_FROM'.
* testsuite/libgomp.oacc-c-c++-common/pr92843-1.c: Adjust XFAIL.

4 years ago[OpenACC] Remove (unused) 'GOMP_MAP_ALWAYS_FROM' handling from 'libgomp/oacc-mem...
Thomas Schwinge [Thu, 14 May 2020 17:17:32 +0000 (19:17 +0200)]
[OpenACC] Remove (unused) 'GOMP_MAP_ALWAYS_FROM' handling from 'libgomp/oacc-mem.c:goacc_exit_data_internal'

This had gotten added in commit 378da98fcc907d05002bcd3d6ff7951f0cf485e5
(r279621) "OpenACC reference count overhaul", but it doesn't have any use in
OpenACC.

libgomp/
* oacc-mem.c (goacc_exit_data_internal): Remove
'GOMP_MAP_ALWAYS_FROM' handling.

4 years ago[PATCH] nvptx: Add support for popcount and widening multiply instructions
Roger Sayle [Fri, 3 Jul 2020 11:56:29 +0000 (12:56 +0100)]
[PATCH] nvptx: Add support for popcount and widening multiply instructions

2020-07-01  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog:
* config/nvptx/nvptx.md (popcount<mode>2): New instructions.
(mulhishi3, mulsidi3, umulhisi3, umulsidi3): New instructions.

gcc/testsuite/ChangeLog:
* gcc.target/nvptx/popc-1.c: New test.
* gcc.target/nvptx/popc-2.c: New test.
* gcc.target/nvptx/popc-3.c: New test.
* gcc.target/nvptx/mul-wide.c: New test.
* gcc.target/nvptx/umul-wide.c: New test.

4 years agogcov-dump: fix build for i386
Martin Liska [Fri, 3 Jul 2020 11:45:45 +0000 (13:45 +0200)]
gcov-dump: fix build for i386

gcc/ChangeLog:

PR bootstrap/96046
* gcov-dump.c (tag_function): Use gcov_position_t
type.

Co-Authored-By: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
4 years agotree-optimization/96037 - fix uninitialized use of slp_op
Richard Biener [Fri, 3 Jul 2020 10:50:37 +0000 (12:50 +0200)]
tree-optimization/96037 - fix uninitialized use of slp_op

The following avoids leaving slp_def as passed to vect_is_simple_use
by reference uninitialized.

2020-07-03  Richard Biener  <rguenther@suse.de>

PR tree-optimization/96037
* tree-vect-stmts.c (vect_is_simple_use): Initialize *slp_def.

4 years agofix scalar BB vectorization costing
Richard Biener [Fri, 3 Jul 2020 09:28:53 +0000 (11:28 +0200)]
fix scalar BB vectorization costing

We were costing the scalar pattern stmts rather than the scalar
original stmt and also not appropriately looking at the pattern
stmt for whether the stmt is vectorized.

2020-07-03  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_bb_slp_scalar_cost): Cost the
original non-pattern stmts, look at the pattern stmt
vectorization status.

* gcc.dg/vect/costmodel/x86_64/costmodel-vect-slp-2.c: New
testcase.

4 years agoamdgcn: Add fold_left_plus vector reductions
Andrew Stubbs [Mon, 10 Feb 2020 13:23:29 +0000 (13:23 +0000)]
amdgcn: Add fold_left_plus vector reductions

These aren't real in-order instructions, because the ISA can't do that
quickly, but a means to allow regular out-of-order reductions when that's
good enough, but the middle-end doesn't know so.

gcc/
* config/gcn/gcn-valu.md (fold_left_plus_<mode>): New.

4 years agorefactor SLP constant insertion and provde entry insert helper
Richard Biener [Fri, 3 Jul 2020 08:09:39 +0000 (10:09 +0200)]
refactor SLP constant insertion and provde entry insert helper

This provides helpers to insert stmts on region entry abstracted
from loop/basic-block split out from vec_init_vector and used
from the SLP constant code generation path.  The SLP constant
code generation path is also changed to avoid needless SSA
copying since we can store VECTOR_CSTs directly in the vectorized
defs array, improving the IL from the vectorizer.

2020-07-03  Richard Biener  <rguenther@suse.de>

* tree-vectorizer.h (vec_info::insert_on_entry): New.
(vec_info::insert_seq_on_entry): Likewise.
* tree-vectorizer.c (vec_info::insert_on_entry): Implement.
(vec_info::insert_seq_on_entry): Likewise.
* tree-vect-stmts.c (vect_init_vector_1): Use
vec_info::insert_on_entry.
(vect_finish_stmt_generation): Set modified bit after
adjusting VUSE.
* tree-vect-slp.c (vect_create_constant_vectors): Simplify
by using vec_info::insert_seq_on_entry and bypassing
vec_init_vector.
(vect_schedule_slp_instance): Deal with all-constant
children later.

4 years agonvptx: Fix ICE in nvptx_vector_alignment on gcc.dg/attr-vector_size.c
Roger Sayle [Fri, 3 Jul 2020 08:57:39 +0000 (10:57 +0200)]
nvptx: Fix ICE in nvptx_vector_alignment on gcc.dg/attr-vector_size.c

This patch addresses the ICE in gcc.dg/attr-vector_size.c during
make -k check on nvptx-none.  The actual ICE looks like:

testsuite/gcc.dg/attr-vector_size.c:29:1: internal compiler error: \
  in tree_to_shwi, at tree.c:7321
0xf53bf2 tree_to_shwi(tree_node const*)
../../gcc/gcc/tree.c:7321
0xff1969 nvptx_vector_alignment
../../gcc/gcc/config/nvptx/nvptx.c:5105^M

The problem is that the caller has ensured that TYPE_SIZE(type) is
representable as an unsigned HOST_WIDE_INT, but nvptx_vector_alignment is
accessing it as a signed HOST_WIDE_INT which overflows in pathological
conditions.  Amongst those pathological conditions is that a TYPE_SIZE of
zero can sometimes reach this function, prior to an error being emitted.
Making sure the result is not less than the mode's alignment and not greater
than BIGGEST_ALIGNMENT fixes the ICEs, and generates the expected
compile-time error messages.

Tested on --target=nvptx-none, with a "make" and "make check" which results
in four fewer unexpected failures and three more expected passes.

2020-07-03  Roger Sayle  <roger@nextmovesoftware.com>
    Tom de Vries  <tdevries@suse.de>

gcc/ChangeLog:

PR target/90932
* config/nvptx/nvptx.c (nvptx_vector_alignment): Use tree_to_uhwi
to access TYPE_SIZE (type).  Return at least the mode's alignment.

4 years agotestsuite: Properly quote dejagnu negative line numbers
David Edelsohn [Thu, 2 Jul 2020 19:44:35 +0000 (15:44 -0400)]
testsuite: Properly quote dejagnu negative line numbers

Some testcases specifically test for negative line numbers. Those tests with
bare line numbers may be parsed incorrectly by Tcl/Expect as invalid options.
This patch encloses the negative numbers in braces so that they are
recognized as an optional parameter.

gcc/testsuite/ChangeLog

2020-07-02  David Edelsohn  <dje.gcc@gmail.com>

* gcc.dg/fixits-pr84852-1.c: Enclose negative line number in braces.
* gcc.dg/fixits-pr84852-2.c: Same.
* gcc.dg/pr89410-1.c: Same.
* gcc.dg/pr89410-2.c: Same.

4 years agoDaily bump.
GCC Administrator [Fri, 3 Jul 2020 00:16:25 +0000 (00:16 +0000)]
Daily bump.

4 years agotestsuite: Solaris reports warning on line 5.
David Edelsohn [Thu, 2 Jul 2020 21:12:48 +0000 (17:12 -0400)]
testsuite: Solaris reports warning on line 5.

gcc/testsuite/ChangeLog

2020-06-02  David Edelsohn  <dje.gcc@gmail.com>

* gfortran.dg/pr95690.f90: Solaris error appears on line 5.

4 years agolibstdc++: Require c++98_only effective target for a test
Jonathan Wakely [Thu, 2 Jul 2020 20:27:12 +0000 (21:27 +0100)]
libstdc++: Require c++98_only effective target for a test

This test checks a conversion which only exists in C++98 and won't
compile since C++11. It uses { dg-options "-std=gnu++98" } so that it is
explicitly run in C++98 mode. This change also adds a target selector so
that the test will be skipped if the dg-options directive is filtered
out or overridden.

libstdc++-v3/ChangeLog:

* testsuite/27_io/basic_ios/conv/voidptr.cc: Add c++98_only
target selector.

4 years agolibstdc++: Require c++98_only effective target for some tests
Jonathan Wakely [Thu, 2 Jul 2020 20:27:12 +0000 (21:27 +0100)]
libstdc++: Require c++98_only effective target for some tests

These tests verify that including C++11 headers fails to compile in
C++98 mode. They use { dg-options "-std=gnu++98" } so that they are
explicitly run in C++98 mode. This change also adds a target selector so
that the tests will be skipped even if the dg-options directive is
filtered out or overridden. This is in preparation for a desired future
change where tests do not use -std options, so that they can be tested
with e.g. --target_board=unix\"{-std=gnu++17,-std=gnu++20}\"

In some cases the dg-options and dg-do directives need to be reordered,
so that the -std=gnu++98 option is already added to the options before
the target selector is checked.

libstdc++-v3/ChangeLog:

* testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc: Add
c++98_only target selector.
* testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc:
Likewise.
* testsuite/18_support/headers/cstdint/std_c++0x_neg.cc:
Likewise.
* testsuite/18_support/headers/new/synopsis_cxx98.cc: Likewise.
* testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc:
Likewise.
* testsuite/20_util/headers/type_traits/std_c++0x_neg.cc:
Likewise.
* testsuite/23_containers/headers/array/std_c++0x_neg.cc:
Likewise.
* testsuite/23_containers/headers/tuple/std_c++0x_neg.cc:
Likewise.
* testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc:
Likewise.
* testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc:
Likewise.
* testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc:
Likewise.
* testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc:
Likewise.
* testsuite/26_numerics/headers/cmath/c99_classification_macros_c++98.cc:
Likewise.
* testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc:
Likewise.
* testsuite/26_numerics/headers/random/std_c++0x_neg.cc:
Likewise.
* testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc: Likewise.
* testsuite/28_regex/headers/regex/std_c++0x_neg.cc: Likewise.
* testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc:
Likewise.
* testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc:
Likewise.
* testsuite/30_threads/headers/future/std_c++0x_neg.cc:
Likewise.
* testsuite/30_threads/headers/mutex/std_c++0x_neg.cc: Likewise.
* testsuite/30_threads/headers/thread/std_c++0x_neg.cc:
Likewise.

4 years agotestsuite: ignore function not inlinable warning.
David Edelsohn [Wed, 1 Jul 2020 22:59:39 +0000 (18:59 -0400)]
testsuite: ignore function not inlinable warning.

gcc/testsuite/ChangeLog

2020-07-02  David Edelsohn  <dje.gcc@gmail.com>

* gcc.dg/pr26570.c: dg-prune function not inlinable warning.

4 years agoPR libstdc++/91807
Ville Voutilainen [Thu, 2 Jul 2020 19:16:39 +0000 (22:16 +0300)]
PR libstdc++/91807

PR libstdc++/91807
* include/std/variant
(_Copy_assign_base::operator=(const _Copy_assign_base&):
Do the move-assignment from a temporary so that the temporary
is constructed with an explicit index.
* testsuite/20_util/variant/91807.cc: New.

4 years agoPR fortran/93423 - ICE on invalid with argument list for module procedure
Harald Anlauf [Thu, 2 Jul 2020 18:48:16 +0000 (20:48 +0200)]
PR fortran/93423 - ICE on invalid with argument list for module procedure

When recovering from an error, a NULL pointer dereference could occur.
Check for that situation and punt.

gcc/fortran/
PR fortran/93423
* resolve.c (resolve_symbol): Avoid NULL pointer dereference.

4 years agoPR fortran/93337 - ICE in gfc_dt_upper_string, at fortran/module.c:441
Harald Anlauf [Thu, 2 Jul 2020 18:41:51 +0000 (20:41 +0200)]
PR fortran/93337 - ICE in gfc_dt_upper_string, at fortran/module.c:441

When declaring a polymorphic variable that is not a dummy, allocatable or
pointer, an ICE occurred due to a NULL pointer dereference.  Check for
that situation and punt.

gcc/fortran/
PR fortran/93337
* class.c (gfc_find_derived_vtab): Punt if name is not set.

4 years agolibstdc++: Fix atomic<long double> tests (PR 91153, PR 93224)
Jonathan Wakely [Thu, 2 Jul 2020 17:11:10 +0000 (17:11 +0000)]
libstdc++: Fix atomic<long double> tests (PR 91153, PR 93224)

These tests fail with AIX double double. Use different floating point
values that behave less surprisingly.

libstdc++-v3/ChangeLog:

PR libstdc++/91153
PR target/93224
* testsuite/29_atomics/atomic_float/1.cc: Use different values
for tests.
* testsuite/29_atomics/atomic_ref/float.cc: Likewise.

4 years agoc++: Support C++20 virtual consteval functions. [PR88335]
Jason Merrill [Thu, 25 Jun 2020 00:46:09 +0000 (20:46 -0400)]
c++: Support C++20 virtual consteval functions. [PR88335]

Jakub's partial implementation of consteval virtual had trouble with the
current ABI requirement that we omit the vtable slot for a consteval virtual
function; it's difficult to use the normal code for constant evaluation and
also magically make the slots disappear if the vtables get written out.  I
notice that Clang trunk also doesn't implement that requirement, and it
seems unnecessary to me; I expect consteval virtual functions to be
extremely rare, so it should be fine to just give them a vtable slot as
normal but put zero in it if the vtable gets emitted.  I've commented as
much to the ABI committee.

One of Jakub's testcases points out that we weren't handling thunks in
our constexpr virtual handling; that is fixed here as well.

Incidentally, being able to use C++11 range-for definitely simplified
clear_consteval_vfns.

gcc/c-family/ChangeLog:

* c-cppbuiltin.c (c_cpp_builtins): Define __cpp_consteval.

gcc/cp/ChangeLog:

* decl.c (grokfndecl): Allow consteval virtual.
* search.c (check_final_overrider): Check consteval mismatch.
* constexpr.c (cxx_eval_thunk_call): New.
(cxx_eval_call_expression): Call it.
* cvt.c (cp_get_fndecl_from_callee): Handle FDESC_EXPR.
* decl2.c (mark_vtable_entries): Track vtables with consteval.
(maybe_emit_vtables): Pass consteval_vtables through.
(clear_consteval_vfns): Replace consteval with nullptr.
(c_parse_final_cleanups): Call it.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/consteval-virtual1.C: New test.
* g++.dg/cpp2a/consteval-virtual2.C: New test.
* g++.dg/cpp2a/consteval-virtual3.C: New test.
* g++.dg/cpp2a/consteval-virtual4.C: New test.
* g++.dg/cpp2a/consteval-virtual5.C: New test.

Co-authored-by: Jakub Jelinek <jakub@redhat.com>
4 years agotree-optimization/96028 - fix bogus externalizing of SLP node
Richard Biener [Thu, 2 Jul 2020 09:45:06 +0000 (11:45 +0200)]
tree-optimization/96028 - fix bogus externalizing of SLP node

This guards externalizing a SLP node when it fails to code generate
to actually have scalar defs we can use.  It also makes failure
to do so not fell the whole SLP instance but instead try this again
on the parent.

2020-07-02  Richard Biener  <rguenther@suse.de>

PR tree-optimization/96028
* tree-vect-slp.c (vect_slp_convert_to_external): Make sure
we have scalar stmts to use.
(vect_slp_analyze_node_operations): When analyzing a child
failed try externalizing the parent node.

4 years agoipa-sra: Prevent constructing debug info from wrong argument
Martin Jambor [Thu, 2 Jul 2020 12:30:50 +0000 (14:30 +0200)]
ipa-sra: Prevent constructing debug info from wrong argument

The mechanism generating debug info for removed parameters did not
adjust index of the argument in the call statement to take into
account extra arguments IPA-SRA might have produced when splitting a
strucutre.  This patch addresses that omission and stops gdb from
showing incorrect value for the removed parameter and says "value
optimized out" instead.  The guality testcase will end up as
UNSUPPORTED in the results which is how Richi told me on IRC we deal
with this.

It is possible to generate debug info to actually show the value of
the removed parameter but so far my approaches to do just that seem
toocontroversial
(https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546705.html), so
before I come up with something better I'd like to push this to master
and the gcc-10 branch in time for the GCC 10.2 release.

gcc/ChangeLog:

2020-07-01  Martin Jambor  <mjambor@suse.cz>

PR debug/95343
* ipa-param-manipulation.c (ipa_param_adjustments::modify_call): Adjust
argument index if necessary.

gcc/testsuite/ChangeLog:

2020-07-01  Martin Jambor  <mjambor@suse.cz>

PR debug/95343
* gcc.dg/guality/pr95343.c: New test.

4 years agoVEC_COND_EXPR: do not expand comparisons feeding it
Martin Liska [Tue, 30 Jun 2020 06:57:27 +0000 (08:57 +0200)]
VEC_COND_EXPR: do not expand comparisons feeding it

gcc/ChangeLog:

PR middle-end/95830
* tree-vect-generic.c (expand_vector_condition): Forward declaration.
(expand_vector_comparison): Do not expand a comparison if all
uses are consumed by a VEC_COND_EXPR.
(expand_vector_operation): Change void return type to bool.
(expand_vector_operations_1): Pass dce_ssa_names.

4 years agoRedefine NULL to nullptr
Ilya Leoshkevich [Mon, 29 Jun 2020 18:36:03 +0000 (20:36 +0200)]
Redefine NULL to nullptr

Bootstrap with musl libc fails with numerous "missing sentinel in
function call" errors.  This is because musl defines NULL as 0L for C++,
but gcc requires sentinel value to be a pointer or __null.

Jonathan Wakely says:

    To be really safe during stage 1, GCC should not use NULL as a
    pointer sentinel in C++ code anyway.

    The bootstrap compiler could define it to 0 or 0u, neither of which
    is guaranteed to be OK to pass as a varargs sentinel where a null
    pointer is expected.  Any of (void*)0 or (void*)NULL or nullptr
    would be safe.

While it is possible to fix this by replacing NULL sentinels with
nullptrs, such approach would generate backporting conflicts, therefore
simply redefine NULL to nullptr at the end of system.h, where it would
not confuse system headers.

gcc/ChangeLog:

2020-06-30  Ilya Leoshkevich  <iii@linux.ibm.com>

PR bootstrap/95700
* system.h (NULL): Redefine to nullptr.

4 years agoFortran : portability fix for PR52279
Mark Eggleston [Thu, 2 Jul 2020 07:54:10 +0000 (08:54 +0100)]
Fortran  : portability fix for PR52279

Use of _() to enclose string literals assigned to arrays is not
portable.  Use pointer instead.

2020-07-02  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/fortran/

PR fortran/52279
* check.c (gfc_invalid_boz):  Change array declaration for
hint into a pointer.

4 years agotree-cfg: Fix ICE with switch stmt to unreachable opt and forced labels [PR95857]
Jakub Jelinek [Thu, 2 Jul 2020 09:38:20 +0000 (11:38 +0200)]
tree-cfg: Fix ICE with switch stmt to unreachable opt and forced labels [PR95857]

The following testcase ICEs, because during the cfg cleanup, we see:
  switch (i$e_11) <default: <L12> [33.33%], case -3: <lab2> [33.33%], case 0: <L10> [33.33%], case 2: <lab2> [33.33%]>
...
lab2:
  __builtin_unreachable ();
where lab2 is FORCED_LABEL.  The way it works, we go through the case labels
and when we reach the first one that points to gimple_seq_unreachable*
basic block, we remove the edge (if any) from the switch bb to the bb
containing the label and bbs reachable only through that edge we've just
removed.  Once we do that, we must throw away all other cases that use
the same label (or some other labels from the same bb we've removed the edge
to and the bb).  To avoid quadratic behavior, this is not done by walking
all remaining cases immediately before removing, but only when processing
them later.
For normal labels this works, fine, if the label is in a deleted bb, it will
have NULL label_to_block and we handle that case, or, if the unreachable bb
has some other edge to it, only the edge will be removed and not the bb,
and again, find_edge will not find the edge and we only remove the case.
And if a label would be to some other block, that other block wouldn't have
been removed earlier because there would be still an edge from the switch
block.
Now, FORCED_LABEL (and I think DECL_NONLOCAL too) break this, because
those labels aren't removed, but instead moved to some surrounding basic
block.  So, when we later process those, when their gimple_seq_unreachable*
basic block is removed, label_to_block will return some unrelated block
(in the testcase the switch bb), so we decide to keep the case which doesn't
seem to be unreachable, but we don't really have an edge from the switch
block to the block the label got moved to.

I thought first about punting in gimple_seq_unreachable* on
FORCED_LABEL/DECL_NONLOCAL labels, but that might penalize even code that
doesn't care, so this instead just makes sure that for
FORCED_LABEL/DECL_NONLOCAL labels that are being removed (and thus moved
randomly) we remember in a hash_set the fact that those labels should be
treated as removed for the purpose of the optimization, and later on
handle those labels that way.

2020-07-02  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/95857
* tree-cfg.c (group_case_labels_stmt): When removing an unreachable
base_bb, remember all forced and non-local labels on it and later
treat those as if they have NULL label_to_block.  Formatting fix.
Fix a comment typo.

* gcc.dg/pr95857.c: New test.

4 years agotree-optimization/96022 - fix ICE with vectorized shift
Richard Biener [Thu, 2 Jul 2020 09:12:51 +0000 (11:12 +0200)]
tree-optimization/96022 - fix ICE with vectorized shift

This fixes lane extraction for internal def vectorized shifts
with an effective scalar shift operand by always using lane zero
of the first vector stmt.

It also fixes a SLP build issue noticed on the testcase where
we end up building unary vector ops with the only operand built
form scalars which isn't profitable by itself.  The exception
is for stores.

2020-07-02  Richard Biener  <rguenther@suse.de>

PR tree-optimization/96022
* tree-vect-stmts.c (vectorizable_shift): Only use the
first vector stmt when extracting the scalar shift amount.
* tree-vect-slp.c (vect_build_slp_tree_2): Also build unary
nodes with all-scalar children from scalars but not stores.
(vect_analyze_slp_instance): Mark the node not failed.

* g++.dg/vect/pr96022.cc: New testcase.

4 years agovect: Fix an ICE in exact_div [PR95961]
Fei Yang [Thu, 2 Jul 2020 09:14:33 +0000 (10:14 +0100)]
vect: Fix an ICE in exact_div [PR95961]

In the test case for PR95961, vectorization factor computed
by vect_determine_vectorization_factor is [8,8].  But this is
updated to [1,1] later by vect_update_vf_for_slp.  When we call
vect_get_num_vectors in vect_enhance_data_refs_alignment, the number
of scalars which is based on the vectorization factor is not a multiple
of the the number of elements in the vector type.  This leads to
the ICE.  This isn't a simple stream of contiguous vector accesses.
It's hard to predict from the available information how many vector
accesses we'll actually need per iteration.  As discussed, here we
should use the number of scalars instead of the number of vectors as
an upper bound for the loop saving info about DR in the hash table.

2020-07-02  Felix Yang  <felix.yang@huawei.com>

gcc/
PR tree-optimization/95961
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Use the
number of scalars instead of the number of vectors as an upper bound
for the loop saving info about DR in the hash table.  Remove unused
local variables.

gcc/testsuite/
PR tree-optimization/95961
* gcc.target/aarch64/sve/pr95961.c: New test.

4 years agoopenmp: Diagnose non-rectangular loops with invalid steps
Jakub Jelinek [Thu, 2 Jul 2020 09:03:33 +0000 (11:03 +0200)]
openmp: Diagnose non-rectangular loops with invalid steps

THe OpenMP 5 standard requires that if some loop in OpenMP loop nest refers
to some outer loop's iterator variable, then the subtraction of the multiplication
factors for the outer iterator multiplied by the outer increment modulo the
inner increment is 0.  For loops with non-constants in any of these we can't
diagnose it, it would be a task for something like -fsanitize=openmp,
but if all these are constant, we can diagnose it.

2020-07-02  Jakub Jelinek  <jakub@redhat.com>

* omp-expand.c (expand_omp_for): Diagnose non-rectangular loops with
invalid steps - ((m2 - m1) * incr_outer) % incr must be 0 in valid
OpenMP non-rectangular loops.  Use XALLOCAVEC.

* c-c++-common/gomp/loop-7.c: New test.

4 years agoReject components in extensions overlapping with the parent
Eric Botcazou [Thu, 2 Jul 2020 08:26:49 +0000 (10:26 +0200)]
Reject components in extensions overlapping with the parent

Such problematic components can be specified by means of a component
clause but they cannot be fully supported by the type system.  They
had initially been forbidden, then we decided to accept them by working
around the type system, but this is very fragile and, for example, any
static aggregate is guaranteed to trigger an ICE with the current
implementation.

We now reject them again, except if the -gnatd.K switch is passed.

gcc/ada/ChangeLog:
* debug.adb (d.K): Document new usage.
* fe.h (Debug_Flag_Dot_KK): Declare.
* gcc-interface/decl.c (gnat_to_gnu_field): Give an error when the
component overlaps with the parent subtype, except with -gnatd.K.

4 years agoDo not stream all zeros for gcda files.
Martin Liska [Tue, 2 Jun 2020 08:11:07 +0000 (10:11 +0200)]
Do not stream all zeros for gcda files.

gcc/ChangeLog:

PR gcov-profile/95348
* coverage.c (read_counts_file): Read only COUNTERS that are
not all-zero.
* gcov-dump.c (tag_function): Change signature from unsigned to
signed integer.
(tag_blocks): Likewise.
(tag_arcs): Likewise.
(tag_lines): Likewise.
(tag_counters): Likewise.
(tag_summary): Likewise.
* gcov.c (read_count_file): Read all non-zero counters
sensitively.

libgcc/ChangeLog:

PR gcov-profile/95348
* libgcov-driver.c (merge_one_data): Merge only profiles
that are not of non-zero type.
(write_one_data): Write counters only if there's one non-zero
value.
* libgcov-util.c (tag_function): Change signature from unsigned
to int.
(tag_blocks): Likewise.
(tag_arcs): Likewise.
(tag_counters): Likewise.
(tag_summary): Likewise.
(tag_lines): Read only if COUNTERS is non-zero.
(read_gcda_file): Handle negative length for COUNTERS type.

4 years agoFortran : ICE in generic_correspondence PR95584
Mark Eggleston [Thu, 25 Jun 2020 04:16:50 +0000 (05:16 +0100)]
Fortran  : ICE in generic_correspondence PR95584

Output an error for ambiguous interfaces in generic interface
instead of ICE.

2020-07-02  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

PR fortran/95584
* interface.c (generic_correspondence): Only use the pointer
to a symbol if exists.

2020-07-02  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

PR fortran/95584
* gfortran.dg/pr95584.f90: New test.

4 years agotestsuite: Ignore line no. for BB vectorization message
Kewen Lin [Thu, 2 Jul 2020 05:55:53 +0000 (00:55 -0500)]
testsuite: Ignore line no. for BB vectorization message

The case g++.dg/vect/slp-pr56812.cc need to be fixed a bit with
line number neglection since the message for basic block vectorization
looks like:

  slp-pr56812.cc:19:1: optimized: basic block part vectorized using
  16 byte vectors

while for loop vectorization, it looks like:

  slp-pr56812.cc:17:18: optimized: loop vectorized using 16 byte
  vectors

gcc/testsuite/ChangeLog:

* g++.dg/vect/slp-pr56812.cc: Ignore line number for basic block
vectorization messages.

4 years agoRISC-V: Handle multi-letter extension for multilib-generator
Kito Cheng [Thu, 18 Jun 2020 03:37:01 +0000 (11:37 +0800)]
RISC-V: Handle multi-letter extension for multilib-generator

 - The order of multi-lib config could be wrong if multi-ltter are
   used, e.g. `./multilib-generator rv32izfh-ilp32--c`, would expect
   rv32ic_zfh/ilp32 reuse rv32i_zfh/ilp32, however the multi-ltter is not
   handled correctly, it will generate reuse rule for rv32izfhc/ilp32
   which is invalid arch configuration.

 - Remove re-use rule gen for g/imafd, because we canonicalize the -march at
   gcc driver too, so we don't need handle 'g' for multilib now.

gcc/ChangeLog:

* config/riscv/multilib-generator (arch_canonicalize): Handle
multi-letter extension.
Using underline as separator between different extensions.

4 years agoDaily bump.
GCC Administrator [Thu, 2 Jul 2020 00:16:26 +0000 (00:16 +0000)]
Daily bump.

4 years agoThe variant of editing distance we use doesn't satisfy the triangle inequality.
Pip Cet [Wed, 1 Jul 2020 20:58:52 +0000 (14:58 -0600)]
The variant of editing distance we use doesn't satisfy the triangle inequality.

gcc

* spellcheck.c (test_data): Add problematic strings.
(test_metric_conditions): Don't test the triangle inequality
condition, which our distance function does not satisfy.

4 years agoaarch64: Fix missing BTI instruction in trampolines
Omar Tahir [Wed, 1 Jul 2020 20:56:16 +0000 (21:56 +0100)]
aarch64: Fix missing BTI instruction in trampolines

If two functions require trampolines, and the first has BTI enabled
while the second doesn't, the generated template will be lacking
a BTI instruction.  This patch fixes this by always adding a BTI
instruction, which is safe as BTI instructions are ignored on
unsupported architecture versions.

2020-07-01  Omar Tahir  <omar.tahir@arm.com>

gcc/
* config/aarch64/aarch64.c (aarch64_asm_trampoline_template): Always
generate a BTI instruction.

gcc/testsuite/
* gcc.target/aarch64/bti-4.c: New test.

4 years agomatch.pd: (x & y) - (x | y) - 1 -> ~(x ^ y) simplification [PR94882]
Jeff Law [Wed, 1 Jul 2020 20:44:07 +0000 (14:44 -0600)]
match.pd: (x & y) - (x | y) - 1 -> ~(x ^ y) simplification [PR94882]

gcc/
PR tree-optimization/94882
* match.pd (x & y) - (x | y) - 1 -> ~(x ^ y): New simplification.

gcc/testsuite/
PR tree-optimization/94882
* gcc.dg/tree-ssa/pr94882.c: New test.
* gcc.dg/tree-ssa/pr94882-1.c: New test.
* gcc.dg/tree-ssa/pr94882-2.c: New test.
* gcc.dg/tree-ssa/pr94882-3.c: New test.

4 years agolibstdc++: Remove noexcept from match_results comparisons (PR 94627)
Jonathan Wakely [Wed, 1 Jul 2020 20:01:15 +0000 (21:01 +0100)]
libstdc++: Remove noexcept from match_results comparisons (PR 94627)

These functions can't be noexcept because the iterators stored in the
sub_match objects can throw on any operation.

libstdc++-v3/ChangeLog:

PR libstdc++/94627
* include/bits/regex.h (operator==, operator!=): Remove noexcept
equality comparisons for match_results.
* testsuite/28_regex/match_results/94627.cc: New test.

4 years agoanalyzer: Fix -Wanalyzer-possible-null-argument warning (PR 96014)
Jonathan Wakely [Tue, 30 Jun 2020 16:40:08 +0000 (17:40 +0100)]
analyzer: Fix -Wanalyzer-possible-null-argument warning (PR 96014)

gcc/testsuite/ChangeLog:

PR testsuite/96014
* g++.dg/analyzer/pr94028.C: Make operator new non-throwing so
that the compiler doesn't implicitly mark it as returning
non-null.

4 years agobootstrap: Don't translate assignment to hint[].
David Edelsohn [Wed, 1 Jul 2020 19:11:54 +0000 (15:11 -0400)]
bootstrap: Don't translate assignment to hint[].

error array must be initialized with a brace-enclosed initializer

gcc/fortran/ChangeLog

2020-07-01  David Edelsohn  <dje.gcc@gmail.com>

* check.c (gfc_invalid_boz): Fix bootstrap. Revert
Mark hint for translation using _().

4 years agotestsuite: Adjust gfortran.dg/pr95690.f90 line number.
David Edelsohn [Wed, 1 Jul 2020 18:05:26 +0000 (14:05 -0400)]
testsuite: Adjust gfortran.dg/pr95690.f90 line number.

gfortran produces associates a different line number for the same error
message depending on x86 versus other architectures.  This patch adjusts
the dg-error line number depending on the target.

gcc/testsuite/ChangeLog

2020-07-01  David Edelsohn  <dje.gcc@gmail.com>

* gfortran.dg/pr95690.f90: Adjust dg-error line number.

4 years agotestsuite: Restore lp64 for some gcc.target/powerpc testcases.
David Edelsohn [Wed, 1 Jul 2020 16:39:49 +0000 (12:39 -0400)]
testsuite: Restore lp64 for some gcc.target/powerpc testcases.

gcc/testsuite/ChangeLog

2020-07-01  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/direct-move-double1.c: Require lp64.
* gcc.target/powerpc/direct-move-float1.c: Same.
* gcc.target/powerpc/direct-move-float3.c: Same.
* gcc.target/powerpc/direct-move-vint1.c: Same.
* gcc.target/powerpc/vsx-vector-5.c: Same.
* gcc.target/powerpc/vsx-vector-6.p7.c: Same.
* gcc.target/powerpc/vsx-vector-6.p8.c: Same.
* gcc.target/powerpc/vsx-vector-6.p9.c: Same.

4 years agoFix bootstrap for m68k.
Jeff Law [Wed, 1 Jul 2020 16:09:48 +0000 (10:09 -0600)]
Fix bootstrap for m68k.

gcc/
* config/m68k/m68k.c (m68k_output_btst): Drop "register" keyword.
(emit_move_sequence, output_iorsi3, output_xorsi3): Likewise.