backport: Make the perfect-forwarding constructor of a two-element tuple sfinae away when the first argument is an allocator_arg.
Backport from mainline
2016-12-19 Ville Voutilainen <ville.voutilainen@gmail.com>
Make the perfect-forwarding constructor of a two-element tuple
sfinae away when the first argument is an allocator_arg.
* include/std/tuple (tuple(_U1&&, _U2&&)): Constrain.
* testsuite/20_util/tuple/cons/allocator_with_any.cc: New.
Richard Biener [Wed, 14 Dec 2016 10:31:37 +0000 (10:31 +0000)]
re PR tree-optimization/78731 (Possible bug with switch when optimization is turned on.)
2016-12-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/78731
* tree-ssa-threadedge.c (simplify_control_stmt_condition):
If we've seen a backedge to not walk the SSA value chain.
(thread_around_empty_blocks): Pass down whether we've seen
a backedge to simplify_control_stmt_condition.
(thread_through_normal_block): Likewise.
2016-12-14 Thomas Preud'homme <thomas.preudhomme@arm.com>
Backport from mainline
2016-11-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
gcc/
PR tree-optimization/77673
* tree-ssa-math-opts.c (struct symbolic_number): Add new src field.
(init_symbolic_number): Initialize src field from src parameter.
(perform_symbolic_merge): Select most dominated statement as the
source statement. Set src field of resulting n structure from the
input src with the lowest address.
(find_bswap_or_nop): Rename source_stmt into ins_stmt.
(bswap_replace): Rename src_stmt into ins_stmt. Initially get source
of load from src field rather than insertion statement. Cancel
optimization if statement analyzed is not dominated by the insertion
statement.
(pass_optimize_bswap::execute): Rename src_stmt to ins_stmt. Compute
dominance information.
gcc/testsuite/
PR tree-optimization/77673
* gcc.dg/pr77673.c: New test.
Fix PR77933: stack corruption on ARM when using high registers and LR
2016-12-13 Thomas Preud'homme <thomas.preudhomme@arm.com>
Backport from mainline
2016-11-17 Thomas Preud'homme <thomas.preudhomme@arm.com>
gcc/
PR target/77933
* config/arm/arm.c (thumb1_expand_prologue): Distinguish between lr
being live in the function and lr needing to be saved. Distinguish
between already saved pushable registers and registers to push.
Check for LR being an available pushable register.
gcc/testsuite/
PR target/77933
* gcc.target/arm/pr77933-1.c: New test.
* gcc.target/arm/pr77933-2.c: Likewise.
Jonathan Wakely [Mon, 12 Dec 2016 15:00:43 +0000 (15:00 +0000)]
Backport all Filesystem library fixes from trunk
This implements the following LWG DRs:
2681 2682 2683 2706 2707 2712 2720 2723
Backport from mainline
PR libstdc++/70975
PR libstdc++/71337
PR libstdc++/78111
* include/experimental/bits/fs_dir.h (recursive_directory_iterator):
Overload pop (LWG 2706).
* include/experimental/bits/fs_fwd.h (perms::resolve_symlinks):
Replace with symlink_nofollow (LWG 2720).
* include/experimental/bits/fs_ops.h
(exists(const path&, error_code&)): Clear error if status is known
(LWG 2725).
* include/experimental/bits/fs_path.h (__is_path_src)
(_S_range_begin, _S_range_end): Overload to treat string_view as a
Source object.
(path::operator+=, path::compare): Overload for basic_string_view.
(path::path(string_type&&))
(path::operator=(string&&), path::assign(string_type&&)): Define
construction and assignment from string_type rvalues (LWG 2707).
(path::_S_convert<_Iter>(_Iter, _Iter)): Remove cv-qualifiers from
iterator's value_type.
(path::_S_convert<_Iter>(_Iter __first, __null_terminated)): Likewise.
Do not use operation not supported by input iterators.
(path::__is_path_iter_src): Add partial specialization for const
encoded character types.
* src/filesystem/dir.cc (open_dir): Return same value for errors
whether ignored or not.
(_Dir::advance(error_code*, directory_options)): Return false on
error.
(directory_iterator(const path&, directory_options, error_code*)):
Create end iterator on error (LWG 2723).
(recursive_directory_iterator(const path&, directory_options,
error_code*)): Likewise.
(recursive_directory_iterator::increment): Reset state on error.
(recursive_directory_iterator::pop): Define new overload.
* src/filesystem/ops.cc (canonical): Set error for non-existent path.
(file_time): Take error_code parameter and check for overflow.
(close_fd): Remove.
(do_copy_file): Report an error if source or destination is not a
regular file (LWG 2712). Pass error_code in file_time calls. Just
use close(3) instead of close_fd, to prevent retrying on error.
Check if _GLIBCXX_USE_FCHMODAT is defined.
[_GLIBCXX_USE_SENDFILE]: Fallback to read/write operations in case
sendfile fails with ENOSYS or EINVAL. Pass non-null pointer to
sendfile for offset argument.
(copy): Update comment to refer to LWG 2681. Implement 2682 and 2683
resolutions.
(equivalent): Fix error handling and result when only one file exists.
(is_empty): Fix error handling.
(last_write_time(const path&, error_code&)): Pass error_code in
file_time calls.
(last_write_time(const path&, file_time_type, error_code&)): Handle
negative times correctly.
(permissions(const path&, perms, error_code&)): Handle
symlink_nofollow.
(read_symlink): Add missing ec.clear().
(status(const path&, error_code&)): Handle EOVERFLOW.
(temp_directory_path): Pass error_code argument to other filesystem
operations.
* testsuite/experimental/filesystem/iterators/directory_iterator.cc:
Update expected behaviour on error.
* testsuite/experimental/filesystem/iterators/pop.cc: New.
* testsuite/experimental/filesystem/iterators/
recursive_directory_iterator.cc: Update expected behaviour on error.
* testsuite/experimental/filesystem/operations/copy.cc: Update
expected behaviour for copying directories with create_symlinks.
Verify that error_code arguments are cleared if there's no error.
Remove files created by tests. Test copying directories.
* testsuite/experimental/filesystem/operations/copy_file.cc: Remove
files created by tests.
* testsuite/experimental/filesystem/operations/create_symlink.cc: New.
* testsuite/experimental/filesystem/operations/equivalent.cc: New.
* testsuite/experimental/filesystem/operations/exists.cc: Test
overload taking an error_code.
* testsuite/experimental/filesystem/operations/is_empty.cc: New.
* testsuite/experimental/filesystem/operations/last_write_time.cc:
New.
* testsuite/experimental/filesystem/operations/permissions.cc: Test
overload taking error_code. Test symlink_nofollow on non-symlinks.
* testsuite/experimental/filesystem/operations/read_symlink.cc: New.
* testsuite/experimental/filesystem/operations/remove_all.cc: New.
* testsuite/experimental/filesystem/operations/temp_directory_path.cc:
Add testcase for inaccessible directory.
* testsuite/experimental/filesystem/path/construct/range.cc: Test
construction from input iterators with const value types.
* testsuite/experimental/filesystem/path/construct/string_view.cc:
New.
* testsuite/util/testsuite_fs.h (scoped_file): Define RAII helper.
Bernd Schmidt [Mon, 12 Dec 2016 13:01:28 +0000 (13:01 +0000)]
backport: re PR tree-optimization/77309 (wrong code at -Os and above on x86_64-linux-gnu (in the 64-bit mode))
Backport from mainline
2016-11-07 Bernd Schmidt <bschmidt@redhat.com>
PR rtl-optimization/77309
* combine.c (make_compound_operation): Allow EQ for IN_CODE, and
don't assume an equality comparison for plain COMPARE.
(simplify_comparison): Pass a more accurate code to
make_compound_operation.
PR rtl-optimization/77309
* gcc.dg/torture/pr77309.c: New test.
Nathan Sidwell [Thu, 8 Dec 2016 19:27:32 +0000 (19:27 +0000)]
re PR c++/78551 (Internal compiler error with constexpr initialization of union)
PR c++/78551
* constexpr.c (extract_string_elt): New. Broken out of ...
(cxx_eval_array_reference): ... here. Call it.
(cxx_eval_store_expression): Convert init by STRING_CST into
CONSTRUCTOR, if needed.
rs6000: Don't forget to initialize the TOC (PR77957)
The code generating traceback tables mistakenly does an early return
if !optional_tbtab, which causes it to miss the code generating the TOC
section. This only matters if the TOC will be empty since otherwise
the section is created elsewhere.
This patch fixes it.
PR target/77957
* config/rs6000/rs6000.c (rs6000_output_function_epilogue): Don't
return early if !optional_tbtab.
backport: Constrain optional's __constexpr_addressof in its return type and use a constexpr addressof for optional, if available.
Backport from mainline
2016-12-06 Ville Voutilainen <ville.voutilainen@gmail.com>
Constrain optional's __constexpr_addressof in its return type
and use a constexpr addressof for optional, if available.
* include/experimental/optional (__constexpr_addressof):
Constrain in the return type instead of in a template parameter.
(_Has_addressof_mem)
(_Has_addressof_free, _Has_addressof, __constexpr_addressof):
Guard with #ifndef __cpp_lib_addressof_constexpr.
(operator->()): Use std::__addressof if it's constexpr.
Bill Schmidt [Wed, 7 Dec 2016 01:08:40 +0000 (01:08 +0000)]
backport: re PR tree-optimization/78646 (incorrect result type for pointer addition in slsr)
2016-12-06 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Backport from mainline
2016-12-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Stefan Freudenberger <stefan@reservoir.com>
PR tree-optimization/78646
* gimple-ssa-strength-reduction.c (replace_ref): The pointer
addition used for the memory base expression should have the type
of the candidate.
Backport from mainline
2016-10-21 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR rtl-optimization/78038
* ree.c (get_defs): Return NULL if a defining insn for REG cannot
be deduced to set REG through the RTL structure.
(make_defs_and_copies_lists): Return false on a failing get_defs call.
Andreas Krebbel [Fri, 2 Dec 2016 08:51:58 +0000 (08:51 +0000)]
S/390: Fix vector all/any cc modes.
This fixes a problem with the vector compares producing CC mode
results.
The instructions produce condition code modes which can be either
interpreted to check an ALL elements or an ANY element result. As the
modes where used before they could not be inverted by the middle-end
by inverting the comparison code (e.g. eq to ne). The result usually
was just wrong.
In fact inverting a comparison code on an CCVALL mode would require to
also change the mode to CCVANY but this cannot be done easily in the
middle-end. With this patch the meaning of an ALL cc mode only refers
to the not-inverted comparison code (e.g. eq, gt, ge). With that
change inverting the comparison code matches a not operation on the
condition code mask again.
Bootstrapped and regression tested on s390 and s390x.
Bye,
-Andreas-
gcc/testsuite/ChangeLog:
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Backport from mainline
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc.target/s390/vector/vec-scalar-cmp-1.c: Fix and harden the
pattern checks.
* gcc.target/s390/zvector/vec-cmp-1.c: New test.
gcc/ChangeLog:
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Backport from mainline
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/s390-modes.def (CCVEQANY, CCVH, CCVHANY, CCVHU)
(CCVHUANY): Remove modes.
(CCVIH, CCVIHU, CCVIALL, CCVIANY, CCVFALL, CCVFANY): Add modes and
documentation.
* config/s390/s390.c (s390_match_ccmode_set): Rename cc modes.
(s390_expand_vec_compare_scalar): Pick one of the cc consumer
modes.
(s390_branch_condition_mask): Adjust to use the new cc consumer
modes. The new modes allow for proper reversal in the middle-end.
(s390_expand_vec_compare_cc): Determine the proper cc producer and
consumer modes for a comparison.
* config/s390/s390.md: Rename CCVH to CCVIH and CCVHU to CCVIHU
throughout the file.
* config/s390/vx-builtins.md: Likewise.
Martin Liska [Thu, 24 Nov 2016 10:12:24 +0000 (11:12 +0100)]
Add sem_item::m_hash_set (PR ipa/78309)
PR ipa/78309
* ipa-icf.c (void sem_item::set_hash): Update m_hash_set.
(sem_function::get_hash): Use the new field.
(sem_function::parse): Remove an argument from ctor.
(sem_variable::parse): Likewise.
(sem_variable::get_hash): Use the new field.
(sem_item_optimizer::read_section): Use new ctor and set hash.
* ipa-icf.h: _hash is removed from sem_item::sem_item,
sem_variable::sem_variable, sem_function::sem_function.
Fix PR78294 - thread sanitizer broken when using ld.gold
When one uses ld.gold to build gcc, the thread sanitizer doesn't work,
because gold is more conservative when applying TLS relaxations than
ld.bfd. In this case a missing initial-exec attribute on a declaration
causes gcc to assume the general dynamic model. With ld.bfd this gets
relaxed to initial exec when linking the shared library, so the missing
attribute doesn't matter. But ld.gold doesn't perform this optimization
and this leads to crashes on tsan instrumented binaries.
Uros Bizjak [Fri, 11 Nov 2016 19:43:54 +0000 (20:43 +0100)]
i386.md (*<shift_insn><mode>3_doubleword): Mark operand 0 as earlyclobber.
* config/i386/i386.md (*<shift_insn><mode>3_doubleword): Mark
operand 0 as earlyclobber.
(*ashl<mode>3_doubleword): Ditto for all operand 0 alternatives.