Jakub Jelinek [Wed, 6 Feb 2019 09:17:55 +0000 (10:17 +0100)]
re PR c/89211 (ICE in int_mode_for_mode, at stor-layout.c:403)
PR c/89211
* c-parser.c (c_parser_declaration_or_fndef): Don't update
DECL_ARGUMENTS of d if it has been defined already. Use a single if
instead of 3 nested ifs.
Jakub Jelinek [Wed, 6 Feb 2019 09:16:19 +0000 (10:16 +0100)]
re PR middle-end/89210 (ICE tree check: expected integer_cst, have real_cst in to_wide, at tree.h:5600)
PR middle-end/89210
* fold-const-call.c (fold_const_vec_convert): Pass true as last
operand to new_unary_operation only if both element types are integral
and it isn't a widening conversion. Return NULL_TREE if
new_unary_operation failed.
* c-c++-common/builtin-convertvector-2.c: New test.
Nikhil Benesch [Wed, 6 Feb 2019 04:48:35 +0000 (04:48 +0000)]
re PR go/89019 (LTO and gccgo cause ICE during free_lang_data)
gcc/go:
PR go/89019
* go-gcc.cc (Gcc_backend::placeholder_struct_type): Mark
placeholder structs as requiring structural equality.
(Gcc_backend::set_placeholder_pointer_type): Propagate the
canonical type from the desired pointer type to the placeholder
pointer type.
gcc/testsuite/:
* lib/go-torture.exp: Test compiling with -flto.
Joseph Myers [Wed, 6 Feb 2019 01:51:29 +0000 (01:51 +0000)]
Fix type of extern array declared in inner scope with outer initialization shadowed (PR c/88584).
As reported in bug 88584, if you have a file-scope array with external
linkage, initialized at file scope, and that array is shadowed at
block scope, and is declared again with external linkage and an
incomplete type in an inner scope, it is wrongly given a complete type
in that inner scope when the correct C semantics give it an incomplete
type (only the visible declarations contribute to the type in a given
scope).
In general, issues with the types of external linkage declarations
being different in different scopes were addressed by my fixes for bug
13801, for GCC 4.0. In this case, however, the code in pushdecl
dealing with giving declarations the right type in each scope works
fine, and the type is subsequently modified by complete_array_type
called from finish_decl: finish_decl is trying to complete an array
type based on an initializer, but that's only correct for the original
initialization at file scope, not for such a declaration in an inner
scope (it's harmless but unnecessary in the case where the original
declaration is still visible in the inner scope). Thus, this patch
changes finish_decl to stop this logic applying for such an external
declaration in an inner scope. (An erroneous attempt to include an
initializer for an extern variable in an inner scope is diagnosed
elsewhere.)
This is a regression from GCC 3.4, which properly rejected the code in
question (quite likely by accident).
Bootstrapped with no regressions on x86_64-pc-linux-gnu.
gcc/c:
PR c/88584
* c-decl.c (finish_decl): Do not complete array types for arrays
with external linkage not at file scope.
gcc/testsuite:
PR c/88584
* gcc.dg/redecl-18.c: New test.
gcc/jit/ChangeLog:
2019-02-05 Andrea Corallo <andrea.corallo@arm.com>
* docs/topics/compatibility.rst (LIBGCCJIT_ABI_11): New ABI tag.
* docs/topics/contexts.rst (Additional driver options): New
section.
* jit-playback.c (invoke_driver): Add call to append_driver_options.
* jit-recording.c: Within namespace gcc::jit...
(recording::context::~context): Free the optnames within
m_driver_options.
(recording::context::add_driver_option): New method.
(recording::context::append_driver_options): New method.
(recording::context::dump_reproducer_to_file): Add driver
options.
* jit-recording.h: Within namespace gcc::jit...
(recording::context::add_driver_option): New method.
(recording::context::append_driver_options): New method.
(recording::context::m_driver_options): New field.
* libgccjit++.h (gccjit::context::add_driver_option): New
method.
* libgccjit.c (gcc_jit_context_add_driver_option): New API
entrypoint.
* libgccjit.h (gcc_jit_context_add_driver_option): New API
entrypoint.
(LIBGCCJIT_HAVE_gcc_jit_context_add_driver_option): New
macro.
* libgccjit.map (LIBGCCJIT_ABI_11): New ABI tag.
gcc/testsuite/ChangeLog:
2019-02-05 Andrea Corallo <andrea.corallo@arm.com>
* jit.dg/add-driver-options-testlib.c: Add support file for
test-add-driver-options.c testcase.
* jit.dg/all-non-failing-tests.h: Add note about
test-add-driver-options.c
* jit.dg/jit.exp (jit-dg-test): Update to support
add-driver-options-testlib.c compilation.
* jit.dg/test-add-driver-options.c: New testcase.
On powerpc64-linux, this testcase complains the ABI for vector args
has changed, making the testcase fail (excess output). This patch
shuts up that warning.
Aaron Sawdey [Tue, 5 Feb 2019 16:32:06 +0000 (16:32 +0000)]
re PR target/89112 (Incorrect code generated by rs6000 memcmp expansion)
2019-02-05 Aaron Sawdey <acsawdey@linux.ibm.com>
PR target/89112
* config/rs6000/rs6000-string.c (do_ifelse, expand_cmp_vec_sequence,
expand_compare_loop, expand_block_compare_gpr,
expand_strncmp_align_check, expand_strncmp_gpr_sequence): Insert
REG_BR_PROB notes in inline expansion of memcmp/strncmp. Add
#include "profile-count.h" and "predict.h" for types and functions
needed to work with REG_BR_PROB notes.
Jakub Jelinek [Tue, 5 Feb 2019 16:21:36 +0000 (17:21 +0100)]
re PR target/89188 (ICE in pre_and_rev_post_order_compute, at cfganal.c:1055)
PR target/89188
* dce.c (delete_unmarked_insns): Don't remove no-op moves if they
can throw, non-call exceptions are enabled and we can't delete
dead exceptions or alter cfg. Set must_clean if
delete_insn_and_edges returns true, don't set it blindly for calls.
Assert that delete_unreachable_blocks is called only if can_alter_cfg.
Jonathan Wakely [Tue, 5 Feb 2019 15:45:24 +0000 (15:45 +0000)]
PR libstdc++/89194 untangle is_convertible and is_nothrow_convertible
The additional logic added to __is_convertible_helper in order to
support is_nothrow_convertible makes some uses of is_convertible
ill-formed. This appears to be due to PR c++/87603, but can be avoided
just by defining a separate helper for is_nothrow_convertible. The same
problems are likely to still exist for is_nothrow_convertible, but that
is new and so won't cause regressions for existing users of
is_convertible.
PR libstdc++/89194
* include/std/type_traits (__is_convertible_helper)
(__is_convertible_helper<_From, _To, false>): Revert changes to
support is_nothrow_convertible.
(__is_nt_convertible_helper): New helper.
(is_nothrow_convertible): Use __is_nt_convertible_helper.
Jonathan Wakely [Tue, 5 Feb 2019 14:45:00 +0000 (14:45 +0000)]
PR libstdc++/89130 restore support for non-MoveConstructible types
The changes to "relocate" std::vector elements can lead to new errors
outside the immediate context, because moving the elements to new
storage no longer makes use of the move-if-noexcept utilities. This
means that types with deleted moves no longer degenerate to copies, but
are just ill-formed. The errors happen while instantiating the
noexcept-specifier for __relocate_object_a, when deciding whether to try
to relocate.
This patch introduces indirections to avoid the ill-formed
instantiations of std::__relocate_object_a. In order to avoid using
if-constexpr prior to C++17 this is done by tag dispatching. After this
patch all uses of std::__relocate_a are guarded by checks that will
support sensible code (i.e. code not using custom allocators that fool
the new checks).
PR libstdc++/89130
* include/bits/alloc_traits.h (__is_copy_insertable_impl): Rename to
__is_alloc_insertable_impl. Replace single type member with two
members, one for each of copy and move insertable.
(__is_move_insertable): New trait for internal use.
* include/bits/stl_vector.h (vector::_S_nothrow_relocate(true_type))
(vector::_S_nothrow_relocate(true_type)): New functions to
conditionally check if __relocate_a can throw.
(vector::_S_use_relocate()): Dispatch to _S_nothrow_relocate based
on __is_move_insertable.
(vector::_S_do_relocate): New overloaded functions to conditionally
call __relocate_a.
(vector::_S_relocate): New function that dispatches to _S_do_relocate
based on _S_use_relocate.
* include/bits/vector.tcc (vector::reserve, vector::_M_realloc_insert)
(vector::_M_default_append): Call _S_relocate instead of __relocate_a.
* testsuite/23_containers/vector/modifiers/push_back/89130.cc: New.
Jonathan Wakely [Tue, 5 Feb 2019 14:44:56 +0000 (14:44 +0000)]
PR libstdc++/89090 avoid C++17 features in C++11/C++14 code
Although GCC and Clang both allow these features pre-C++17 in system
headers, Clang does issue warnings with -Wsystem-headers. It can also
complicate bisection and/or testcase reduction if # line markers are
stripped, because the code won't be known to come from system headers.
PR libstdc++/89090
* include/bits/stl_uninitialized.h (__relocate_a_1): Make unused
parameter unnamed. Add message to static assertion.
* include/bits/vector.tcc (vector::reserve, vector::_M_realloc_insert)
(vector::_M_default_append): Use _GLIBCXX17_CONSTEXPR for if constexpr
in C++11 code.
Martin Liska [Tue, 5 Feb 2019 12:17:45 +0000 (13:17 +0100)]
GCOV: remove misleading branches and calls info for -f option (PR gcov-profile/89000).
2019-02-05 Martin Liska <mliska@suse.cz>
PR gcov-profile/89000
* gcov.c (function_summary): Remove argument.
(file_summary): New function.
(print_usage): Replace tabs with spaces.
(generate_results): Use new function file_summary.
Richard Biener [Tue, 5 Feb 2019 08:32:16 +0000 (08:32 +0000)]
re PR middle-end/89150 (Tree form bitmaps break GC)
2019-02-05 Richard Biener <rguenther@suse.de>
PR middle-end/89150
* bitmap.h (struct bitmap_obstack): Do not mark GTY.
(struct bitmap_element): Drop chain_prev so we properly recurse on
the prev member, supporting tree views.
(struct bitmap_head): GTY skip the obstack member.
Alexandre Oliva [Tue, 5 Feb 2019 06:11:25 +0000 (06:11 +0000)]
[PR87770] test partial specializations for type dependence
When instantiating a partial specialization of a template member
function for a full specialization of a class template, we test
whether the context of variables local to the partial specialization,
i.e., the partial specialization itself, is dependent, and this ICEs
in type_dependent_expression_p, when checking that the function type
isn't type-dependent because it is not in a type-dependent scope.
We shouldn't have got that far: the previous block in
type_dependent_expression_p catches cases in which the function itself
takes template arguments of its own, but it only did so for primary
templates, not for partial specializations. This patch fixes that.
for gcc/cp/ChangeLog
PR c++/87770
* pt.c (instantiates_primary_template_p): New.
(type_dependent_expression_p): Use it.
Alan Modra [Mon, 4 Feb 2019 13:18:14 +0000 (23:48 +1030)]
[RS6000] Emit inline PLT when -mno-tls-markers
I restricted output of inline PLT sequences to when TLS marker relocs
were also available, which is obviously true when just considering
assembler support. However, there is a -mno-tls-markers option to
disable emitting the marker relocs. Currently that option also
disables inline PLT sequences, which is a bug (*). This patch fixes
that problem.
*) To be honest, it was a deliberate bug. I didn't want to have to
deal with inline PLT __tls_get_addr sequences lacking the marker
relocs in the linker, but it turns out the existing linker support for
old-style __tls_get_addr calls works reasonably well.
* config/rs6000/rs6000.c (rs6000_indirect_call_template_1),
(rs6000_pltseq_template): Guard output of TLS markers with
TARGET_TLS_MARKERS.
(rs6000_longcall_ref, rs6000_call_aix, rs6000_call_sysv),
(rs6000_sibcall_sysv): Ignore TARGET_TLS_MARKERS when deciding
to use inline PLT sequences.
* config/rs6000/rs6000.md (pltseq_tocsave_<mode>),
(pltseq_plt16_ha_<mode>, pltseq_plt16_lo_<mode>),
(pltseq_mtctr_<mode>): Don't test TARGET_TLS_MARKERS in predicate.
Martin Liska [Mon, 4 Feb 2019 12:19:48 +0000 (13:19 +0100)]
Bail out when ipa_fn_summaries does not contain entry for callee (PR ipa/88958).
2019-02-04 Martin Liska <mliska@suse.cz>
PR ipa/88958
* ipa-fnsummary.c (estimate_edge_devirt_benefit): Bail
out when ipa_fn_summaries does not contain entry for callee.
2019-02-04 Martin Liska <mliska@suse.cz>
Thomas Koenig [Sun, 3 Feb 2019 19:38:25 +0000 (19:38 +0000)]
re PR fortran/67679 (-Wunitialized reports on compiler-generated variables)
2019-02-03 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/67679
* trans-array.c (gfc_array_allocate): For setting the bounds on
the new array, add a condition for a not previously allocated
variable.
2019-02-03 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/67679
* gfortran.dg/warn_undefined_1.f90: New test.
* gfortran.dg/coarray_lock_7.f90: Fix patterns in test.
Uros Bizjak [Sun, 3 Feb 2019 16:48:41 +0000 (17:48 +0100)]
re PR target/89071 (AVX vcvtsd2ss lets us avoid PXOR dependency breaking for scalar float<->double and other scalar xmm,xmm instructions)
PR target/89071
* config/i386/i386.md (*sqrt<mode>2_sse): Add (v,0) alternative.
Do not prefer (v,v) alternative for non-AVX targets and (m,v)
alternative for speed when TARGET_SSE_PARTIAL_REG_DEPENDENCY is set.
(*rcpsf2_sse): Ditto.
(*rsqrtsf2_sse): Ditto.
(sse4_1_round<mode<2): Ditto.
Thomas Koenig [Sat, 2 Feb 2019 16:21:43 +0000 (16:21 +0000)]
re PR fortran/88298 (Bogus conversion warning for CSHIFT with -fno-range-check -m64)
2019-02-02 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/88298
* arith.c (gfc_int2int): Do not warn if src->do_not_warn is set.
* gfortran.h (gfc_expr): Add flag do_not_warn.
* intrinsic.c (gfc_convert_type_warn): Set expr->do_not_warn if
no warning is desired.
2019-02-02 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/88298
* gfortran.dg/warn_conversion_10.f90: New test.
Paul Thomas [Sat, 2 Feb 2019 09:23:30 +0000 (09:23 +0000)]
re PR fortran/88393 ([OOP] Segfault with type-bound assignment)
2019-02-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/88393
* trans-expr.c (gfc_conv_procedure_call): For derived entities,
passed in parentheses to class formals, invert the order of
copying allocatable components to taking the _data of the
class expression.
2019-02-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/88393
* gfortran.dg/alloc_comp_assign_16.f03 : New test.
Paul Thomas [Sat, 2 Feb 2019 09:16:44 +0000 (09:16 +0000)]
re PR fortran/88980 (segfault on allocatable string member assignment)
2019-02-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/88980
* trans-array.c (gfc_array_init_size): Add element_size to the
arguments.
(gfc_array_allocate): Remove the recalculation of the size of
the element and use element_size from the call to the above.
Unconditionally set the span field of the descriptor.
2019-02-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/88980
* gfortran.dg/realloc_on_assign_32.f90 : New test.
Paul Thomas [Sat, 2 Feb 2019 09:10:58 +0000 (09:10 +0000)]
re PR fortran/88685 (pointer class array argument indexing)
2019-02-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/88685
* expr.c (is_subref_array): Move the check for class pointer
dummy arrays to after the reference check. If we haven't seen
an array reference other than an element and a component is not
class or derived, return false.
2019-02-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/88685
* gfortran.dg/pointer_array_component_3.f90 : New test.
Jason Merrill [Sat, 2 Feb 2019 04:21:06 +0000 (23:21 -0500)]
PR c++/88761 - ICE with reference capture of constant.
Here, we capture nf, then the use of the proxy decays to a constant during
semantic processing of +nf. Since we saw some decay from proxy to constant,
we walk through the lambda body to see which proxies are still used, but we
weren't walking into subtrees of DECL_EXPR at all, so we missed the use of
&nf in the initializer of y, and removed the capture. But then at
instantiation time we try to use nf, don't have a proxy anymore, and ICE.
* lambda.c (mark_const_cap_r): Do walk subtrees of DECL_EXPR for
non-proxy decls.
Jakub Jelinek [Sat, 2 Feb 2019 00:04:39 +0000 (01:04 +0100)]
re PR middle-end/87887 (ICE in make_ssa_name_fn, at tree-ssanames.c:269)
PR middle-end/87887
* config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen):
Punt with warning on aggregate return or argument types. Ignore
type/mode checking for uniform arguments.
* gcc.dg/gomp/pr87887-1.c: New test.
* gcc.dg/gomp/pr87887-2.c: New test.
Jakub Jelinek [Fri, 1 Feb 2019 22:54:05 +0000 (23:54 +0100)]
re PR fortran/83246 (internal compiler error or loader problem might be related to a PARAMETER statement being in a BLOCK)
PR fortran/83246
PR fortran/89084
* trans-decl.c (generate_local_decl): Add referenced FL_PARAMETERs
if sym->ns->construct_entities rather than if
sym->ns->parent->code->op == EXEC_BLOCK.
* gfortran.dg/pr89084.f90: New test.
* gfortran.dg/lto/pr89084_0.f90: New test.
* gfortran.dg/pr83246.f90: New test.
runtime, sync: use __atomic intrinsics instead of __sync
GCC has supported the __atomic intrinsics since 4.7. They are better
than the __sync intrinsics in that they specify a memory model and,
more importantly for our purposes, they are reliably implemented
either in the compiler or in libatomic.
combine: Use TDF_DETAILS for "can't combine" dump prints
Some people use the -fdump-rtl-combine dumps (instead of the -da or
-fdump-rtl-combine-all dump), but the "Can't combine iN into iM"
messages do not make any sense if the failed combine attempts are not
printed otherwise. So let's change that.
* combine.c (try_combine): Do not print "Can't combine" messages unless
printing failed combination attempts.
Richard Biener [Fri, 1 Feb 2019 13:41:43 +0000 (13:41 +0000)]
re PR tree-optimization/88597 (Compile time hog w/ -O1 -fpeel-loops)
2019-02-01 Richard Biener <rguenther@suse.de>
PR middle-end/88597
* tree-scalar-evolution.c (analyze_scalar_evolution): Set up
the instantiate cache.
(instantiate_scev_binary): Elide second operand procesing
if equal to the first.
* tree-chrec.c (chrec_contains_symbols): Add visited set.
(chrec_contains_undetermined): Likewise.
(tree_contains_chrecs): Likewise.
Jakub Jelinek [Fri, 1 Feb 2019 08:43:02 +0000 (09:43 +0100)]
re PR tree-optimization/88107 (ICE in find_outermost_region_in_block, at tree-cfg.c:7157)
PR tree-optimization/88107
* tree-cfg.c (find_outermost_region_in_block): Add ALL argument,
instead of assertion that eh_region_outermost is non-NULL, if it
is NULL, set *ALL to true and return NULL.
(move_sese_region_to_fn): Adjust caller, if all is set, call
duplicate_eh_regions with NULL region.
Marek Polacek [Fri, 1 Feb 2019 00:30:46 +0000 (00:30 +0000)]
PR c++/88983 - ICE with switch in constexpr function.
* constexpr.c (cxx_eval_switch_expr): Use SWITCH_COND and SWITCH_BODY.
(cxx_eval_constant_expression) <case COND_EXPR>: Don't look for the
label in the else branch if we found it in the then branch.
Thomas Koenig [Thu, 31 Jan 2019 22:21:28 +0000 (22:21 +0000)]
re PR fortran/88669 (Contiguous attribute wrongly rejected)
2019-01-31 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/88669
* resolve.c (resolve_component): If the reference is a BT_CLASS,
copy the contiguous attribute from the reference and use the
correct attributes.
2019-01-31 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/88669
* gfortran.dg/contiguous_9.f90: New test.
Marek Polacek [Thu, 31 Jan 2019 20:21:11 +0000 (20:21 +0000)]
PR c++/89083, c++/80864 - ICE with list initialization in template.
* constexpr.c (adjust_temp_type): Use copy_node and change the type
instead of using build_constructor.
* decl.c (reshape_init_r): Don't reshape a digested initializer.
Return the initializer for COMPOUND_LITERAL_P.
* g++.dg/cpp0x/initlist107.C: New test.
* g++.dg/cpp0x/initlist108.C: New test.
* g++.dg/cpp0x/initlist109.C: New test.
* g++.dg/cpp0x/initlist110.C: New test.
* g++.dg/cpp0x/initlist111.C: New test.
* g++.dg/cpp0x/initlist112.C: New test.
* g++.dg/init/ptrfn4.C: New test.
David Malcolm [Thu, 31 Jan 2019 18:09:29 +0000 (18:09 +0000)]
Fix bogus fix-it for FLT_MAX (PR c/89122)
PR c/89122 reports that we emit a bogus fix-it hint for the case where
the code uses FLT_MAX, but has included <limits.h> rather than <float.h>:
x.c:3:11: error: 'FLT_MAX' undeclared here (not in a function); did you
mean 'INT_MAX'?
3 | float f = FLT_MAX;
| ^~~~~~~
| INT_MAX
This patch adds some knowledge of <float.h> (and <cfloat>) to
known-headers.cc, fixing the issue:
x.c:3:11: error: 'FLT_MAX' undeclared here (not in a function)
3 | float f = FLT_MAX;
| ^~~~~~~
x.c:2:1: note: 'FLT_MAX' is defined in header '<float.h>'; did you forget
to '#include <float.h>'?
1 | #include <limits.h>
+++ |+#include <float.h>
2 |
Jason Merrill [Thu, 31 Jan 2019 15:03:21 +0000 (10:03 -0500)]
PR c++/88752 - ICE with lambda and constexpr if.
In this testcase, we look for an instantiation of the outer lambda from
within the inner lambda. enclosing_instantiation_of didn't handle this
properly, as it assumed that any references would be from the same lambda
nesting depth. Fixed thus.
* cp-tree.h (LAMBDA_EXPR_INSTANTIATED): New.
* pt.c (tsubst_lambda_expr): Set it.
(instantiated_lambda_fn_p): Check it.
(enclosing_instantiation_of): Use it.