1. 08 Apr, 2019 4 commits
  2. 07 Apr, 2019 6 commits
  3. 06 Apr, 2019 3 commits
  4. 05 Apr, 2019 21 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
    • Fix ChangeLog entries. · 2723350f
      contrib/ChangeLog:
      
      2019-04-03  Martin Liska  <mliska@suse.cz>
      
      	PR translation/89936
      	* check-internal-format-escaping.py: Properly detect wrong
      	apostrophes.
      
      gcc/ChangeLog:
      
      2019-04-03  Martin Liska  <mliska@suse.cz>
      
      	PR translation/89936
      	* collect-utils.c (collect_execute): Use %< and %>, or %qs in
      	order to wrap keywords or arguments.
      	* collect2.c (main): Likewise.
      	(scan_prog_file): Likewise.
      	(scan_libraries): Likewise.
      	* common/config/riscv/riscv-common.c (riscv_subset_list::parsing_subset_version): Likewise.
      	(riscv_subset_list::parse_std_ext): Likewise.
      	* config/aarch64/aarch64.c (aarch64_override_options_internal): Likewise.
      	* config/arm/arm.c (arm_option_override): Likewise.
      	* config/cris/cris.c (cris_print_operand): Likewise.
      	* config/darwin-c.c (darwin_pragma_options): Likewise.
      	(darwin_pragma_unused): Likewise.
      	(darwin_pragma_ms_struct): Likewise.
      	* config/ft32/ft32.c (ft32_print_operand): Likewise.
      	* config/i386/i386.c (print_reg): Likewise.
      	(ix86_print_operand): Likewise.
      	* config/i386/xm-djgpp.h: Likewise.
      	* config/iq2000/iq2000.c (iq2000_print_operand): Likewise.
      	* config/m32c/m32c.c (m32c_option_override): Likewise.
      	* config/msp430/msp430.c (msp430_option_override): Likewise.
      	* config/nds32/nds32.c (nds32_option_override): Likewise.
      	* config/nvptx/mkoffload.c (main): Likewise.
      	* config/rx/rx.c (rx_print_operand): Likewise.
      	(valid_psw_flag): Likewise.
      	* config/vms/vms-c.c (vms_pragma_member_alignment): Likewise.
      	(vms_pragma_nomember_alignment): Likewise.
      	(vms_pragma_extern_model): Likewise.
      	* lto-wrapper.c (compile_offload_image): Likewise.
      	* omp-offload.c (oacc_parse_default_dims): Likewise.
      	* symtab.c (symtab_node::verify_base): Likewise.
      	* tlink.c (recompile_files): Likewise.
      	(start_tweaking): Likewise.
      	* tree-profile.c (parse_profile_filter): Likewise.
      
      gcc/objc/ChangeLog:
      
      2019-04-03  Martin Liska  <mliska@suse.cz>
      
      	PR translation/89936
      	* objc-act.c (objc_add_property_declaration): Use %< and %>, or %qs in
      	order to wrap keywords or arguments.
      	(objc_add_synthesize_declaration_for_property): Likewise.
      
      From-SVN: r270164
      Martin Liska committed
    • Remove usage of apostrophes in error and warning messages (PR translation/89935). · 904f3daa
      2019-04-05  Martin Liska  <mliska@suse.cz>
      
      	PR translation/89935
      	* check-internal-format-escaping.py: Properly detect wrong
      	apostrophes.
      2019-04-05  Martin Liska  <mliska@suse.cz>
      
      	PR translation/89935
      	* collect-utils.c (collect_execute): Use %< and %>, or %qs in
      	order to wrap keywords or arguments.
      	* collect2.c (main): Likewise.
      	(scan_prog_file): Likewise.
      	(scan_libraries): Likewise.
      	* common/config/riscv/riscv-common.c (riscv_subset_list::parsing_subset_version): Likewise.
      	(riscv_subset_list::parse_std_ext): Likewise.
      	* config/aarch64/aarch64.c (aarch64_override_options_internal): Likewise.
      	* config/arm/arm.c (arm_option_override): Likewise.
      	* config/cris/cris.c (cris_print_operand): Likewise.
      	* config/darwin-c.c (darwin_pragma_options): Likewise.
      	(darwin_pragma_unused): Likewise.
      	(darwin_pragma_ms_struct): Likewise.
      	* config/ft32/ft32.c (ft32_print_operand): Likewise.
      	* config/i386/i386.c (print_reg): Likewise.
      	(ix86_print_operand): Likewise.
      	* config/i386/xm-djgpp.h: Likewise.
      	* config/iq2000/iq2000.c (iq2000_print_operand): Likewise.
      	* config/m32c/m32c.c (m32c_option_override): Likewise.
      	* config/msp430/msp430.c (msp430_option_override): Likewise.
      	* config/nds32/nds32.c (nds32_option_override): Likewise.
      	* config/nvptx/mkoffload.c (main): Likewise.
      	* config/rx/rx.c (rx_print_operand): Likewise.
      	(valid_psw_flag): Likewise.
      	* config/vms/vms-c.c (vms_pragma_member_alignment): Likewise.
      	(vms_pragma_nomember_alignment): Likewise.
      	(vms_pragma_extern_model): Likewise.
      	* lto-wrapper.c (compile_offload_image): Likewise.
      	* omp-offload.c (oacc_parse_default_dims): Likewise.
      	* symtab.c (symtab_node::verify_base): Likewise.
      	* tlink.c (recompile_files): Likewise.
      	(start_tweaking): Likewise.
      	* tree-profile.c (parse_profile_filter): Likewise.
      2019-04-05  Martin Liska  <mliska@suse.cz>
      
      	PR translation/89935
      	* objc-act.c (objc_add_property_declaration): Use %< and %>, or %qs in
      	order to wrap keywords or arguments.
      	(objc_add_synthesize_declaration_for_property): Likewise.
      
      From-SVN: r270163
      Martin Liska committed
    • Make FMA code cope with redundant negates (PR89956) · 8d6b13da
      This patch fixes a case in which, due to forced missed optimisations
      in earlier passes, we have:
      
          _1 = a * b
          _2 = -_1
          _3 = -_1
          _4 = _2 + _3
      
      and treated _4 as two FNMA candidates, once via _2 and once via _3.
      
      2019-04-05  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR tree-optimization/89956
      	* tree-ssa-math-opts.c (convert_mult_to_fma): Protect against
      	multiple negates of the same value.
      
      gcc/testsuite/
      	PR tree-optimization/89956
      	* gfortran.dg/pr89956.f90: New test.
      
      From-SVN: r270162
      Richard Sandiford committed
    • PR c++/89948 - ICE with break in statement-expr. · ce36ba09
      	* constexpr.c (cxx_eval_statement_list): Jumping out of a
      	statement-expr is non-constant.
      
      From-SVN: r270161
      Jason Merrill committed
    • PR c++/89966 - error with non-type auto tparm. · 950b198d
      My patch for PR 86932 broke this testcase by passing tf_partial to
      coerce_template_template_parms, which prevented do_auto_deduction from
      actually replacing the auto.
      
      	* pt.c (do_auto_deduction): Clear tf_partial.
      
      From-SVN: r270160
      Jason Merrill committed
    • PR c++/86986 - ICE with TTP with parameter pack. · 17838af9
      Three separate issues were breaking this testcase.  One, we were trying to
      look at the type of a template template parameter to see if it's a valid
      non-type template parameter.  Two, we were treating a parameter pack named
      in the type of a template parameter pack of a TTP pack as being one of the
      packs expanded by the outer pack.  Three, we weren't supplying all the
      necessary levels of template arguments when TTP matching.
      
      	* pt.c (coerce_template_parameter_pack): Only look at the type of a
      	non-type parameter pack.
      	(fixed_parameter_pack_p_1): Don't recurse into the type of a
      	non-type parameter pack.
      	(coerce_template_template_parms): Call add_outermost_template_args.
      
      From-SVN: r270159
      Jason Merrill committed
    • Daily bump. · 70604b02
      From-SVN: r270158
      GCC Administrator committed
  5. 04 Apr, 2019 6 commits
    • PR c++/89974 - ICE on a definition of a non-type specialization on a struct… · 187c6369
      PR c++/89974 - ICE on a definition of a non-type specialization on a struct object with pointer to member function
      
      PR c++/89974 - ICE on a definition of a non-type specialization on a struct object with pointer to member function
      PR c++/89878 - same specializations on a zero-initialized struct object as a non-type parameter treated as distinct
      PR c++/89833 - sorry, unimplemented: string literal in function template signature
      PR c++/47488 - sorry, unimplemented: string literal in function template signature
      
      gcc/cp/ChangeLog:
      
      	PR c++/89974
      	PR c++/89878
      	PR c++/89833
      	PR c++/47488
      	* decl.c (reshape_init_array_1): Strip trailing zero-initializers
      	from arrays of trivial type and known size.
      	* mangle.c (write_expression): Convert braced initializer lists
      	to STRING_CSTs.
      	(write_expression): Trim trailing zero-initializers from arrays
      	of trivial type.
      	(write_template_arg_literal): Mangle strings the same as braced
      	initializer lists.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/89974
      	PR c++/89878
      	PR c++/89833
      	PR c++/47488
      	* gcc/testsuite/g++.dg/abi/mangle69.C: New test.
      	* gcc/testsuite/g++.dg/abi/mangle70.C: New test.
      	* gcc/testsuite/g++.dg/abi/mangle71.C: New test.
      	* gcc/testsuite/g++.dg/abi/mangle72.C: New test.
      	* gcc/testsuite/g++.dg/cpp0x/constexpr-array19.C: New test.
      	* gcc/testsuite/g++.dg/cpp2a/nontype-class15.C: New test.
      	* gcc/testsuite/g++.dg/cpp2a/nontype-class16.C: New test.
      	* gcc/testsuite/g++.dg/init/array51.C: New test.
      
      From-SVN: r270155
      Martin Sebor committed
    • PR middle-end/89957 - ICE calling strnlen with an int128_t bound in a known range · 1a9b15a7
      PR middle-end/89957 - ICE calling strnlen with an int128_t bound in a known range
      PR middle-end/89911 - [9 Regression] ICE in get_attr_nonstring_decl
      
      gcc/ChangeLog:
      
      	PR middle-end/89957
      	PR middle-end/89911
      	* builtins.c (expand_builtin_strnlen): Make sure wi::ltu_p operands
      	have the same precision since the function crashes otherwise.
      	* calls.c (maybe_warn_nonstring_arg): Avoid assuming strnlen() call
      	has non-zero arguments.
      
      gcc/testsuite/ChangeLog:
      
      	PR middle-end/89957
      	PR middle-end/89911
      	* gcc.dg/Wstringop-overflow-13.c: New test.
      
      From-SVN: r270154
      Martin Sebor committed
    • PR middle-end/89934 - ICE on a call with fewer arguments to strncpy declared without prototype · 9a0cbb60
      gcc/ChangeLog:
      
      	PR middle-end/89934
      	* gimple-ssa-warn-restrict.c (builtin_access::builtin_access): Bail
      	out if the number of arguments is less than expected.
      
      gcc/testsuite/ChangeLog:
      
      	PR middle-end/89934
      	* gcc.dg/Wrestrict-19.c: New test.
      	* gcc.dg/Wrestrict-5.c: Add comment.  Remove unused code.
      
      From-SVN: r270152
      Martin Sebor committed
    • re PR target/89399 (ICE: RTL check: expected code 'set', 'clobber' or… · c2457887
      re PR target/89399 (ICE: RTL check: expected code 'set', 'clobber' or 'clobber_high', have 'parallel' in combine_reaching_defs, at ree.c:783)
      
      	PR rtl-optimization/89399
      	* ree.c (combine_set_extension): Use single_set rather than
      	digging into PATTERN for items on the candidate list.
      	(combine_reaching_defs): Likewise.
      
      	PR rtl-optimization/89399
      	* gcc.c-torture/compile/pr89399.c: New test.
      
      From-SVN: r270151
      Jeff Law committed
    • re PR fortran/89904 (ICE in gfortran starting with r270045) · aace91e2
      2019-04-04  Harald Anlauf  <anlauf@gmx.de>
      
      	PR fortran/89004
      	* check.c (gfc_check_transfer): Reject procedures as actual
      	arguments for SOURCE and MOLD of TRANSFER intrinsic.
      
      	PR fortran/89004
      	* gfortran.dg/pr85797.f90: Adjust testcase.
      
      From-SVN: r270150
      Harald Anlauf committed
    • re PR c++/65619 (friend declaration with template template parameter not recognized) · 3a36c180
      2019-04-04  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/65619
      	* g++.dg/template/friend67.C: New.
      
      From-SVN: r270146
      Paolo Carlini committed