Jakub Jelinek [Fri, 8 Mar 2019 07:39:31 +0000 (08:39 +0100)]
re PR target/80190 (darwin: untranslateable placeholder "non-ASCII character")
PR target/80190
* config/darwin.c: Include intl.h.
(darwin_build_constant_cfstring): Improve i18n of diagnostics by not
composing the message out of two separate parts.
Jason Merrill [Fri, 8 Mar 2019 02:54:41 +0000 (21:54 -0500)]
PR c++/88123 - lambda and using-directive.
For named function calls in a template, the result of unqualified lookup is
safed in CALL_EXPR_FN. But for operator expressions, no unqualified lookup
is performed until we know whether the operands have class type. So when we
see in a lambda a use of an operator that might be overloaded, we need to do
that lookup then and save it away somewhere. One possibility would be in
the expression, but we can't really add extra conditional operands to
standard tree codes. I mostly implemented another approach using a new
WITH_LOOKUP_EXPR code, but teaching everywhere how to handle a new tree code
is always complicated. Then it occurred to me that we could associate the
lookups with the function, which is both simpler and smaller. So this patch
stores any operator bindings needed by a lambda function in an internal
attribute on the lambda call operator.
Andreas Schwab [Thu, 7 Mar 2019 23:24:59 +0000 (23:24 +0000)]
RISC-V: Add libstdc++ check-abi support.
Andreas Schwab <schwab@suse.de>
* config/abi/post/riscv64-linux-gnu: New directory.
* config/abi/post/riscv64-linux-gnu/baseline_symbols.txt: New file.
Jakub Jelinek [Thu, 7 Mar 2019 21:32:21 +0000 (22:32 +0100)]
re PR target/80003 (i386.c: %s placeholder is no semantic grammar unit)
PR target/80003
* config/i386/i386.c (ix86_set_func_type): Make sure diagnostics
doesn't start with a capital letter and doesn't end with a dot.
(ix86_function_arg_boundary): Make sure diagnostics doesn't start
with a capital letter.
(ix86_mangle_function_version_assembler_name): Likewise.
(ix86_generate_version_dispatcher_body): Likewise.
(fold_builtin_cpu): Likewise.
(get_builtin_code_for_version): Likewise. Remove extraneous space.
(ix86_handle_interrupt_attribute): Make the diagnostics easier for
translators, wrap full type name in %qs.
Jakub Jelinek [Thu, 7 Mar 2019 19:10:21 +0000 (20:10 +0100)]
re PR target/89602 (Missing AVX512 intrinsics)
PR target/89602
* config/i386/sse.md (avx512f_mov<ssescalarmodelower>_mask,
*avx512f_load<mode>_mask, avx512f_store<mode>_mask): New define_insns.
(avx512f_load<mode>_mask): New define_expand.
* config/i386/i386-builtin.def (__builtin_ia32_loadsd_mask,
__builtin_ia32_loadss_mask, __builtin_ia32_storesd_mask,
__builtin_ia32_storess_mask, __builtin_ia32_movesd_mask,
__builtin_ia32_movess_mask): New builtins.
* config/i386/avx512fintrin.h (_mm_mask_load_ss, _mm_maskz_load_ss,
_mm_mask_load_sd, _mm_maskz_load_sd, _mm_mask_move_ss,
_mm_maskz_move_ss, _mm_mask_move_sd, _mm_maskz_move_sd,
_mm_mask_store_ss, _mm_mask_store_sd): New intrinsics.
* gcc.target/i386/avx512f-vmovss-1.c: New test.
* gcc.target/i386/avx512f-vmovss-2.c: New test.
* gcc.target/i386/avx512f-vmovss-3.c: New test.
* gcc.target/i386/avx512f-vmovsd-1.c: New test.
* gcc.target/i386/avx512f-vmovsd-2.c: New test.
* gcc.target/i386/avx512f-vmovsd-3.c: New test.
Jason Merrill [Thu, 7 Mar 2019 16:15:56 +0000 (11:15 -0500)]
PR c++/88820 - ICE with CTAD and member template used in DMI.
Here the problem was that in order to form a FUNCTION_DECL for foo<int> in
the uninstantiated template, we were trying to deduce template args for S
from the template parm itself, and failing.
* pt.c (do_class_deduction): Handle parm used as its own arg.
Martin Jambor [Thu, 7 Mar 2019 16:03:34 +0000 (17:03 +0100)]
Relax cgraph_node::clone_of_p to also look through former clones
2019-03-07 Martin Jambor <mjambor@suse.cz>
PR ipa/88235
* cgraph.h (cgraph_node): New inline method former_thunk_p.
* cgraph.c (cgraph_node::dump): Dump a note if node is a former thunk.
(clone_of_p): Treat expanded thunks like thunks, be optimistic if they
have multiple callees. At the end check if declarations match as
opposed to cgraph_nodes.
Martin Liska [Thu, 7 Mar 2019 15:33:52 +0000 (16:33 +0100)]
Significantly speed up verifiers for a cgraph_node with many clones.
2019-03-07 Martin Liska <mliska@suse.cz>
* cgraph.c (cgraph_node::verify_node): Verify with a neighbour
which is equivalent to searching for this in clones chain.
* symtab.c (symtab_node::verify_base): Similarly compare ASM
names with a neighbour and special case first node in a chain.
Richard Biener [Thu, 7 Mar 2019 12:46:44 +0000 (12:46 +0000)]
re PR tree-optimization/89595 (DOM miscompiles code)
2019-03-07 Richard Biener <rguenther@suse.de>
PR tree-optimization/89595
* tree-ssa-dom.c (dom_opt_dom_walker::optimize_stmt): Take
stmt iterator as reference, take boolean output parameter to
indicate whether the stmt was removed and thus the iterator
already advanced.
(dom_opt_dom_walker::before_dom_children): Re-iterate over
stmts created by folding.
compiler: emit underlying constant in array_type length export
In Array_type::do_export, when emitting a concrete array length,
evaluate the length expression to an integer constant and emit that
constant, instead of calling the more general method for emitting
expressions. This is to avoid the possibility that we will need
to emit a conversion, which could confuse the gccgoimporter.
Jason Merrill [Wed, 6 Mar 2019 18:39:24 +0000 (13:39 -0500)]
PR c++/89576 - if constexpr of lambda capture.
Now that we're doing implicit lambda capture in templates, we see x here as
the lambda capture. maybe_convert_cond was doing nothing in a template, so
we never called mark_rvalue_use on x. As part of the broad move toward
doing more processing of non-dependent expressions, let's do this
conversion.
* semantics.c (maybe_convert_cond): Do convert a non-dependent
condition in a template.
* typeck.c (condition_conversion): Handle being called in a
template.
Peter Bergner [Wed, 6 Mar 2019 15:36:43 +0000 (15:36 +0000)]
re PR rtl-optimization/88845 (ICE in lra_set_insn_recog_data, at lra.c:1010)
gcc/
PR rtl-optimization/88845
* config/rs6000/rs6000.c (rs6000_emit_move_si_sf_subreg): Enable during
LRA.
* lra.c (remove_scratches_1): New function.
(remove_scratches): Use it.
(lra_emit_move): Likewise.
gcc/testsuite/
PR rtl-optimization/88845
* gcc.target/powerpc/pr88845.c: New test.
PR libstdc++/86655 - std::assoc_legendre should not constrain
2019-03-06 Edward Smith-Rowland <3dw4rd@verizon.net>
PR libstdc++/86655 - std::assoc_legendre should not constrain
the value of m (or x).
* include/tr1/legendre_function.tcc (__assoc_legendre_p,
__sph_legendre): If degree > order Don't throw, return 0.
(__legendre_p, __assoc_legendre_p): Don't constrain x either.
* testsuite/special_functions/02_assoc_legendre/pr86655.cc: New test.
* testsuite/special_functions/20_sph_legendre/pr86655.cc: New test.
* testsuite/tr1/5_numerical_facilities/special_functions/
02_assoc_legendre/pr86655.cc: New test.
* testsuite/tr1/5_numerical_facilities/special_functions/
22_sph_legendre/pr86655.cc: New test.
* include/std/variant (__do_visit): New.
(__variant_cast): Likewise.
(__variant_cookie): Likewise.
(__erased_*): Remove.
(_Variant_storage::_S_vtable): Likewise.
(_Variant_storage::__M_reset_impl): Adjust to use __do_visit.
(_Variant_storage::__M_reset): Adjust.
(__variant_construct): New.
(_Copy_ctor_base(const _Copy_ctor_base&)): Adjust to use
__variant_construct.
(_Move_ctor_base(_Move_ctor_base&&)): Likewise.
(_Move_ctor_base::__M_destructive_copy): New.
(_Move_ctor_base::__M_destructive_move): Adjust to use
__variant_construct.
(_Copy_assign_base::operator=): Adjust to use __do_visit.
(_Copy_assign_alias): Adjust to check both copy assignment
and copy construction for triviality.
(_Move_assign_base::operator=): Adjust to use __do_visit.
(_Multi_array): Add support for visitors that accept and return
a __variant_cookie.
(__gen_vtable_impl::_S_apply_all_alts): Likewise.
(__gen_vtable_impl::_S_apply_single_alt): Likewise.
(__gen_vtable_impl::__element_by_index_or_cookie): New. Generate
a __variant_cookie temporary for a variant that is valueless and..
(__gen_vtable_impl::__visit_invoke): ..adjust here.
(__gen_vtable::_Array_type): Conditionally make space for
the __variant_cookie visitor case.
(__variant_construct_by_index): New.
(get_if): Adjust to use std::addressof.
(relops): Adjust to use __do_visit.
(variant): Add __variant_cast and __variant_construct_by_index
as friends.
(variant::emplace): Use _M_reset() and __variant_construct_by_index
instead of self-destruction.
(variant::swap): Adjust to use __do_visit.
(visit): Reimplement in terms of __do_visit.
(__variant_hash_call_base_impl::operator()): Adjust to use __do_visit.
* testsuite/20_util/variant/compile.cc: Adjust.
* testsuite/20_util/variant/run.cc: Likewise.
* config/arc/arc-c.def (__ARC_UNALIGNED__): Set it on
unaligned_access variable.
* config/arc/arc.c (arc_override_options): Set unaligned access
default on for HS CPUs.
* config/arc/arc.h (STRICT_ALIGNMENT): Fix logic.
runtime: enable precise GC checks when using stack maps
In the runtime there are bad pointer checks that currently don't
work with the concervative collector. With stack maps, the GC is
precise and the checks should work. Enable them.
Jason Merrill [Tue, 5 Mar 2019 22:20:41 +0000 (17:20 -0500)]
PR c++/86485 - -Wmaybe-unused with empty class ?:
The problem in this testcase is that the front end expects an rvalue
COND_EXPR to initialize a single temporary from one of the arms. But
because gimplify_cond_expr used MODIFY_EXPR, instead the arms would each
create their own temporary and then copy that into the common temporary.
While looking at PR86485, I noticed that many uses of is_really_empty_class
were overlooking that it returned true for a class with only a vptr;
initialization of such a class is not trivial. Marek's P1064 patch fixed
one place in constexpr.c to also check for a vtable, but there are several
others that still don't.
This patch requires callers to explicitly choose which behavior they want.
Currently the uses in constexpr.c want to consider the vptr, and other uses
don't.
* class.c (is_really_empty_class): Add ignore_vptr parm.
(trivial_default_constructor_is_constexpr): Pass it.
* call.c (build_over_call): Pass it.
* constexpr.c (cxx_eval_constant_expression): Pass it instead of
checking TYPE_POLYMORPHIC_P.
(cxx_eval_component_reference, potential_constant_expression_1):
Pass it.
* cp-gimplify.c (simple_empty_class_p): Pass it.
* init.c (expand_aggr_init_1): Pass it.
sysinfo: add Flags to Statfs_t if not already there
If there is no f_flags field in statfs_t then rename one of the
f_spare fields, as happened in Linux kernel version 2.6.36. This
fixes the build on CentOS 5.11. The CentOS kernel will hopefully not
fill in the f_spare field, so the resulting flags will be zero.
Jonathan Wakely [Tue, 5 Mar 2019 18:37:24 +0000 (18:37 +0000)]
Define midpoint and lerp functions for C++20 (P0811R3)
The implementation of midpoint used for integral types is due to Howard
Hinnant and avoids a branch for int and larger types (but not for chars
and shorts).
The midpoint and lerp functions for floating point types come straight
from the P0811R3 proposal, with no attempt at optimization.
* include/c_compatibility/math.h [C++20] (lerp): Add using
declaration.
* include/c_global/cmath [C++20] (__cpp_lib_interpolate): Define.
(__lerp): Define function template to implement lerp.
(lerp(float, float, float), lerp(double, double, double))
(lerp(long double, long double, long double)): Define for C++20.
* include/std/numeric [C++20] (__cpp_lib_interpolate): Define.
(midpoint(T, T), midpoint(T*, T*)): Define.
* include/std::version [C++20] (__cpp_lib_interpolate): Define.
* testsuite/26_numerics/lerp.cc: New test.
* testsuite/26_numerics/midpoint/floating.cc: New test.
* testsuite/26_numerics/midpoint/integral.cc: New test.
* testsuite/26_numerics/midpoint/pointer.cc: New test.
Wilco Dijkstra [Tue, 5 Mar 2019 15:04:01 +0000 (15:04 +0000)]
[ARM] Fix PR89222
The GCC optimizer can generate symbols with non-zero offset from simple
if-statements. Bit zero is used for the Arm/Thumb state bit, so relocations
with offsets fail if it changes bit zero and the relocation forces bit zero
to true. The fix is to disable offsets on function pointer symbols.
gcc/
PR target/89222
* config/arm/arm.md (movsi): Use targetm.cannot_force_const_mem
to decide when to split off a non-zero offset from a symbol.
* config/arm/arm.c (arm_cannot_force_const_mem): Disallow offsets
in function symbols.
testsuite/
PR target/89222
* gcc.target/arm/pr89222.c: Add new test.
Jakub Jelinek [Tue, 5 Mar 2019 13:38:59 +0000 (14:38 +0100)]
re PR tree-optimization/89487 (ICE in expand_expr_addr_expr_1, at expr.c:7993)
PR tree-optimization/89487
* gcc.dg/tree-ssa/pr89487.c: Include ../pr87600.h.
(caml_interprete): Ifdef the whole body out if REG1 or REG2 macros
aren't defined. Use REG1 instead of "%r15" and REG2 instead of
"%r14".
Jakub Jelinek [Tue, 5 Mar 2019 08:43:16 +0000 (09:43 +0100)]
re PR tree-optimization/89566 (ICE on compilable C++ code: in gimple_call_arg, at gimple.h:3166)
PR tree-optimization/89566
* gimple-ssa-sprintf.c (sprintf_dom_walker::handle_gimple_call):
Set info.fncode to BUILT_IN_NONE if gimple_call_builtin_p failed.
Punt if get_user_idx_format succeeds, but idx_format argument is
not provided or doesn't have pointer type, or if idx_args is above
number of provided arguments.
2019-03-04 Edward Smith-Rowland <3dw4rd@verizon.net>
PR libstdc++/88996 Implement P0439R0
Make std::memory_order a scoped enumeration.
* include/bits/atomic_base.h: For C++20 make memory_order a scoped enum,
add variables for the old enumerators. Adjust calls.
* testsuite/29_atomics/headers/atomic/types_std_c++2a.cc: New test.
* testsuite/29_atomics/headers/atomic/types_std_c++2a_neg.cc: New test.
Jonathan Wakely [Mon, 4 Mar 2019 12:21:06 +0000 (12:21 +0000)]
Implement polymorphic_allocator<byte> for C++20 (P0339R6)
* include/std/memory_resource (polymorphic_allocator): Add default
template argument for C++20.
(polymorphic_allocator::allocate_bytes)
(polymorphic_allocator::deallocate_bytes)
(polymorphic_allocator::allocate_object)
(polymorphic_allocator::deallocate_object)
(polymorphic_allocator::new_object)
(polymorphic_allocator::delete_object): New member functions for
C++20.
* testsuite/20_util/polymorphic_allocator/allocate_object.cc: New
test.
Bin Cheng [Mon, 4 Mar 2019 01:38:25 +0000 (01:38 +0000)]
re PR tree-optimization/89487 (ICE in expand_expr_addr_expr_1, at expr.c:7993)
PR tree-optimization/89487
* tree-loop-distribution.c (has_nonaddressable_dataref_p): New.
(create_rdg_vertices): Compute has_nonaddressable_dataref_p.
(distribute_loop): Don't do runtime alias check if there is non-
addressable data reference.
* tree-ssa-loop-ivopts.c (may_be_nonaddressable_p): Check if VAR_DECL
is a register variable.
* gcc/testsuite/gcc.dg/tree-ssa/pr89487.c: New test.
Jakub Jelinek [Sat, 2 Mar 2019 08:06:57 +0000 (09:06 +0100)]
re PR c++/71446 (Incorrect overload resolution when using designated initializers)
PR c++/71446
* cp-tree.h (CONSTRUCTOR_IS_DESIGNATED_INIT): Define.
* parser.c (cp_parser_braced_list): Adjust cp_parser_initializer_list
caller, set CONSTRUCTOR_IS_DESIGNATED_INIT.
(cp_parser_initializer_list): Add designated parameter, set *designated
to a bool whether any designators were parsed.
* decl.c (reshape_init): Copy over CONSTRUCTOR_IS_DESIGNATED_INIT if
needed.
* pt.c (tsubst_copy_and_build): Likewise.
* call.c (implicit_conversion): If CONSTRUCTOR_IS_DESIGNATED_INIT,
don't call build_list_conv, nor build_complex_conv, nor attempt to
convert a single element initializer to scalar.
* g++.dg/cpp2a/desig10.C: New test.
* g++.dg/cpp2a/desig11.C: New test.
* g++.dg/ext/desig4.C: Expect 4 new errors.
Jakub Jelinek [Sat, 2 Mar 2019 08:05:10 +0000 (09:05 +0100)]
re PR target/89506 (ICE: in decompose, at rtl.h:2266 with -Og -g)
PR target/89506
* config/arm/arm.md (cmpsi2_addneg): Use
trunc_int_for_mode (-INTVAL (...), SImode) instead of -INTVAL (...).
If operands[2] is 0 or INT_MIN, force use of subs.
(*compare_scc splitter): Use gen_int_mode.
(*negscc): Likewise.
* config/arm/thumb2.md (*thumb2_negscc): Likewise.
This is the result of these two oneliners:
perl -ni -e 'print unless /dg-skip-if "do not override -mcpu"/' \
$(find gcc/testsuite/gcc.target/powerpc/ -type f)
perl -pi -e 's/(dg-options.*)-mcpu=/\1-mdejagnu-cpu=/' \
$(find gcc/testsuite/gcc.target/powerpc/ -type f)
gcc/testsuite/
* gcc.target/powerpc/ throughout: Delete dg-skip-if "do not override
-mcpu". Use -mdejagnu-cpu= in dg-options instead of -mcpu=.
This adds an option -mdejagnu-cpu=. This option simply overrides what
is given in -mcpu=. The reason for this is that with older versions
of DejaGnu the value given in the RUNTESTFLAGS will override the value
a testcase wants to have.
* config/rs6000/rs6000.c (rs6000_option_override_internal): If
rs6000_dejagnu_cpu_index is set, use that to override rs6000_cpu_index.
* config/rs6000/rs6000.opt (mdejagnu-cpu=): New option.