Eric Botcazou [Wed, 8 Jul 2020 22:13:50 +0000 (00:13 +0200)]
Make memory copy functions scalar storage order barriers
This addresses the issue raised about the usage of memory copy functions
to toggle the scalar storage order. Recall that you cannot (the compiler
errors out) take the address of a scalar which is stored in reverse order,
but you can do it for the enclosing aggregate type., which means that you
can also pass it to the memory copy functions. In this case, the optimizer
may rewrite the copy into a scalar copy, which is a no-no.
gcc/c-family/ChangeLog:
* c.opt (Wscalar-storage-order): Add explicit variable.
gcc/c/ChangeLog:
* c-typeck.c (convert_for_assignment): If -Wscalar-storage-order is
set, warn for conversion between pointers that point to incompatible
scalar storage orders.
gcc/ChangeLog:
* gimple-fold.c (gimple_fold_builtin_memory_op): Do not fold if
either type has reverse scalar storage order.
* tree-ssa-sccvn.c (vn_reference_lookup_3): Do not propagate through
a memory copy if either type has reverse scalar storage order.
gcc/testsuite/ChangeLog:
* gcc.dg/sso-11.c: New test.
* gcc.dg/sso/sso.exp: Pass -Wno-scalar-storage-order.
* gcc.dg/sso/memcpy-1.c: New test.
Kwok Cheung Yeung [Mon, 6 Jul 2020 22:21:08 +0000 (15:21 -0700)]
amdgcn, nvptx: Handle -fpic/-fPIC in mkoffload
2020-07-08 Tobias Burnus <tobias@codesourcery.com>
gcc/ChangeLog:
* config/gcn/mkoffload.c (compile_native, main): Pass -fPIC/-fpic
on to the native compiler, if used.
* config/nvptx/mkoffload.c (compile_native, main): Likewise.
Harald Anlauf [Wed, 8 Jul 2020 18:53:12 +0000 (20:53 +0200)]
PR fortran/96085 - ICE in gfc_finish_var_decl, at fortran/trans-decl.c:694
Legacy ASSIGN requires a scalar integer variable. Reject parameter
arguments.
gcc/fortran/
PR fortran/96085
* resolve.c (gfc_resolve_code): Check whether assign target is a
parameter.
Joseph Myers [Wed, 8 Jul 2020 18:30:23 +0000 (18:30 +0000)]
Update gcc sv.po.
* sv.po: Update.
Patrick Palka [Wed, 8 Jul 2020 18:17:47 +0000 (14:17 -0400)]
c++: ICE in is_really_empty_class [PR95497]
We are ICEing in the testcase below because we pass the
yet-uninstantiated class type A<int> of the PARM_DECL b to
is_really_empty_class from is_rvalue_constant_expression when parsing
the requirement t += b.
This patch fixes the ICE by guarding the problematic call to
is_really_empty_class with a COMPLETE_TYPE_P check, which should also
subsume the existing dependent_type_p check.
gcc/cp/ChangeLog:
PR c++/95497
* constexpr.c (potential_constant_expression_1) <case PARM_DECL>:
When processing_template_decl, check COMPLETE_TYPE_P before
calling is_really_empty_class. Don't check dependent_type_p.
gcc/testsuite/ChangeLog:
PR c++/95497
* g++.dg/cpp2a/concepts-pr95497.C: New test.
Will Schmidt [Thu, 18 Jun 2020 20:14:00 +0000 (15:14 -0500)]
[PATCH, rs6000]Add support to enable vmsumudm behind vec_msum builtin.
gcc/ChangeLog:
2020-07-08 Will Schmidt <will_schmidt@vnet.ibm.com>
* config/rs6000/altivec.h (vec_vmsumudm): New define.
* config/rs6000/altivec.md (UNSPEC_VMSUMUDM): New unspec.
(altivec_vmsumudm): New define_insn.
* config/rs6000/rs6000-builtin.def (altivec_vmsumudm): New BU_ALTIVEC_3
entry. (vmsumudm): New BU_ALTIVEC_OVERLOAD_3 entry.
* config/rs6000/rs6000-call.c (altivec_overloaded_builtins): Add entries for
ALTIVEC_BUILTIN_VMSUMUDM variants of vec_msum.
* doc/extend.texi: Add document for vmsumudm behind vmsum.
gcc/testsuite/ChangeLog:
2020-07-08 Will Schmidt <will_schmidt@vnet.ibm.com>
* gcc.target/powerpc/builtins-msum-runnable.c: New test.
* gcc.target/powerpc/vsx-builtin-msum.c: New test.
Richard Biener [Wed, 8 Jul 2020 11:50:51 +0000 (13:50 +0200)]
compute and check alignment info during analysis
This moves querying the alignment support scheme from load/store
transform time to get_load_store_type where we should know best
what alignment constraints we actually need. This should make
verify_data_ref_alignment obsolete which prematurely disqualifies
all vectorization IMHO.
2020-07-08 Richard Biener <rguenther@suse.de>
* tree-vect-stmts.c (get_group_load_store_type): Pass
in the SLP node and the alignment support scheme output.
Set that.
(get_load_store_type): Likewise.
(vectorizable_store): Adjust.
(vectorizable_load): Likewise.
Eric Botcazou [Mon, 25 May 2020 08:53:00 +0000 (10:53 +0200)]
[Ada] Disable warning about unsafe use of __builtin_frame_address
gcc/ada/
* tracebak.c [generic implementation]: Add pragma GCC diagnostic
to disable warning about __builtin_frame_address.
Dmitriy Anisimkov [Sun, 24 May 2020 18:57:12 +0000 (00:57 +0600)]
[Ada] Fix C miss parentheses warning on Windows
gcc/ada/
* socket.c [_WIN32] (__gnat_minus_500ms): Parentheses around &&
operations. Remove notes about TN in comment.
Eric Botcazou [Sun, 24 May 2020 13:13:05 +0000 (15:13 +0200)]
[Ada] Fix warnings in C runtime files on Windows
gcc/ada/
* adaint.h (__gnat_expect_portable_execvp): Fix prototype.
(__gnat_expect_poll): Likewise.
* expect.c [_WIN32]: Include adaint.h file.
(__gnat_waitpid): Remove useless variable.
(__gnat_expect_portable_execvp): Add ATTRIBUTE_UNUSED on parameter.
* raise-gcc.c [SEH] (__gnat_personality_v0): Add ATTRIBUTE_UNUSED.
* socket.c [_WIN32] (__gnat_getservbyport): Add ATTRIBUTE_UNUSED on
a couple of parameters.
(__gnat_gethostbyname): Likewise.
(__gnat_gethostbyaddr): Likewise.
(__gnat_getservbyname): Likewise.
(__gnat_last_socket_in_set): Use variables local to loops.
(__gnat_socket_ioctl): Cast 3rd parameter to proper type if _WIN32.
(__gnat_inet_pton): Cast 2nd parameter to proper type if _WIN32.
* sysdep.c (__gnat_localtime_tzoff): Remove superfluous test.
* terminals.c [_WIN32]: Include io.h file.
(is_gui_app): Remove useless variables and fix unsigned comparison.
(nt_spawnve): Add ATTRIBUTE_UNUSED on first parameter. Initialize a
local variable and remove others that are useless. Add missing cast
(__gnat_setup_child_communication): Remove useless variable and call
Use proper formatting string in call to sprintf.
(__gnat_setup_parent_communication): Cast to proper type.
(find_child_console): Fix prototype and remove useless variable.
(find_process_handle): Likewise.
(_gnat_interrupt_process): Move to after __gnat_interrupt_pid.
(__gnat_reset_tty): Add ATTRIBUTE_UNUSED on parameter, remove return
(__gnat_setup_winsize): Add ATTRIBUTE_UNUSED on all parameters.
Eric Botcazou [Sun, 24 May 2020 13:23:42 +0000 (15:23 +0200)]
[Ada] Do not apply constraint checks on allocator with No_Initialization
gcc/ada/
* exp_ch4.adb (Expand_N_Allocator): In the subtype mark case, do
not apply constraint checks if the No_Initialization flag is set.
Javier Miranda [Fri, 22 May 2020 19:29:57 +0000 (15:29 -0400)]
[Ada] Fix recent regression on _Master declaration
gcc/ada/
* exp_ch9.adb
(Build_Class_Wide_Master): Insert the declaration of _Master
before its use; required to avoid assertion failure in the
backend.
Arnaud Charlet [Fri, 22 May 2020 12:21:46 +0000 (08:21 -0400)]
[Ada] Clean up in Interfaces.C.Extensions
gcc/ada/
* libgnat/i-cexten.ads (long_long, unsigned_long_long): Now
subtypes of Interfaces.C types.
* libgnat/a-calcon.ads, libgnat/a-calcon.adb
(To_Unix_Nano_Time): Use Interfaces.C.long_long instead of
Interfaces.C.Extensions.long_long.
Vasiliy Fofanov [Fri, 22 May 2020 11:22:41 +0000 (13:22 +0200)]
[Ada] Optional warning on build-in-place function calls
gcc/ada/
* debug.adb: Document new switch.
* exp_ch6.adb (Warn_BIP): New function that warns if the switch
is on. Call it from Make_Build_In_Place_* functions. Warn_BIP
is not needed in Make_Build_In_Place_Iface_*, because those call
Make_Build_In_Place_Call_In_Object_Declaration or similar.
Piotr Trojanek [Fri, 22 May 2020 11:56:06 +0000 (13:56 +0200)]
[Ada] Fix typo and layout in comments about matching
gcc/ada/
* erroutc.adb (Matches): Fix comments.
Eric Botcazou [Thu, 21 May 2020 23:37:00 +0000 (01:37 +0200)]
[Ada] Fix internal error on string type comparision with predicate
gcc/ada/
* freeze.adb (Has_Decl_In_List): New predicate to check that an
entity is declared in a list of nodes.
(Freeze_Expression): Use it to deal with Expression_With_Actions,
short-circuit expression, if- and case-expression and ensure that
the freeze node is put onto their Actions list if the entity is
declared locally.
Eric Botcazou [Wed, 20 May 2020 22:58:06 +0000 (00:58 +0200)]
[Ada] Fix incorrect placement of freeze node with predicate
gcc/ada/
* freeze.adb (In_Expanded_Body): Return true for the body of a
generated predicate function.
Gary Dismukes [Wed, 20 May 2020 17:44:34 +0000 (13:44 -0400)]
[Ada] Minor reformatting and typo fix
gcc/ada/
* sem_attr.adb: Remove hyphens in comments, plus minor code
reformatting.
* sem_ch13.adb: Fix typo (that => than).
* sem_util.adb: Add hyphen in comment ("class-wide").
Eric Botcazou [Wed, 20 May 2020 08:13:05 +0000 (10:13 +0200)]
[Ada] Add comment on implementation choice for byte-packed array types
gcc/ada/
* freeze.adb (Freeze_Array_Type): Add comment on implementation
choice for byte-packed array types.
Piotr Trojanek [Fri, 15 May 2020 13:11:18 +0000 (15:11 +0200)]
[Ada] Accept aspect Relaxed_Initialization on generic subprograms
gcc/ada/
* sem_attr.adb (Analyze_Attribute): Correct prefix of 'Result
this prefix is a generic function but the enclosing aspect or
pragma is attached to its instance.
* sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Analyze
generic subprogram formal parameters (including the implicit
result of a generic function) and only then analyse its aspects,
because with Relaxed_Initialization the aspect expression might
refer to those formal parameters.
* sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Accept
aspect on generic subprograms; install formal parameters of a
generic subprogram but not formal parameters of the generic unit
itself (the previous code was inspired by aspects Post and
Depends, where both kinds of formals are allowed).
* sem_util.ads (Enter_Name): Fix name of a subprogram referenced
in comment.
Piotr Trojanek [Thu, 14 May 2020 10:11:52 +0000 (12:11 +0200)]
[Ada] Analyze aspects once generic subprograms are recognized
gcc/ada/
* sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Call
Analyze_Aspect_Specifications after setting Ekind of the
analyzed entity.
* sem_ch13.adb (Analyze_Aspect_Yield): Remove minimal decoration
of generic subprograms.
Arnaud Charlet [Mon, 18 May 2020 10:00:31 +0000 (06:00 -0400)]
[Ada] ACATS 4.1R -
BD10001 - Error missed
gcc/ada/
* sem_prag.adb (Process_Inline): Check for duplicate
pragma+aspect Inline. Minor code cleanup.
(Check_Duplicate_Pragma): Add warning for duplicate
pragma [No_]Inline under -gnatwr.
* sinfo.ads, sinfo.adb (Next_Rep_Item): Allow N_Null_Statement
which can appear when a pragma is rewritten.
* sem_util.ads, sem_util.adb, bindo-writers.adb: Fix bad
copy/paste now flagged.
* libgnat/s-mmap.ads: Remove redundant pragma Inline.
Ed Schonberg [Mon, 18 May 2020 09:25:32 +0000 (11:25 +0200)]
[Ada] Update entities on class-wide condition function creation
gcc/ada/
* sem_util.adb (Build_Class_Wide_Clone_Body): Update entities to
refer to the right spec.
Bob Duff [Tue, 19 May 2020 13:23:21 +0000 (09:23 -0400)]
[Ada] Disallow Predicate_Failure without predicate
gcc/ada/
* sem_ch13.adb (Predicate_Failure): Check that the type has
predicates. Remove the setting of Has_Delayed_Aspects and
Freeze_Node, because (if the code is legal) it should have
already been done by the predicate aspect.
Gary Dismukes [Tue, 19 May 2020 18:30:05 +0000 (14:30 -0400)]
[Ada] Typo corrections, plus minor reformatting in comments
gcc/ada/
* par-ch4.adb (P_Iterated_Component_Association): Typo
corrections.
Ed Schonberg [Mon, 18 May 2020 01:02:59 +0000 (21:02 -0400)]
[Ada] Ada_2020 AI12-0250 : Implement Iterator filters.
gcc/ada/
* par.adb (P_Iterator_Specification): Make public for use in
other parser subprograms.
* par-ch4.adb (P_Iterated_Component_Association): In Ada_2020,
recognize use of Iterator_Specification in an element iterator.
To simplify disambiguation between the two iterator forms, mark
the component association as carrying an Iterator_Specification
only when the element iterator (using "OF") is used.
* par-ch5.adb (P_Loop_Parameter_Specification): In Ada_2020,
parse iterator filter when present.
(P_Iterator_Specification): Ditto. Remove declaration of
P_Iterator_Specification, now in parent unit.
* exp_ch5.adb (Expand_N_Loop_Statement): Apply Iterator filter
when present.
(Expand_Iterator_Loop_Over_Array): Ditto.
(Expand_Iterator_Loop_Over_Container): Ditto.
* sem_aggr.adb (Resolve_Array_Aggregate): Emit error nessage if
an iterated component association includes a iterator
specificcation with an element iterator, i.e. one that uses the
OF keyword.
* sem_ch5.adb (Analyze_Iterator_Specification): Analyze Iterator
filter when present.
(Analyze_Loop_Parameter_Specification): Ditto.
* sinfo.adb: Suprogram bodies for new syntactic element
Iterator_Filter.
* sinfo.ads: Add Iterator_Filter to relevant nodes. Structure
of Component_Association and Iteroted_Component_Association
nodes is modified to take into account the possible presence of
an iterator specification in the latter.
Yannick Moy [Tue, 19 May 2020 14:11:28 +0000 (16:11 +0200)]
[Ada] Add utility function to recognize attribute 'Loop_Entry
gcc/ada/
* sem_util.ads, sem_util.adb (Is_Attribute_Loop_Entry): New
function for GNATProve.
Ghjuvan Lacambre [Mon, 18 May 2020 13:41:09 +0000 (15:41 +0200)]
[Ada] Add expected and actual size to "bit number out of range" error message
gcc/ada/
* sem_ch13.adb (Analyze_Record_Representation_Clause,
Check_Record_Representation_Clause): Add expected and actual
size to error message.
Piotr Trojanek [Mon, 18 May 2020 19:41:12 +0000 (21:41 +0200)]
[Ada] Remove excessive validity checks on in-parameters
gcc/ada/
* sem_util.ads, sem_util.adb (Safe_To_Capture_Value): Return
True for in-parameters.
Justin Squirek [Mon, 6 Apr 2020 11:53:12 +0000 (07:53 -0400)]
[Ada] Minor refactoring
gcc/ada/
* exp_attr.adb (Expand_Attribute): Set
Stores_Attribute_Old_Prefix to generated renamings of 'Old
constants for later use in generating finalization routines.
* exp_ch7.adb (Build_Finalizer): Minor reformatting. Use "or
else" operators.
Gary Dismukes [Sun, 17 May 2020 21:57:05 +0000 (17:57 -0400)]
[Ada] Static expression function problems with -gnatc and -gnatd.F (SPARK mode)
gcc/ada/
* exp_ch6.adb (Expand_Simple_Function_Return): Remove ugly code
that was copying the return expression, resetting Analyzed
flags, etc. for the return expression of static expression
functions.
* inline.adb (Inline_Static_Expression_Function_Call): Set the
Parent of the copied expression to that of the call. This avoids
a blowup in Insert_Actions when GNATprove_Mode is set and there
are nested SEF calls. Add ??? comment.
* sem_ch6.adb (Analyze_Expression_Function): In the case of a
static expression function, create a new copy of the expression
and replace the function's expression with the copy; the
original expression is used in the expression function's body
and will be analyzed and rewritten, and we need to save a clean
copy for later use in processing static calls to the function.
This allows removing the kludgy code that was in
Expand_Simple_Function_Return.
* sem_eval.adb (Eval_Qualified_Expression): Return immediately
if any errors have been posted on the qualified expression, to
avoid blowups when GNATprove_Mode is enabled (or with -gnatd.F),
since illegal static expressions are handled differently in that
case and attempting to fold such expressions would fail.
Eric Botcazou [Mon, 18 May 2020 20:36:49 +0000 (22:36 +0200)]
[Ada] Fix inaccurate -gnatR output for derived untagged types
gcc/ada/
* repinfo.adb (Compute_Max_Length): Skip hidden discriminants.
(List_Record_Layout): Likewise.
(List_Structural_Record_Layout): Use First_Discriminant instead
of First_Stored_Discriminant and Next_Discriminant instead of
Next_Stored_Discriminant to walk the list of discriminants.
Piotr Trojanek [Mon, 18 May 2020 16:46:49 +0000 (18:46 +0200)]
[Ada] Allow boolean expressions in aspect Relaxed_Initialization
gcc/ada/
* sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Analyze
optional boolean expressions.
* sem_util.ads, sem_util.adb (Has_Relaxed_Initialization): Adapt
query; update comment.
Piotr Trojanek [Fri, 15 May 2020 18:40:03 +0000 (20:40 +0200)]
[Ada] Style cleanups related to Current_Condition
gcc/ada/
* einfo.ads (Current_Value): Fix typo in comment.
* exp_ch2.adb (Expand_Current_Value): Remove unnecessary "Start
of processing ..." comment.
* exp_util.adb (Set_Entity_Current_Value): Fix unbalanced paren
in comment.
(Get_Current_Value_Condition): Fix layout in comment.
* sem_ch5.adb (Analyze_Cond_Then): Replace commented condition
with pragma Assert.
Piotr Trojanek [Fri, 15 May 2020 18:27:18 +0000 (20:27 +0200)]
[Ada] Extend optimization to True/False prefixed with Standard
gcc/ada/
* exp_ch5.adb (Expand_N_If_Statement): Detect True/False
prefixed with Standard.
Bob Duff [Sat, 16 May 2020 15:59:50 +0000 (11:59 -0400)]
[Ada] Check predicates for subtypes of private types
gcc/ada/
* sem_ch13.adb (Analyze_Aspect_Specifications): Add freeze node
for the Underlying_Full_View if it exists. The freeze node is
what triggers the generation of the predicate function.
* freeze.adb: Minor reformatting.
Eric Botcazou [Sat, 16 May 2020 13:42:04 +0000 (15:42 +0200)]
[Ada] Small tweak to Narrow_Large_Operation procedure
gcc/ada/
* exp_ch4.adb (Narrow_Large_Operation): Use the base type instead
of the first subtype of standard integer types as narrower type.
Richard Sandiford [Wed, 8 Jul 2020 14:01:14 +0000 (15:01 +0100)]
expr: Fix REDUCE_BIT_FIELD for constants [PR95694]
This is yet another PR caused by constant integer rtxes not storing
a mode. We were calling REDUCE_BIT_FIELD on a constant integer that
didn't fit in poly_int64, and then tripped the as_a<scalar_int_mode>
assert on VOIDmode.
AFAICT REDUCE_BIT_FIELD is always passed rtxes that have TYPE_MODE
(rather than some other mode) and it just fills in the redundant
sign bits of that TYPE_MODE value. So it should be safe to get
the mode from the type instead of the rtx. The patch does that
and asserts that the modes agree, where information is available.
That on its own is enough to fix the bug, but we might as well
extend the folding case to all constant integers, not just those
that fit poly_int64.
gcc/
PR middle-end/95694
* expr.c (expand_expr_real_2): Get the mode from the type rather
than the rtx, and assert that it is consistent with the mode of
the rtx (where known). Optimize all constant integers, not just
those that can be represented in poly_int64.
gcc/testsuite/
PR middle-end/95694
* gcc.dg/pr95694.c: New test.
Marek Polacek [Tue, 7 Jul 2020 21:09:42 +0000 (17:09 -0400)]
c++: Better diagnostic for decltype(auto) in C++11 [PR96103]
If you try to use decltype(auto) in C++11, we emit obscure
error: expected primary-expression before 'auto'
giving the user no hint as to what's wrong. This patch improves that
diagnostic. Since we've been giving an error, I'm also using error().
gcc/cp/ChangeLog:
PR c++/96103
* parser.c (cp_parser_decltype): Print error about using decltype(auto)
in C++11. Check that the token following "auto" is ")".
gcc/testsuite/ChangeLog:
PR c++/96103
* g++.dg/cpp0x/decltype77.C: New test.
Kewen Lin [Wed, 8 Jul 2020 07:44:02 +0000 (02:44 -0500)]
rs6000: Add len_load/len_store optab support
Define rs6000 specific len_load/len_store for the LEN_LOAD/LEN_STORE
internal function's expansion. As the doc description of the
len_load/len_store optab shows, we should use V16QI to wrap those
available vector modes.
gcc/ChangeLog:
* config/rs6000/vsx.md (len_load_v16qi): New define_expand.
(len_store_v16qi): Likewise.
Kewen Lin [Wed, 8 Jul 2020 07:33:03 +0000 (02:33 -0500)]
IFN/optabs: Support vector load/store with length
This patch is to add the internal function and optabs support for
vector load/store with length.
For the vector load/store with length optab, the length item would
be measured in lanes by default. For the targets which support
length measured in bytes like Power, they should only define VnQI
modes to wrap the other same size vector modes. If the length is
larger than total lane/byte count of the given mode, the behavior
is undefined. For the remaining lanes/bytes which isn't specified
by length, they would be taken as undefined value.
gcc/ChangeLog:
* doc/md.texi (len_load_@var{m}): Document.
(len_store_@var{m}): Likewise.
* internal-fn.c (len_load_direct): New macro.
(len_store_direct): Likewise.
(expand_len_load_optab_fn): Likewise.
(expand_len_store_optab_fn): Likewise.
(direct_len_load_optab_supported_p): Likewise.
(direct_len_store_optab_supported_p): Likewise.
(expand_mask_load_optab_fn): New macro. Original renamed to ...
(expand_partial_load_optab_fn): ... here. Add handlings for
len_load_optab.
(expand_mask_store_optab_fn): New macro. Original renamed to ...
(expand_partial_store_optab_fn): ... here. Add handlings for
len_store_optab.
(internal_load_fn_p): Handle IFN_LEN_LOAD.
(internal_store_fn_p): Handle IFN_LEN_STORE.
(internal_fn_stored_value_index): Handle IFN_LEN_STORE.
* internal-fn.def (LEN_LOAD): New internal function.
(LEN_STORE): Likewise.
* optabs.def (len_load_optab, len_store_optab): New optab.
François Dumont [Fri, 3 Jul 2020 06:13:19 +0000 (08:13 +0200)]
libstdc++: Fix [multi]map/[multi]set move constructors noexcept qualification
Container move constructors shall not consider their allocator move
constructor qualification.
libstdc++-v3/ChangeLog:
* include/bits/stl_tree.h (_Rb_tree_impl(_Rb_tree_impl&&)): Add noexcept
qualification based only on _Compare one.
* testsuite/23_containers/map/cons/noexcept_move_construct.cc: Add
static asserts.
* testsuite/23_containers/multimap/cons/noexcept_move_construct.cc:
Likewise.
* testsuite/23_containers/multiset/cons/noexcept_move_construct.cc:
Likewise.
* testsuite/23_containers/set/cons/noexcept_move_construct.cc: Likewise.
Ian Lance Taylor [Wed, 8 Jul 2020 03:42:21 +0000 (20:42 -0700)]
libbacktrace: test linker support for DWARF 5
On AIX, the compiler supports DWARF 5 but the linker does not.
2020-07-07 Clement Chigot <clement.chigot@atos.net>
* configure.ac: Test linker support for DWARF5
* configure: Regenerate
GCC Administrator [Wed, 8 Jul 2020 00:16:40 +0000 (00:16 +0000)]
Daily bump.
Marek Polacek [Tue, 7 Jul 2020 23:28:04 +0000 (19:28 -0400)]
c++: Add new test [PR92427]
Fixed in r10-5578.
PR c++/92427
* g++.dg/ext/flexary37.C: New test.
Jonathan Wakely [Tue, 7 Jul 2020 22:39:44 +0000 (23:39 +0100)]
libstdc++: Whitespace changes to remove spaces before tabs
libstdc++-v3/ChangeLog:
* include/std/limits: Whitespace changes.
Jonathan Wakely [Tue, 7 Jul 2020 22:26:38 +0000 (23:26 +0100)]
libstdc++: Replace __int_limits with __numeric_traits_integer
I recently added std::__detail::__int_limits as a lightweight
alternative to std::numeric_limits, forgetting that the values it
provides (digits, min and max) are already provided by
__gnu_cxx::__numeric_traits.
This change adds __int_traits as an alias for __numeric_traits_integer.
This avoids instantiating __numeric_traits to decide whether to use
__numeric_traits_integer or __numeric_traits_floating. Then all uses of
__int_limits can be replaced with __int_traits, and __int_limits can be
removed.
libstdc++-v3/ChangeLog:
* include/Makefile.am: Remove bits/int_limits.h.
* include/Makefile.in: Regenerate.
* include/bits/int_limits.h: Removed.
* include/bits/parse_numbers.h (_Select_int_base): Replace
__int_limits with __int_traits.
* include/bits/range_access.h (_SSize::operator()): Likewise.
* include/ext/numeric_traits.h (__numeric_traits_integer): Add
static assertion.
(__int_traits): New alias template.
* include/std/bit (__rotl, __rotr, __countl_zero, __countl_one)
(__countr_zero, __countr_one, __popcount, __bit_ceil)
(__bit_floor, __bit_width) Replace __int_limits with
__int_traits.
* include/std/charconv (__to_chars_8, __from_chars_binary)
(__from_chars_alpha_to_num, from_chars): Likewise.
* include/std/memory_resource (polymorphic_allocator::allocate)
(polymorphic_allocator::allocate_object): Likewise.
* include/std/string_view (basic_string_view::_S_compare):
Likewise.
* include/std/utility (cmp_equal, cmp_less, in_range): Likewise.
Jonathan Wakely [Tue, 7 Jul 2020 22:26:38 +0000 (23:26 +0100)]
libstdc++: Whitespace changes to keep lines below 80 columns
Also remove leading spaces that are followed by tabs.
libstdc++-v3/ChangeLog:
* include/std/limits: Whitespace changes.
Patrick Palka [Tue, 7 Jul 2020 20:33:12 +0000 (16:33 -0400)]
c++: wrong pretty printing of nested type [PR95303]
In the testcase below, we pretty print the nested type A<int>::B as
A<int>::B<int> because we don't check whether B is itself a class
template before printing the innermost set of template arguments from
B's TEMPLATE_INFO (which in this case belong to A). This patch fixes
this by checking PRIMARY_TEMPLATE_P beforehand.
gcc/cp/ChangeLog:
PR c++/95303
* cxx-pretty-print.c (pp_cxx_unqualified_id): Check
PRIMARY_TEMPLATE_P before printing the innermost template
arguments.
gcc/testsuite/ChangeLog:
PR c++/95303
* g++.dg/concepts/diagnostic14.C: New test.
Aaron Sawdey [Tue, 7 Jul 2020 17:48:56 +0000 (12:48 -0500)]
rs6000: fix power10_hw test
The code snippet for this test was returning 1 if power10
instructions executed correctly. It should return 0 if the
test passes.
* lib/target-supports.exp (check_power10_hw_available):
Return 0 for passing test.
Nathan Sidwell [Tue, 7 Jul 2020 18:43:58 +0000 (11:43 -0700)]
testsuite: missed testcase
I discovered I'd missed applying a testcase when fixing up the EOF
token location a while back.
gcc/testsuite/
* c-c++-common/cpp/pragma-eof.c: New
Nathan Sidwell [Tue, 7 Jul 2020 18:28:59 +0000 (11:28 -0700)]
preprocessor: Better line info for <builtin> & <command-line>
With C++ module header units it becomes important to distinguish
between macros defined in forced headers (& commandline & builtins)
from those defined in the header file being processed. We weren't
making that easy because we treated the builtins and command-line
locations somewhat file-like, with incrementing line numbers, and
showing them as included from line 1 of the main file. This patch does
3 things:
0) extend the idiom that 'line 0' of a file means 'the file as a whole'
1) builtins and command-line macros are shown as-if included from line zero.
2) when emitting preprocessed output we keep resetting the line number
so that re-reading that preprocessed output will get the same set of
locations for the command line etc.
For instance the new c-c++-common/cpp/line-2.c test, now emits
In file included from <command-line>:
./line-2.h:4:2: error: #error wrong
4 | #error wrong
| ^~~~~
line-2.c:3:11: error: macro "bill" passed 1 arguments, but takes just 0
3 | int bill(1);
| ^
In file included from <command-line>:
./line-2.h:3: note: macro "bill" defined here
3 | #define bill() 2
|
Before it told you about including from <command-line>:31.
the preprocessed output looks like:
...
(There's a new optimization in do_line_marker to stop each of these
line markers causing a new line map. We can simply rewind the
location, and keep using the same line map.)
libcpp/
* directives.c (do_linemarker): Optimize rewinding to line zero.
* files.c (_cpp_stack_file): Start on line zero when about to inject
headers.
(cpp_push_include, cpp_push_default_include): Use highest_line as
the location.
* include/cpplib.h (cpp_read_main_file): Add injecting parm.
* init.c (cpp_read_main_file): Likewise, inform _cpp_stack_file.
* internal.h (enum include_type): Add IT_MAIN_INJECT.
gcc/c-family/
* c-opts.c (c_common_post_options): Add 'injecting' arg to
cpp_read_main_file.
(c_finish_options): Add linemap_line_start calls for builtin and cmd
maps. Force token position to line_table's highest line.
* c-ppoutput.c (print_line_1): Refactor, print line zero.
(cb_define): Always increment source line.
gcc/testsuite/
* c-c++-common/cpp/line-2.c: New.
* c-c++-common/cpp/line-2.h: New.
* c-c++-common/cpp/line-3.c: New.
* c-c++-common/cpp/line-4.c: New.
* c-c++-common/cpp/line-4.h: New.
Martin Sebor [Tue, 7 Jul 2020 17:23:50 +0000 (11:23 -0600)]
Avoid printing informational notes when -Wmismatched-tags is suppressed in system headers (PR c++/96063)
Related:
PR c++/96063 - mismatched-tags warnings in stdlib headers
gcc/cp/ChangeLog:
PR c++/96063
* parser.c (class_decl_loc_t::diag_mismatched_tags): Print notes only
if warning_at returns nonzero.
gcc/testsuite/ChangeLog:
PR c++/96063
* g++.dg/warn/Wmismatched-tags-7.C: New test.
* g++.dg/warn/Wmismatched-tags-8.C: New test.
Anton Youdkevitch [Tue, 26 May 2020 11:23:04 +0000 (04:23 -0700)]
Aarch64: Change costs for TX2 to expose more vectorization opportunities
Make the costs such that they do not exaclty reflect
the actual instructions costs from the manual but make
the codegen emit the code we want it to.
gcc/ChangeLog:
* config/aarch64/aarch64.c (thunderx2t99_regmove_cost,
thunderx2t99_vector_cost): Likewise.
Richard Biener [Tue, 7 Jul 2020 11:57:40 +0000 (13:57 +0200)]
fix detection of negative step DR groups
This fixes a condition that caused all negative step DR groups to
be detected as single element interleaving. Such groups are
rejected by interleaving vectorization but miscompiled by SLP
which is fixed by forcing VMAT_STRIDED_SLP for now.
2020-07-07 Richard Biener <rguenther@suse.de>
* tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Fix
group overlap condition to allow negative step DR groups.
* tree-vect-stmts.c (get_group_load_store_type): For
multi element SLP groups force VMAT_STRIDED_SLP when the step
is negative.
* gcc.dg/vect/slp-47.c: New testcase.
* gcc.dg/vect/slp-48.c: Likewise.
Eric Botcazou [Fri, 15 May 2020 21:15:38 +0000 (23:15 +0200)]
[Ada] Small adjustment in the handling of alignment for arrays
gcc/ada/
* freeze.adb (Freeze_Array_Type): Use Ctyp more consistently.
Move code setting the alignment in the non-packed case to...
* layout.adb (Layout_Type): ...here.
Bob Duff [Fri, 15 May 2020 15:40:50 +0000 (11:40 -0400)]
[Ada] Avoid crash on node extension
gcc/ada/
* treepr.adb (Print_Node): Add code to test Is_Extension.
Arnaud Charlet [Fri, 15 May 2020 09:41:10 +0000 (05:41 -0400)]
[Ada] Assert failure on invalid Variable_Indexing
gcc/ada/
* sem_ch4.adb (Try_Container_Indexing): Add ??? comment. Protect
against malformed tree in case of errors.
Piotr Trojanek [Thu, 14 May 2020 19:56:29 +0000 (21:56 +0200)]
[Ada] Use Is_Generic_Subprogram where possible
gcc/ada/
* einfo.adb, sem_ch10.adb, sem_ch12.adb, sem_ch8.adb: Use
Is_Generic_Subprogram.
Piotr Trojanek [Thu, 14 May 2020 20:08:09 +0000 (22:08 +0200)]
[Ada] Fix typo in code to get a better error message
gcc/ada/
* sem_ch8.adb (Analyze_Use_Package): Replace low-level,
error-prone Ekind_In tests with high-level Is_Generic_Subprogram
and Is_Subprogram.
Arnaud Charlet [Thu, 14 May 2020 12:33:15 +0000 (08:33 -0400)]
[Ada] ACATS 4.1J -
B854003 - Subtype conformance check missed #2
gcc/ada/
* sem_ch6.adb (Check_Formal_Subprogram_Conformance): New
subprogram to handle checking without systematically emitting an
error.
(Check_Conformance): Update call to
Check_Formal_Subprogram_Conformance and fix handling of Conforms
and Errmsg parameters.
Arnaud Charlet [Wed, 13 May 2020 08:41:03 +0000 (04:41 -0400)]
[Ada] ACATS 4.1K -
C452003
gcc/ada/
* exp_ch4.adb (Tagged_Membership): Generate a call to
CW_Membership instead of using Build_CW_Membership.
(Expand_N_In): Remove wrong handling of null access types and
corresponding comment.
* exp_intr.adb (Expand_Dispatching_Constructor_Call): Generate a
call to CW_Membership instead of using Build_CW_Membership.
* rtsfind.ads: Add CW_Membership.
* exp_atag.ads, exp_atag.adb (Build_CW_Membership): Removed.
* einfo.ads: Fix typo.
* libgnat/a-tags.ads, libgnat/a-tags.adb (CW_Membership): Moved
back to spec.
Ed Schonberg [Thu, 14 May 2020 15:06:54 +0000 (11:06 -0400)]
[Ada] Errors in handling of access_to_subprogram contracts
gcc/ada/
* exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Create
proper subprogram specification for body, using names in the
subprogram declaration but distinct entities.
* exp_ch6.adb (Expand_Call): If this is an indirect call
involving a subprogram wrapper, insert pointer parameter in list
of actuals with a parameter association, not as a positional
parameter.
Justin Squirek [Wed, 13 May 2020 22:59:29 +0000 (18:59 -0400)]
[Ada] Hang on conditional expression as actual
gcc/ada/
* exp_ch6.adb (Expand_Branch): Verify the original node is a
conditional expression before recursing further.
(Insert_Level_Assign): Transform assertion into an explicit
raise.
Steve Baird [Wed, 13 May 2020 17:38:35 +0000 (10:38 -0700)]
[Ada] Simplify statically known Max_Size_In_Storage_Elements attribute in more cases
gcc/ada/
* sem_attr.adb (Eval_Attribute): Generalize static evaluation of
Size attribute references to also handle
Max_Size_In_Storage_Elements references.
Javier Miranda [Wed, 13 May 2020 10:24:59 +0000 (06:24 -0400)]
[Ada]
Ada2020: AI12-0198 potentially unevaluated components of arrays
gcc/ada/
* sem_util.adb (Is_Potentially_Unevaluated): Code cleanup.
Eric Botcazou [Sun, 10 May 2020 20:02:44 +0000 (22:02 +0200)]
[Ada] Move generation of range checks for entry families to expander
gcc/ada/
* checks.ads (Expander Routines): Update the description of the
Do_Range_Check mechanism.
* checks.adb (Selected_Range_Checks): Fix typo.
* exp_ch9.adb: Add with and use clause for Checks.
(Actual_Index_Expression): Generate a range check if requested.
(Entry_Index_Expression): Likewise.
* sem_attr.adb (Resolve_Attribute) <Attribute_Count>: Call
Apply_Scalar_Range_Check instead of Apply_Range_Check.
* sem_ch9.adb (Analyze_Accept_Statement): Likewise.
* sem_res.adb (Resolve_Entry): Likewise, after having set the
actual index type on the prefix of the indexed component.
(Resolve_Indexed_Component): Remove useless conditional construct.
Piotr Trojanek [Tue, 12 May 2020 19:17:08 +0000 (21:17 +0200)]
[Ada] Freeze aspect expression relocated to pragma Precondition
gcc/ada/
* contracts.adb (Analyze_Entry_Or_Subprogram_Contract,
Process_Preconditions_For): Freeze expression that has been
relocated to pragma Precondition, not the expression which is
still in the aspect.
Arnaud Charlet [Sun, 10 May 2020 20:36:00 +0000 (16:36 -0400)]
[Ada] ACATS 4.1H -
BC60005 - null exclusion matching for formal subprograms
gcc/ada/
* sem_ch6.adb (Check_Conformance): Remove unnecessary (and
wrong) code.
* sem_ch8.adb (Check_Null_Exclusion): Post error at proper
location. Introduce new helper Null_Exclusion_Mismatch and fix
implementation wrt formal subprograms used in generic bodies.
(Analyze_Subprogram_Renaming): Fix missing setting of
Error_Msg_Sloc.
(Analyze_Object_Renaming): Replace "in Anonymous_Access_Kind" by
Is_Anonymous_Access_Type.
* sem_util.adb (Has_Null_Exclusion): Fix handling of
N_Parameter_Specification.
* sem_ch12.adb (Instantiate_Object): Replace "in
Anonymous_Access_Kind" by Is_Anonymous_Access_Type.
Ed Schonberg [Tue, 12 May 2020 12:20:22 +0000 (08:20 -0400)]
[Ada] Handle explicit dereferences in expression functions
gcc/ada/
* freeze.adb (Freeze_Expr_Types): Freeze the designated type of
the explicit dereference.
Javier Miranda [Tue, 12 May 2020 15:01:16 +0000 (11:01 -0400)]
[Ada]
Ada2020: AI12-0198 potentially unevaluated components of arrays
gcc/ada/
* sem_util.adb (Is_Potentially_Unevaluated): Protect reading
attribute Etype.
Bob Duff [Tue, 12 May 2020 15:07:36 +0000 (11:07 -0400)]
[Ada] Use pragma Unsuppress in Time_IO
gcc/ada/
* libgnat/g-catiio.adb (Value, Parse_ISO_8601): Unsuppress
checks, and don't rely on 'Valid.
Arnaud Charlet [Tue, 12 May 2020 14:35:12 +0000 (16:35 +0200)]
[Ada] Add support for XDR streaming in the default runtime
gcc/ada/
* Makefile.rtl: Remove dead code.
* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Document gnatbind -xdr switch.
* gnat_ugn.texi: Regenerate.
Piotr Trojanek [Mon, 11 May 2020 21:48:34 +0000 (23:48 +0200)]
[Ada] Fix documentation of -gnatVa switch
gcc/ada/
* doc/gnat_ugn/building_executable_programs_with_gnat.rst
(Validity Checking): Add "p" to the list of switches enabled by
-gnatVa.
* gnat_ugn.texi: Regenerate.
Ghjuvan Lacambre [Mon, 11 May 2020 11:51:13 +0000 (13:51 +0200)]
[Ada] Ensure No_Specification_Of_Aspect forbids pragmas and repr. clauses
gcc/ada/
* sem_ch13.adb (Analyze_Attribute_Definition_Clause): Add call
to Check_Restriction_No_Specification_Of_Aspect.
* sem_prag.adb (Analyze_Pragma): Likewise.
* restrict.ads (Check_Restriction_No_Specification_Of_Aspect):
Mention possible new node kinds in documentation.
* restrict.adb (Check_Restriction_No_Specification_Of_Aspect):
Retrieve aspect id from different fields if given node is an
N_Pragma or an N_Attribute_Definition_Clause.
Gary Dismukes [Mon, 11 May 2020 14:34:26 +0000 (10:34 -0400)]
[Ada] Checking type invariants on in params of procedures, not functions (AI12-0044)
gcc/ada/
* contracts.adb (Add_Invariant_And_Predicate_Checks): Relax the
condition for doing invariant checks so that in-mode parameters
of procedures are also checked (required by AI05-0289, and
restricted to procedures by AI12-0044). This is done in a
procedure's nested postconditions procedure.
* exp_ch6.adb (Expand_Actuals): Also perform postcall invariant
checks for in parameters of procedures (but not functions).
Moved invariant-checking code to end of Expand_Actuals
(including the nested function Is_Public_Subp).
Piotr Trojanek [Sun, 10 May 2020 19:56:42 +0000 (21:56 +0200)]
[Ada] Change local object from variable to constant
gcc/ada/
* sem_aggr.adb (Resolve_Delta_Array_Aggregate): Make Index_Type
a constant.
Piotr Trojanek [Sun, 10 May 2020 19:12:33 +0000 (21:12 +0200)]
[Ada] Fix expansion of delta aggregates with slices
gcc/ada/
* exp_aggr.adb (Expand_N_Delta_Aggregate): Use type of the delta
base expression for the anonymous object of the delta aggregate.
Javier Miranda [Sun, 10 May 2020 11:27:02 +0000 (07:27 -0400)]
[Ada]
Ada2020: AI12-0198 potentially unevaluated components of arrays
gcc/ada/
* sem_util.ads (Interval_Lists): Reordering routine.
* sem_util.adb (Interval_Lists): Reordering routines to keep
them alphabetically ordered.
Piotr Trojanek [Mon, 11 May 2020 16:21:29 +0000 (18:21 +0200)]
[Ada] Remove extra checks for non-static context from resolving 'Update
gcc/ada/
* sem_attr.adb (Resolve_Attribute): Do not call
Check_Non_Static_Context.
Arnaud Charlet [Sat, 9 May 2020 17:37:13 +0000 (13:37 -0400)]
[Ada] Spurious elaboration warnings with -gnatc and null procedures
gcc/ada/
* sem_elab.adb (Is_Guaranteed_ABE): Take into account null
procedures.
Piotr Trojanek [Sun, 10 May 2020 14:16:30 +0000 (16:16 +0200)]
[Ada] Minor cleanup with Is_Assignable
gcc/ada/
* sem_ch5.adb (Analyze_Assignment): Reuse Is_Assignable.
Piotr Trojanek [Sat, 9 May 2020 20:30:56 +0000 (22:30 +0200)]
[Ada] Set range checks for for 'Update on arrays in GNATprove expansion
gcc/ada/
* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Add scalar
range checks for 'Update on arrays just like for 'Update on
records.
* sem_attr.adb (Analyze_Array_Component_Update): Do not set
range checks for single-dimensional arrays.
(Resolve_Attribute): Do not set range checks for both single-
and multi- dimensional arrays.
Piotr Trojanek [Sun, 10 May 2020 19:55:27 +0000 (21:55 +0200)]
[Ada] Style fixes in the description of Analysis-Resolution-Expansion
gcc/ada/
* sem.ads (Sem): Fix description.
Piotr Trojanek [Sun, 10 May 2020 21:16:43 +0000 (23:16 +0200)]
[Ada] Allow aspect Relaxed_Initialization on protected entries
gcc/ada/
* sem_ch13.adb (Analyze_Relaxed_Parameter): Fix for protected
entries.
Qian Jianhua [Tue, 7 Jul 2020 09:12:07 +0000 (10:12 +0100)]
Fix a typo in doc/generic.texi
gcc/
* doc/generic.texi: Fix typo.
Kaipeng Zhou [Tue, 7 Jul 2020 09:07:28 +0000 (10:07 +0100)]
Pass correct parameters to c_parser_do_statement.
gcc/c/ChangeLog:
* c-parser.c (c_parser_statement_after_labels): Pass correct
parameters to c_parser_do_statement.
Jonathan Wakely [Tue, 7 Jul 2020 07:23:12 +0000 (08:23 +0100)]
libstdc++: Add PR number to ChangeLog entry and fix typos
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>
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.
GCC Administrator [Tue, 7 Jul 2020 00:16:40 +0000 (00:16 +0000)]
Daily bump.
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.
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.
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.
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.
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.
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.
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.
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.
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.