1. 08 Apr, 2019 17 commits
  2. 07 Apr, 2019 6 commits
  3. 06 Apr, 2019 3 commits
  4. 05 Apr, 2019 14 commits
    • PR c++/87145 - bogus error converting class type in template arg list. · adc06f45
      	* pt.c (convert_nontype_argument): Don't call
      	build_converted_constant_expr if it could involve calling a conversion
      	function with a instantiation-dependent constructor as its argument.
      
      	* g++.dg/cpp0x/constexpr-conv3.C: New test.
      	* g++.dg/cpp0x/constexpr-conv4.C: New test.
      
      From-SVN: r270178
      Marek Polacek committed
    • PR bootstrap/89980 - pointer initialization with empty string folded to zero · 6464d9b1
      gcc/cp/ChangeLog:
      
      	PR bootstrap/89980
      	* decl.c (reshape_init_array_1): Avoid treating empty strings
      	as zeros in array initializers.
      	Use trivial_type_p () instead of TYPE_HAS_TRIVIAL_DFLT().
      
      gcc/testsuite/ChangeLog:
      
      	PR bootstrap/89980
      	* g++.dg/init/array52.C: New test.
      
      From-SVN: r270177
      Martin Sebor committed
    • Implement std::visit<R> for C++2a (P0655R1) · 199b20e3
      	* doc/xml/manual/status_cxx2020.xml: Update status.
      	* include/std/variant (visit<R>): Define for C++2a (P0655R1).
      	* testsuite/20_util/variant/visit_r.cc: New test.
      
      From-SVN: r270176
      Jonathan Wakely committed
    • Use hidden friends for directory iterator comparisons · dd4a309e
      The equality operators for directory iterators are not explicitly
      specified in the standard, they're only required to meet the iterator
      requirements. This means we don't need to declare them at namespace
      scope and can implement them as hidden friends.
      
      Also add 'noexcept' to directory_iterator's dereference operators.
      
      	* include/bits/fs_dir.h (directory_iterator::operator*)
      	(directory_iterator::operator->): Add noexcept.
      	(operator==, operator!=): Replace namespace-scope equality operators
      	for directory iterators with hidden friends.
      
      From-SVN: r270175
      Jonathan Wakely committed
    • PR libstdc++/89986 export directory_iterator::increment · 67087c7e
      	PR libstdc++/89986
      	* config/abi/pre/gnu.ver: Add missing exports.
      	* testsuite/27_io/filesystem/iterators/directory_iterator.cc: Test
      	increment member.
      
      From-SVN: r270174
      Jonathan Wakely committed
    • Share all recursive_directory_iterator state [LWG 2708] · c7dde4a9
      Implement the proposed resolution of LWG 2708 by moving the _M_options
      and _M_pending members out of the recursive_directory_iterator into the
      shared _Dir_stack object. Because _Dir_stack is an opaque type, the
      member functions that access the _M_options and _M_pending variables
      cannot be inline. Move them into the library.
      
      As a drive-by fix, add noexcept to the non-throwing member functions of
      recursive_directory_iterator.
      
      	* config/abi/pre/gnu.ver: Export new symbols.
      	* include/bits/fs_dir.h (recursive_directory_iterator::options())
      	(recursive_directory_iterator::recursion_pending())
      	(recursive_directory_iterator::disable_recursion_pending()): Remove
      	inline definitions. Make noexcept.
      	(recursive_directory_iterator::depth())
      	(recursive_directory_iterator::operator*())
      	(recursive_directory_iterator::operator->()): Make noexcept.
      	(recursive_directory_iterator::_M_options)
      	(recursive_directory_iterator::_M_pending): Remove data members.
      	* src/c++17/fs_path.cc (_Dir_stack): Add constructor and data members.
      	(recursive_directory_iterator::recursive_directory_iterator): Remove
      	ctor-initializer. Use new constructor for _Dir_stack.
      	(recursive_directory_iterator::options())
      	(recursive_directory_iterator::recursion_pending())
      	(recursive_directory_iterator::disable_recursion_pending()): Add
      	non-inline definitions.
      	(recursive_directory_iterator::depth()): Make noexcept.
      	(recursive_directory_iterator::increment(error_code&))
      	(recursive_directory_iterator::pop(error_code&)): Adjust to new
      	location of options and recursion_pending members.
      	* testsuite/27_io/filesystem/iterators/recursion_pending.cc: New test.
      	* testsuite/util/testsuite_fs.h (__gnu_test::scoped_file): Add
      	user-declared move constructor and assignment operator, to make the
      	type move-only.
      
      From-SVN: r270173
      Jonathan Wakely committed
    • Fix directory_iterator handling of DT_UNKNOWN · 5ed5c0da
      We need to handle DT_UNKNOWN earlier, not only during directory
      recursion, so that the cached file_type value in the directory_entry
      won't be used.
      
      	* src/c++17/fs_dir.cc (_Dir::advance(bool, error_code&)): Handle
      	d_type == DT_UNKNOWN immediately.
      	(_Dir::should_recurse(bool, error_code&)): Remove file_type::unknown
      	handling here.
      	* testsuite/27_io/filesystem/iterators/caching.cc: New test.
      
      From-SVN: r270172
      Jonathan Wakely committed
    • Make filesystem::path safe for self assignment · d96f11a2
      The standard says "If *this and p are the same object, has no effect."
      Previously we ended up clearing the path.
      
      	* include/bits/fs_path.h (path::operator=(path&&)): Check for self
      	assignment.
      	* src/c++17/fs_path.cc (path::operator=(const path&)): Likewise.
      	* testsuite/27_io/filesystem/path/assign/copy.cc: Test self
      	assignment.
      
      From-SVN: r270171
      Jonathan Wakely committed
    • PR libstdc++/87431 re-adjust never-valueless optimizations · 10f26de9
      Avoid creating arbitrarily large objects on the stack when emplacing
      trivially copyable objects into a variant. Currently we provide the
      strong exception-safety guarantee for all trivially copyable types, by
      constructing a second variant and then doing a non-throwing move
      assignment from the temporary. This patch restricts that behaviour to
      trivially copyable types that are no larger than 256 bytes. For larger
      types the object will be emplaced directly into the variant, and if its
      initialization throws then the variant becomes valueless.
      
      Also implement Antony Polukhin's suggestion to whitelist specific types
      that are not trivially copyable but can be efficiently move-assigned.
      Emplacing those types will never cause a variant to become valueless.
      The whitelisted types are: std::shared_ptr, std::weak_ptr,
      std::unique_ptr, std::function, and std::any. Additionally,
      std::basic_string, std::vector, and __gnu_debug::vector are whitelisted
      if their allocator traits give them a non-throwing move assignment
      operator. Specifically, this means std::string is whitelisted, but
      std::pmr::string is not.
      
      As part of this patch, additional if-constexpr branches are added for
      the cases where the initialization is known to be non-throwing (so the
      overhead of the try-catch block can be avoided) and where a scalar is
      being produced by a potentially-throwing conversion operator (so that
      the overhead of constructing and move-assigning a variant is avoided).
      These changes should have no semantic effect, just better codegen.
      
      	PR libstdc++/87431 (again)
      	* include/bits/basic_string.h (__variant::_Never_valueless_alt):
      	Define partial specialization for basic_string.
      	* include/bits/shared_ptr.h (_Never_valueless_alt): Likewise for
      	shared_ptr and weak_ptr.
      	* include/bits/std_function.h (_Never_valueless_alt): Likewise for
      	function.
      	* include/bits/stl_vector.h (_Never_valueless_alt): Likewise for
      	vector.
      	* include/bits/unique_ptr.h (_Never_valueless_alt): Likewise for
      	unique_ptr.
      	* include/debug/vector (_Never_valueless_alt): Likewise for debug
      	vector.
      	* include/std/any (_Never_valueless_alt): Define explicit
      	specialization for any.
      	* include/std/variant (_Never_valueless_alt): Define primary template.
      	(__never_valueless): Use _Never_valueless_alt instead of
      	is_trivially_copyable.
      	(variant::emplace<N>(Args&&...)): Add special case for non-throwing
      	initializations to avoid try-catch overhead. Add special case for
      	scalars produced by potentially-throwing conversions. Use
      	_Never_valueless_alt instead of is_trivially_copyable for the
      	remaining strong exception-safety cases.
      	(variant::emplace<N>(initializer_list<U>, Args&&...)): Likewise.
      	* testsuite/20_util/variant/87431.cc: Run both test functions.
      	* testsuite/20_util/variant/exception_safety.cc: New test.
      	* testsuite/20_util/variant/run.cc: Use pmr::string instead of string,
      	so the variant becomes valueless.
      
      From-SVN: r270170
      Jonathan Wakely committed
    • Guard notes for -Waddress-of-packed-member on warning emission (PR c/89985) · 34facf20
      gcc/c-family/ChangeLog:
      	PR c/89985
      	* c-warn.c (check_address_or_pointer_of_packed_member): Add
      	auto_diagnostic_group.  Guard inform calls by result of
      	warning_at call.
      
      gcc/testsuite/ChangeLog:
      	PR c/89985
      	* c-c++-common/pr89985.c: New test.
      
      From-SVN: r270169
      David Malcolm committed
    • [testsuite] PR71598: Fix testcases again · fe7c4fa9
      2019-04-05  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	PR c/71598
      	* gcc.dg/torture/pr71598-1.c: dg-prune arm linker messages about
      	size of enums.
      	* gcc.dg/torture/pr71598-2.c: Likewise.
      
      From-SVN: r270168
      Christophe Lyon committed
    • sched-deps.c (sched_macro_fuse_insns): Check return value of targetm.fixed_condition_code_regs. · e3671020
              * sched-deps.c (sched_macro_fuse_insns): Check return value of
              targetm.fixed_condition_code_regs.
      
      From-SVN: r270167
      Joern Rennecke committed
    • PR c++/89973 - -Waddress-of-packed-member ICE with invalid conversion. · 05564120
      	PR c++/89973 - -Waddress-of-packed-member ICE with invalid conversion. 
      	* c-warn.c (check_address_or_pointer_of_packed_member): Check the type
      	of RHS.
      
      	* g++.dg/warn/Waddress-of-packed-member2.C: New test.
      
      From-SVN: r270166
      Marek Polacek committed
    • re PR debug/89892 (gcc generates wrong debug information at -O2) · 25eafae6
      2019-04-05  Richard Biener  <rguenther@suse.de>
      
      	PR debug/89892
      	PR debug/89905
      	* tree-cfgcleanup.c (remove_forwarder_block): Always move
      	debug bind stmts but reset them if they are not valid at the
      	destination.
      
      	* gcc.dg/guality/pr89892.c: New testcase.
      	* gcc.dg/guality/pr89905.c: Likewise.
      	* gcc.dg/guality/loop-1.c: Likewise.
      
      From-SVN: r270165
      Richard Biener committed