Jakub Jelinek [Fri, 20 Oct 2017 07:35:48 +0000 (09:35 +0200)]
re PR target/82158 (_Noreturn functions that do return clobber caller's registers on ARM32 (but not other arches))
PR target/82158
* tree-cfg.c (pass_warn_function_return::execute): In noreturn
functions when optimizing replace GIMPLE_RETURN stmts with
calls to __builtin_unreachable ().
Jakub Jelinek [Fri, 20 Oct 2017 07:32:35 +0000 (09:32 +0200)]
re PR sanitizer/82595 (bootstrap fails in libsanitizer on powerpc64-unknown-linux-gnu)
PR sanitizer/82595
* config/gnu-user.h (LIBTSAN_EARLY_SPEC): Add libtsan_preinit.o
for -fsanitize=thread link of executables.
(LIBLSAN_EARLY_SPEC): Add liblsan_preinit.o for -fsanitize=leak
link of executables.
Jakub Jelinek [Fri, 20 Oct 2017 07:30:33 +0000 (09:30 +0200)]
re PR target/82370 (AVX512 can use a memory operand for immediate-count vpsrlw, but gcc doesn't.)
PR target/82370
* config/i386/sse.md (VI248_AVX2, VI248_AVX512BW, VI248_AVX512BW_2):
New mode iterators.
(<shift_insn><mode>3<mask_name>): Change the last of the 3
define_insns for logical vector shifts to use VI248_AVX512BW
iterator instead of VI48_AVX512, remove <mask_mode512bit_condition>
condition, useless isa and prefix attributes. Change the first
2 of these define_insns to ...
(<mask_codefor><shift_insn><mode>3<mask_name>): ... this, new
define_insn for avx512vl.
(<shift_insn><mode>3): ... and this, new define_insn without
masking for non-avx512vl.
* gcc.target/i386/avx-pr82370.c: New test.
* gcc.target/i386/avx2-pr82370.c: New test.
* gcc.target/i386/avx512f-pr82370.c: New test.
* gcc.target/i386/avx512bw-pr82370.c: New test.
* gcc.target/i386/avx512vl-pr82370.c: New test.
* gcc.target/i386/avx512vlbw-pr82370.c: New test.
Jakub Jelinek [Fri, 20 Oct 2017 07:28:25 +0000 (09:28 +0200)]
re PR target/82370 (AVX512 can use a memory operand for immediate-count vpsrlw, but gcc doesn't.)
PR target/82370
* config/i386/sse.md (*andnot<mode>3,
<mask_codefor><code><mode>3<mask_name>, *<code><mode>3): Split
(=v,v,vm) alternative into (=x,x,xm) and (=v,v,vm), for 128-bit
and 256-bit vectors, the (=x,x,xm) alternative and when mask is
not applied use empty suffix even for TARGET_AVX512VL.
* config/i386/subst.md (mask_prefix3, mask_prefix4): When mask
is applied, supply evex,evex or evex,evex,evex instead of just
evex.
* sem_elab.adb (Compilation_Unit): Handle the case of a subprogram
instantiation that acts as a compilation unit.
(Find_Code_Unit): Reimplemented.
(Find_Top_Unit): Reimplemented.
(Find_Unit_Entity): New routine.
(Process_Instantiation_SPARK): Correct the elaboration requirement a
package instantiation imposes on a unit.
2017-10-19 Bob Duff <duff@adacore.com>
* exp_ch6.adb (Is_Build_In_Place_Result_Type): Enable build-in-place
for a narrow set of controlled types.
* exp_attr.adb (Expand_N_Attribute_Reference): Disable
Make_Build_In_Place_Call_... for F(...)'Old, where F(...) is a
build-in-place function call so that the temp is declared in the right
place.
Alan Modra [Thu, 19 Oct 2017 23:06:20 +0000 (09:36 +1030)]
PR82575, lto debugobj references __gnu_lto_slim, ld test liblto-17 fails
If __gnu_lto_slim is global, undefined, default visibility in the
early debug object, then it finds its way into .dynsym when creating
shared libraries. __gnu_lto_slim in a symbol table (.dynsym or
.symtab) signals nm and other binutils that the object is an LTO
object needing a plugin, but that isn't the case for the ld liblti-17
tests. So, make __gnu_lto_slim hidden to prevent it becoming
dynamic. Further, make it weak because some linkers may warn on
finding an undefined global non-default visibility symbol.
PR lto/82575
* simple-object-elf.c (simple_object_elf_copy_lto_debug_sections):
Make discarded non-local symbols weak and hidden.
Jonathan Wakely [Thu, 19 Oct 2017 13:57:10 +0000 (14:57 +0100)]
Improve tests for error reporting in Filesystem TS
* testsuite/experimental/filesystem/iterators/
recursive_directory_iterator.cc: Ensure that error_code arguments are
cleared when required.
* testsuite/experimental/filesystem/operations/create_directory.cc:
Remove redundant check.
* testsuite/experimental/filesystem/operations/temp_directory_path.cc:
Ensure that error_code argument is cleared when required.
Jonathan Wakely [Thu, 19 Oct 2017 13:57:06 +0000 (14:57 +0100)]
Fix path::iterator post-increment and post-decrement
* include/experimental/bits/fs_path.h (path::iterator++(int))
(path::iterator--(int)): Fix for paths with only one component.
* testsuite/experimental/filesystem/path/itr/traversal.cc: Test
post-increment and post-decrement.
Eric Botcazou [Thu, 19 Oct 2017 13:50:10 +0000 (13:50 +0000)]
re PR debug/82509 (DW_AT_endianity issues with attribute scalar_storage_order)
PR debug/82509
* dwarf2out.c (new_die_raw): New static inline function.
(new_die): Use it to create the DIE.
(add_AT_external_die_ref): Likewise.
(clone_die): Likewise.
(clone_as_declaration): Likewise.
(dwarf2out_vms_debug_main_pointer): Likewise.
(base_type_die): Likewise. Remove early return for corner cases.
Do not call add_pubtype on the DIE here.
(is_base_type): Remove ERROR_MARK and return 0 for VOID_TYPE.
(modified_type_die): Adjust the lookup for reverse order DIEs. Skip
typedefs for base types with DW_AT_endianity. Make sure a DIE with
native order exists for base types, attach the DIE manually and call
add_pubtype on it. Do not equate a reverse order DIE to the type.
Peephole patterns exist in the arm backend to spot load/store
operations to adjacent memory operations in order to convert them into
ldrd/strd instructions. However, when we have strict alignment
enforced, then we can only do this if the accesses are known to be
64-bit aligned; this is unlikely to be the case for most loads. The
patch adds some alignment checking to the code that validates the
addresses for use in the peephole patterns. This should also fix
incorrect generation of ldrd/strd with unaligned accesses that could
previously have occurred on ARMv5e where all such operations must be
64-bit aligned.
I've added some new tests as well. In doing so I discovered that the
ldrd/strd peephole tests could never fail since they would match the
source file name in the scanned assembly as well as any instructions
of the intended type. I've fixed those by tightening the scan results
slightly.
gcc:
* config/arm/arm.c (align_ok_ldrd_strd): New function.
(mem_ok_for_ldrd_strd): New parameter align. Extract the alignment of the
mem into it.
(gen_operands_ldrd_strd): Validate the alignment of the accesses.
testsuite:
* gcc.target/arm/peep-ldrd-1.c: Tighten test scan pattern.
* gcc.target/arm/peep-strd-1.c: Likewise.
* gcc.target/arm/peep-ldrd-2.c: New test.
* gcc.target/arm/peep-strd-2.c: New test.
Jakub Jelinek [Thu, 19 Oct 2017 11:23:59 +0000 (13:23 +0200)]
ubsan.c (ubsan_expand_null_ifn): Use _v1 suffixed type mismatch builtins...
* ubsan.c (ubsan_expand_null_ifn): Use _v1 suffixed type mismatch
builtins, store max (log2 (align), 0) into uchar field instead of
align into uptr field.
(ubsan_expand_objsize_ifn): Use _v1 suffixed type mismatch builtins,
store uchar 0 field instead of uptr 0 field.
(instrument_nonnull_return): Use _v1 suffixed nonnull return builtin,
instead of passing one address of struct with 2 locations pass
two addresses of structs with 1 location each.
* sanitizer.def (BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH,
BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH_ABORT,
BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN,
BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN_ABORT): Removed.
(BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH_V1,
BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH_V1_ABORT,
BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN_V1,
BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN_V1_ABORT): New builtins.
* c-c++-common/ubsan/float-cast-overflow-1.c: Drop value keyword
from expected output regexps.
* c-c++-common/ubsan/float-cast-overflow-2.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-3.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-4.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-5.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-6.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-8.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-9.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-10.c: Likewise.
* g++.dg/ubsan/float-cast-overflow-bf.C: Likewise.
* gcc.dg/ubsan/float-cast-overflow-bf.c: Likewise.
* g++.dg/asan/default-options-1.C (__asan_default_options): Add
used attribute.
* g++.dg/asan/asan_test.C: Run with ASAN_OPTIONS=handle_segv=2
in the environment.
Currently gen* warn about a missing mode on an UNSPEC_TOCSLOT unspec in
some call patterns. Those unspecs are created from rs6000.c, with Pmode
always. This patch fixes the patterns to say :P as well.
* config/rs6000/rs6000.md (*call_indirect_aix<mode>,
*call_value_indirect_aix<mode>, *call_indirect_elfv2<mode>,
*call_value_indirect_elfv2<mode>): Add correct mode to the unspec.
Martin Liska [Thu, 19 Oct 2017 07:50:48 +0000 (09:50 +0200)]
Do not instrument use-after-scope for vars with large alignment (PR sanitizer/82517).
2017-10-19 Martin Liska <mliska@suse.cz>
PR sanitizer/82517
* gimplify.c (gimplify_decl_expr): Do not instrument variables
that have a large alignment.
(gimplify_target_expr): Likewise.
2017-10-19 Martin Liska <mliska@suse.cz>
PR sanitizer/82517
* gcc.dg/asan/pr82517.c: New test.
Use Levenshtein spelling suggestions in Fortran FE
gcc/fortran/ChangeLog
2017-10-19 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
* gfortran.h (gfc_lookup_function_fuzzy): New declaration.
(gfc_closest_fuzzy_match): New declaration.
(vec_push): New definition.
* misc.c (gfc_closest_fuzzy_match): New definition.
* resolve.c: Include spellcheck.h.
(lookup_function_fuzzy_find_candidates): New static function.
(lookup_uop_fuzzy_find_candidates): Likewise.
(lookup_uop_fuzzy): Likewise.
(resolve_operator) <INTRINSIC_USER>: Call lookup_uop_fuzzy.
(gfc_lookup_function_fuzzy): New definition.
(resolve_unknown_f): Call gfc_lookup_function_fuzzy.
* interface.c (check_interface0): Likewise.
(lookup_arg_fuzzy_find_candidates): New static function.
(lookup_arg_fuzzy ): Likewise.
(compare_actual_formal): Call lookup_arg_fuzzy.
* symbol.c: Include spellcheck.h.
(lookup_symbol_fuzzy_find_candidates): New static function.
(lookup_symbol_fuzzy): Likewise.
(gfc_set_default_type): Call lookup_symbol_fuzzy.
(lookup_component_fuzzy_find_candidates): New static function.
(lookup_component_fuzzy): Likewise.
(gfc_find_component): Call lookup_component_fuzzy.
gcc/testsuite/ChangeLog
2017-10-19 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
* gfortran.dg/spellcheck-operator.f90: New testcase.
* gfortran.dg/spellcheck-procedure_1.f90: New testcase.
* gfortran.dg/spellcheck-procedure_2.f90: New testcase.
* gfortran.dg/spellcheck-structure.f90: New testcase.
* gfortran.dg/spellcheck-parameter.f90: New testcase.
Thomas Koenig [Wed, 18 Oct 2017 21:29:37 +0000 (21:29 +0000)]
re PR fortran/82567 ([6/7/8] gfortran takes a long time to compile a simple implied-do with -Optimization.)
2017-10-18 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/82567
* frontend-passes.c (combine_array_constructor): If an array
constructor is all constants and has more elements than a small
constant, don't convert a*[b,c] to [a*b,a*c] to reduce compilation
times.
2017-10-18 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/82567
* gfortran.dg/array_constructor_51.f90: New test.
Bin Cheng [Wed, 18 Oct 2017 16:04:16 +0000 (16:04 +0000)]
tree-loop-distribution.c (INCLUDE_ALGORITHM): New header file.
* tree-loop-distribution.c (INCLUDE_ALGORITHM): New header file.
(tree-ssa-loop-ivopts.h): New header file.
(struct builtin_info): New fields.
(classify_builtin_1): Compute and record base and offset parts for
memset builtin partition by calling strip_offset.
(offset_cmp, fuse_memset_builtins): New functions.
(finalize_partitions): Fuse adjacent memset partitions by calling
above function.
* tree-ssa-loop-ivopts.c (strip_offset): Delete static declaration.
Expose the interface.
* tree-ssa-loop-ivopts.h (strip_offset): New declaration.
* gcc.dg/tree-ssa/ldist-17.c: Adjust test string.
* gcc.dg/tree-ssa/ldist-32.c: New test.
* gcc.dg/tree-ssa/ldist-35.c: New test.
* gcc.dg/tree-ssa/ldist-36.c: New test.
Bin Cheng [Wed, 18 Oct 2017 15:56:15 +0000 (15:56 +0000)]
re PR tree-optimization/82574 (wrong code at -O3 on x86_64-linux-gnu)
PR tree-optimization/82574
* tree-loop-distribution.c (find_single_drs): New parameter. Check
that data reference must be executed exactly once per iteration
against the outermost loop in nest.
(classify_partition): Update call to above function.
gcc/testsuite
* gcc.dg/tree-ssa/pr82574.c: New test.
Martin Liska [Wed, 18 Oct 2017 12:44:08 +0000 (14:44 +0200)]
Fix failing test-case
2017-10-18 Martin Liska <mliska@suse.cz>
* gcc.dg/tree-prof/switch-case-2.c: Scan IPA profile dump
file instead of expand. Reason is that switch statement is
not yet expanded as decision tree, which also contains a BB
with count == 2000.
Jakub Jelinek [Wed, 18 Oct 2017 09:20:31 +0000 (11:20 +0200)]
re PR lto/82598 (lto debugobj lacks .note.GNU-stack)
PR lto/82598
* simple-object.c (handle_lto_debug_sections): Copy over also
.note.GNU-stack section with unchanged name.
* simple-object-elf.c (SHF_EXECINSTR): Define.
(simple_object_elf_copy_lto_debug_section): Drop SHF_EXECINSTR bit
on .note.GNU-stack section.
Robin Dapp [Wed, 18 Oct 2017 09:14:16 +0000 (09:14 +0000)]
S/390: Do not end groups after fallthru edge.
gcc/ChangeLog:
2017-10-17 Robin Dapp <rdapp@linux.vnet.ibm.com>
* config/s390/s390.c (s390_bb_fallthru_entry_likely): New function.
(s390_sched_init): Do not reset s390_sched_state if we entered the
current basic block via a fallthru edge and all others are unlikely.
Robin Dapp [Wed, 18 Oct 2017 09:10:09 +0000 (09:10 +0000)]
S/390: Handle long-running instructions.
gcc/ChangeLog:
2017-10-18 Robin Dapp <rdapp@linux.vnet.ibm.com>
* config/s390/s390.c (NUM_SIDES): New variable.
(LONGRUNNING_THRESHOLD): New variable.
(LATENCY_FACTOR): New variable.
(s390_sched_score): Decrease score for long-running instructions on
wrong side.
(s390_sched_variable_issue): Perform bookkeeping for long-running
instructions.
Paul Thomas [Wed, 18 Oct 2017 08:55:27 +0000 (08:55 +0000)]
re PR fortran/82550 (program using submodules fails to link)
2017-10-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82550
* trans_decl.c (gfc_get_symbol_decl): Procedure symbols that
have the 'used_in_submodule' attribute should be processed by
'gfc_get_extern_function_decl'.
2017-10-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82550
* gfortran.dg/submodule_30.f08 : New test.
Andreas Krebbel [Wed, 18 Oct 2017 08:21:45 +0000 (08:21 +0000)]
S/390: Fix vec-cmp-2 testcase
The functions all call foo and therefore need a stack frame what makes
them subject to shrink wrapping. Also all the additional instructions
in the function body makes it fragile wrt instruction scheduling. Just
set a global variable instead to circumvent this.
gcc/testsuite/ChangeLog:
2017-10-18 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Eric Botcazou [Tue, 17 Oct 2017 20:28:33 +0000 (20:28 +0000)]
visium.c (visium_select_cc_mode): Return CCmode for any RTX present on the RHS of a SET.
* config/visium/visium.c (visium_select_cc_mode): Return CCmode
for any RTX present on the RHS of a SET.
* compare-elim.c (try_eliminate_compare): Restore comment.
David Malcolm [Tue, 17 Oct 2017 19:41:01 +0000 (19:41 +0000)]
Simplify format_warning_at_substring API
The format_warning_at_substring API has a rather clunk way of indicating
the location of the pertinent param (if any): a source_range * is passed
in, which can be NULL. Doing so requires extracting a range from the
location_t and passing around a pointer to it, or NULL, as needed.
This patch simplifies things by eliminating the source_range * in
favor of a location_t, with UNKNOWN_LOCATION used to signify that
no param location is available.
gcc/c-family/ChangeLog:
* c-format.c (format_warning_at_char): Pass UNKNOWN_LOCATION
rather than NULL to format_warning_va.
(check_format_types): Likewise when calling format_type_warning.
Remove code to extract source_ranges and source_range * in favor
of just a location_t.
(format_type_warning): Convert source_range * param to a
location_t.
gcc/ChangeLog:
* gimple-ssa-sprintf.c (fmtwarn): Update for changed signature of
format_warning_at_substring.
(maybe_warn): Convert source_range * param to a location_t. Pass
UNKNOWN_LOCATION rather than NULL to fmtwarn.
(format_directive): Remove code to extract source_ranges and
source_range * in favor of just a location_t.
(parse_directive): Pass UNKNOWN_LOCATION rather than NULL to
fmtwarn.
* substring-locations.c (format_warning_va): Convert
source_range * param to a location_t.
(format_warning_at_substring): Likewise.
* substring-locations.h (format_warning_va): Likewise.
(format_warning_at_substring): Likewise.
Jan Hubicka [Tue, 17 Oct 2017 17:35:54 +0000 (19:35 +0200)]
target.h (enum vect_cost_for_stmt): Add vec_gather_load and vec_scatter_store
* target.h (enum vect_cost_for_stmt): Add vec_gather_load and
vec_scatter_store
* tree-vect-stmts.c (record_stmt_cost): Make difference between normal
and scatter/gather ops.
* reg-stack.c (compare_for_stack_reg): Add bool argument.
Detect FTST instruction and handle its register pops. Only pop
second operand if can_pop_second_op is true.
(subst_stack_regs_pat) <case COMPARE>: Detect FCOMI instruction to
set can_pop_second_op to false in the compare_for_stack_reg call.
* config/i386/i386.md (*cmpi<FPCMP:unord><MODEF:mode>): Only call
output_fp_compare for stack register operands.
* config/i386/i386.c (output_fp_compare): Do not output SSE compare
instructions here. Do not emit stack register pops here. Assert
that FCOMPP pops next to top stack register. Rewrite function.
Nathan Sidwell [Tue, 17 Oct 2017 14:49:05 +0000 (14:49 +0000)]
[PATCH PR/82546] tree node size
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00899.html
PR middle-end/82546
gcc/
* tree.c (tree_code_size): Reformat. Punt to lang hook for unknown
TYPE nodes.
gcc/cp/
* cp-objcp-common.c (cp_tree_size): Reformat. Adjust returns size
of TYPE nodes.
gcc/objc/
* objc-act.c (objc_common_tree_size): Return size of TYPE nodes.
Richard Biener [Tue, 17 Oct 2017 13:19:51 +0000 (13:19 +0000)]
2017-10-17 Richard Biener <rguenther@suse.de>
* graphite-scop-detection.c
(scop_detection::stmt_has_simple_data_refs_p): Always use
the full nest as region.
(try_generate_gimple_bb): Likewise.
* sese.c (scalar_evolution_in_region): Simplify now that
SCEV can handle instantiation in regions.
* tree-scalar-evolution.c (instantiate_scev_name): Also instantiate
in the non-loop part of a function if requested.
David Malcolm [Mon, 16 Oct 2017 20:50:40 +0000 (20:50 +0000)]
Add gnu::unique_ptr
This is a version of the patch posted by Trevor Saunders on 2017-07-31,
for which he wrote:
> For most of the history of this see
> https://sourceware.org/ml/gdb-patches/2016-10/msg00223.html
> The changes are mostly s/gdb/gtl/g
This version was updated by me (dmalcolm) adding these changes:
- renaming of "gtl" to "gnu" (3 letters, and one of the ones Richi
proposed, and not a match for "*tl")
- renaming of DEFINE_GDB_UNIQUE_PTR to DEFINE_GNU_UNIQUE_PTR
- renaming of xfree_deleter to xmalloc_deleter, and making it
use "free" rather than "xfree" (which doesn't exist)
- added a gcc/unique-ptr-tests.cc
- implement unique_xmalloc_ptr<T[]> (taken from gdb, but changing
"xfree" to "free", and adding support for pre-C++-11)
gcc/ChangeLog:
David Malcolm <dmalcolm@redhat.com>
* Makefile.in (OBJS): Add unique-ptr-tests.o.
* selftest-run-tests.c (selftest::run_tests): Call
selftest::unique_ptr_tests_cc_tests.
* selftest.h (selftest::unique_ptr_tests_cc_tests): New decl.
* unique-ptr-tests.cc: New file.
include/ChangeLog:
Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
David Malcolm <dmalcolm@redhat.com>