1. 13 Jun, 2017 28 commits
    • re PR objc/80949 (ICE in do_warn_duplicated_branches_r) · 8a516588
      	PR objc/80949
      	* c-warn.c (do_warn_duplicated_branches): Return if any of the
      	branches is null.
      
      From-SVN: r249171
      Marek Polacek committed
    • rs6000: Comment fixes + some leftovers · 6ae036b3
      
      	* config/rs6000/rs6000.c: Update all comments that mentioned SPE.
      	(rs6000_expand_builtin): Remove RS6000_BTC_EVSEL.
      	* config/rs6000/rs6000.h (RS6000_BTC_EVSEL): Delete.
      	* config/rs6000/vxworks.h (VXCPU_FOR_8548): Delete.  Adjust former use.
      	* config/rs6000/vxworksae.h (VXCPU_FOR_8548): Delete.
      	* config/rs6000/vxworksmils.h (VXCPU_FOR_8548): Delete.
      
      From-SVN: r249170
      Segher Boessenkool committed
    • rs6000: Remove VECTOR_SPE · d20ae4d7
      
      	* config/rs6000/rs6000-opts.h (enum rs6000_vector): Delete VECTOR_SPE.
      	* config/rs6000/rs6000.c (rs6000_debug_vector_unit): Delete VECTOR_SPE.
      
      From-SVN: r249169
      Segher Boessenkool committed
    • rs6000: Remove FIXED_SCRATCH · a1450d5f
      
      	* config/rs6000/rs6000.h (FIXED_SCRATCH): Delete.
      
      From-SVN: r249168
      Segher Boessenkool committed
    • rs6000: Updates to t-rtems · 2f5f2b57
      
      	* config/rs6000/t-rtems: Don't handle SPE.
      
      From-SVN: r249167
      Segher Boessenkool committed
    • rs6000: Updates to t-linux · 22f8f4a9
      
      	* config/rs6000/t-linux: Don't handle SPE.
      
      From-SVN: r249166
      Segher Boessenkool committed
    • rs6000: Remove eabispe.h · 37e3456a
      
      	* config/rs6000/eabispe.h: Delete file.
      
      From-SVN: r249165
      Segher Boessenkool committed
    • rs6000: Remove t-spe · bcfa5d6f
      
      	* config/rs6000/t-spe: Delete file.
      
      From-SVN: r249164
      Segher Boessenkool committed
    • rs6000: Remove SPE_CONST_OFFSET_OK · afb0e425
      
      	* config/rs6000/rs6000.c (SPE_CONST_OFFSET_OK): Delete.
      	(rs6000_legitimate_offset_address_p): Return false for anything in
      	V2SImode or V2SFmode.
      
      From-SVN: r249163
      Segher Boessenkool committed
    • rs6000: Sanitize vector modes · 5b1ebbca
      This removes the vector modes that were only used by SPE.  It also
      rearranges things so it is easier to see what is there, and for what.
      
      
      	* config/rs6000/rs6000-modes.def: Remove all 8-byte vector modes
      	except V2SF and V2SI.  Rearrange the vector modes, and add comments.
      	* config/rs6000/rs6000.c (rs6000_debug_reg_global): Remove V8QImode
      	and V4HImode.
      	(reg_offset_addressing_ok_p): Remove V4HImode and V1DImode.
      	(rs6000_legitimate_offset_address_p): Ditto.
      	(rs6000_emit_move): Ditto.
      	(rs6000_init_builtins): Remove V4HI_type_node.
      
      From-SVN: r249162
      Segher Boessenkool committed
    • compiler: containing small bfunction mixup in Gogo::write_globals · 78a88fb6
          
          Fix buglet in Gogo::write_globals-- in a couple of places the
          wrong Bfunction was being used for the containing (not target)
          function when creating calls for init functions.
          
          Reviewed-on: https://go-review.googlesource.com/45510
      
      From-SVN: r249159
      Ian Lance Taylor committed
    • Implement no_sanitize function attribute · 45b2222a
      2017-06-13  Martin Liska  <mliska@suse.cz>
      
      	PR sanitize/78204
      	* c-c++-common/ubsan/attrib-2.c (float_cast2): Enhance the
      	test by adding no_sanitize attribute.
      	* gcc.dg/asan/use-after-scope-4.c: Likewise.
      2017-06-13  Martin Liska  <mliska@suse.cz>
      
      	PR sanitize/78204
      	* c-attribs.c (add_no_sanitize_value): New function.
      	(handle_no_sanitize_attribute): Likewise.
      	(handle_no_sanitize_address_attribute): Use the function.
      	(handle_no_sanitize_thread_attribute): New function.
      	(handle_no_address_safety_analysis_attribute): Use
      	add_no_sanitize_value.
      	(handle_no_sanitize_undefined_attribute): Likewise.
      	* c-common.h: Declare new functions.
      	* c-ubsan.c (ubsan_instrument_division): Use sanitize_flags_p.
      	(ubsan_instrument_shift): Likewise.
      	(ubsan_instrument_bounds): Likewise.
      	(ubsan_maybe_instrument_array_ref): Likewise.
      	(ubsan_maybe_instrument_reference_or_call): Likewise.
      2017-06-13  Martin Liska  <mliska@suse.cz>
      
      	PR sanitize/78204
      	* asan.c (asan_sanitize_stack_p): Use sanitize_flags_p.
      	(gate_asan): Likewise.
      	* asan.h (asan_no_sanitize_address_p): Remove the function.
      	(sanitize_flags_p): New function.
      	* builtins.def: Fix coding style.
      	* common.opt: Use renamed enum value.
      	* convert.c (convert_to_integer_1): Use sanitize_flags_p.
      	* doc/extend.texi: Document no_sanitize attribute.
      	* flag-types.h (enum sanitize_code): Rename SANITIZE_NONDEFAULT
      	to SANITIZE_UNDEFINED_NONDEFAULT.
      	* gcc.c (sanitize_spec_function): Use the renamed enum value.
      	* gimple-fold.c (optimize_atomic_compare_exchange_p):
      	Use sanitize_flags_p.
      	* gimplify.c (gimplify_function_tree): Likewise.
      	* ipa-inline.c (sanitize_attrs_match_for_inline_p): Likewise.
      	* opts.c (parse_no_sanitize_attribute): New function.
      	(common_handle_option): Use renamed enum value.
      	* opts.h (parse_no_sanitize_attribute): Declare.
      	* tree.c (sanitize_flags_p): New function.
      	* tree.h: Declared here.
      	* tsan.c: Use sanitize_flags_p.
      	* ubsan.c (ubsan_expand_null_ifn): Likewise.
      	(instrument_mem_ref): Likewise.
      	(instrument_bool_enum_load): Likewise.
      	(do_ubsan_in_current_function): Remove the function.
      	(pass_ubsan::execute): Use sanitize_flags_p.
      	* ubsan.h: Remove do_ubsan_in_current_function
      	* tree-cfg.c (print_no_sanitize_attr_value): New function.
      	(dump_function_to_file): Use it here.
      2017-06-13  Martin Liska  <mliska@suse.cz>
      
      	PR sanitize/78204
      	* class.c (build_base_path): Use sanitize_flags_p.
      	* cp-gimplify.c (cp_genericize_r): Likewise.
      	(cp_genericize_tree): Likewise.
      	(cp_genericize): Likewise.
      	* cp-ubsan.c (cp_ubsan_instrument_vptr_p): Likewise.
      	* decl.c (compute_array_index_type): Likewise.
      	(start_preparsed_function): Likewise.
      	* decl2.c (one_static_initialization_or_destruction): Likewise.
      	* init.c (finish_length_check): Likewise.
      	* lambda.c (maybe_add_lambda_conv_op): Likewise.
      	* typeck.c (cp_build_binary_op): Likewise.
      	(build_static_cast_1): Likewise.
      2017-06-13  Martin Liska  <mliska@suse.cz>
      
      	PR sanitize/78204
      	* c-convert.c (convert): Use sanitize_flags_p.
      	* c-decl.c (grokdeclarator): Likewise.
      	* c-typeck.c (convert_for_assignment): Likewise.
      	(c_finish_return): Likewise.
      	(build_binary_op): Likewise.
      
      From-SVN: r249158
      Martin Liska committed
    • [ARM][Testsuite]make dump_stack function call conditional in cold-lc.c · ef0e3441
      After r249013, die () and dump_stack () are both in cold section. This makes
      the compiler generate bl instruction for the function call, instead of
      honoring the -mlong-calls option.
      
      This patch changes the dump_stack function call conditional, which fixes the
      regression.
      
      gcc/testsuite/
      
      	* gcc.target/arm/cold-lc.c: Update coding style, call dump_stack
      	conditionally.
      
      From-SVN: r249157
      Renlin Li committed
    • runtime: don't always show frames with no function in traceback · 09a871c4
          
          If there is no function name, the traceback is generally
          uninformative.  In earlier versions we did not show such frames.
          Restore that behavior.  These frames can be seen with GOTRACEBACK=system.
          
          Reviewed-on: https://go-review.googlesource.com/45431
      
      From-SVN: r249156
      Ian Lance Taylor committed
    • Fixed spelling mistake in gcc/ChangeLog · 5622463a
      From-SVN: r249155
      Martin Jambor committed
    • [PR80803 2/2] Diligent queuing in SRA grp_write prop · 345683a9
      2017-06-13  Martin Jambor  <mjambor@suse.cz>
      
      	PR tree-optimization/80803
      	PR tree-optimization/81063
      	* tree-sra.c (subtree_mark_written_and_enqueue): Move up in the file.
      	(propagate_subaccesses_across_link): Enqueue subtree whneve necessary
      	instead of relying on the caller.
      
      testsuite/
      	gcc.dg/tree-ssa/pr80803.c: New test.
      	gcc.dg/tree-ssa/pr81063.c: Likewise.
      
      From-SVN: r249154
      Martin Jambor committed
    • [PR80803 1/2] Streamline SRA access enqueuing · 35a952ba
      2017-06-13  Martin Jambor  <mjambor@suse.cz>
      
      	* tree-sra.c (add_access_to_work_queue): Only enqueue accesses
      	that have a first_link.
      	(sort_and_splice_var_accesses): Do not check first_link before
      	enquing.
      	(subtree_mark_written_and_enqueue): Likewise.
      	(propagate_all_subaccesses): Likewise and do not stop at first
      	parent with a first_link.
      
      From-SVN: r249153
      Martin Jambor committed
    • Trivial fix in dump_access_tree_1 · 7aa923e0
      2017-06-13  Martin Jambor  <mjambor@suse.cz>
      
      	* tree-sra.c (dump_access_tree_1): Fix accidental dumping to stderr
      	instead of f.
      
      From-SVN: r249152
      Martin Jambor committed
    • match.pd: New pattern. · 9ebc3467
      2017-06-13  Yury Gribov  <tetra2005@gmail.com>
      
      gcc/
      	* match.pd: New pattern.
      
      gcc/testsuite/
      	* c-c++-common/fold-masked-cmp-3.c: New test.
      
      From-SVN: r249151
      Yury Gribov committed
    • tree-vrp.c (is_masked_range_test): New function. · df067572
      2017-06-13  Yury Gribov  <tetra2005@gmail.com>
      
      gcc/
      	* tree-vrp.c (is_masked_range_test): New function.
      	(register_edge_assert_for): Determine ranges for
      	some bit tests.
      
      From-SVN: r249150
      Yury Gribov committed
    • re PR tree-optimization/67328 (range test rather than single bit test for code testing enum values) · 16842d34
      2017-06-13  Yury Gribov  <tetra2005@gmail.com>
      
      gcc/
      	PR tree-optimization/67328
      	* fold-const.c (maskable_range_p): New function.
      	(build_range_check): Generate bittests if possible.
      
      gcc/testsuite/
      	PR tree-optimization/67328
      	* c-c++-common/fold-masked-cmp-1.c: New test.
      	* c-c++-common/fold-masked-cmp-2.c: Likewise.
      	* gcc.dg/pr46309.c: Fix pattern.
      	* gcc.dg/pr46309-2.c: Likewise.
      
      From-SVN: r249149
      Yury Gribov committed
    • sdiv_costs_1.c: Require arm_arch_v8a_ok and add march option. · ba593ad5
      2017-06-13  Tamar Christina  <tamar.christina@arm.com>
      
      	* gcc.target/arm/sdiv_costs_1.c:
      	Require arm_arch_v8a_ok and add march option.
      
      From-SVN: r249148
      Tamar Christina committed
    • Enhance dump_probability function. · 9ab5a235
      2017-06-13  Martin Liska  <mliska@suse.cz>
      
      	* gimple-pretty-print.c (dump_probability): Add new argument.
      	(dump_edge_probability): Dump both probability and count.
      	(dump_gimple_label): Likewise.
      	(dump_gimple_bb_header): Likewise.
      2017-06-13  Martin Liska  <mliska@suse.cz>
      
      	* gcc.dg/tree-ssa/builtin-sprintf-2.c: Adjust scanned pattern.
      	* gcc.dg/tree-ssa/dump-2.c: Likewise.
      	* gcc.dg/tree-ssa/vrp101.c: Likewise.
      
      From-SVN: r249147
      Martin Liska committed
    • re PR target/81072 ([avr] Support some XMEGA devices with flash seen in RAM address space.) · da8b0b2b
      	PR target/81072
      	* config/avr/avr-devices.c: Fix indentation.
      	* config/avr/gen-avr-mmcu-specs.c: Dito.
      
      From-SVN: r249146
      Georg-Johann Lay committed
    • tree-vect-loop.c (vect_model_reduction_cost): Do not fail, instead get vector type from stmt_info. · bae6eef0
      2017-06-13  Richard Biener  <rguenther@suse.de>
      
      	* tree-vect-loop.c (vect_model_reduction_cost): Do not fail,
      	instead get vector type from stmt_info.
      	(vectorizable_reduction): Adjust.  Remove dead code.
      
      From-SVN: r249145
      Richard Biener committed
    • re PR sanitizer/81065 (UBSAN: false positive as a result of distribution involving different types) · 4f2c198d
      2017-06-13  Richard Biener  <rguenther@suse.de>
      
      	PR middle-end/81065
      	* fold-const.c (extract_muldiv_1): Remove bogus distribution
      	case of C * (x * C2 + C3).
      	(fold_addr_of_array_ref_difference): Properly fold index difference.
      
      	* c-c++-common/ubsan/pr81065.c: New testcase.
      
      From-SVN: r249144
      Richard Biener committed
    • runtime: clear isSystemGoroutine in goexit · cd34e543
          
          Otherwise it may be set when the g struct is reused via gfput/gfget.
          
          Test is golang.org/x/net/http2 with GOMAXPROCS=12.
          
          Reviewed-on: https://go-review.googlesource.com/45430
      
      From-SVN: r249143
      Ian Lance Taylor committed
    • Daily bump. · 67972c90
      From-SVN: r249142
      GCC Administrator committed
  2. 12 Jun, 2017 12 commits
    • runtime: ignore _Gscan bit when checking status in CgocallDone · a282a875
          
          Also always access the atomicstatus field atomically.
          
          The effect of not checking the _Gscan bit is that if the GC decides to
          scan the stack just as the goroutine is leaving the system call, the
          goroutine might fail to call exitsyscall.  Then then typically causes
          a runtime assertion failure later on.  If we do call exitsyscall as we
          should, it will stall (in casgstatus) until the _Gscan bit is cleared.
          
          No separate test.  I've observed causing sporadic failures running the
          misc/cgo tests, but we don't currently have a way to run those
          routinely for gccgo.  I should fix that.
          
          Reviewed-on: https://go-review.googlesource.com/45392
      
      From-SVN: r249138
      Ian Lance Taylor committed
    • Finish implementing P0426R1 "Constexpr for std::char_traits" for C++17 · b51483f4
      As discussed in PR c++/80265 ("__builtin_{memcmp,memchr,strlen} are
      not usable in constexpr functions"), use __builtin_constant_p to tell
      whether we can defer to a constexpr algorithm.
      
      I used __always_inline__ just to be thorough.  It isn't really really
      necessary as far as I could determine.
      
      Changes like these:
      
      	 if (__n == 0)
      	   return 0;
       -	return wmemcmp(__s1, __s2, __n);
       +	else
       +	  return wmemcmp(__s1, __s2, __n);
      
      are necessary otherwise G++ complains that we're calling a
      non-constexpr function, which looks like a a manifestation of PR67026
      to me.
      
      libstdc++-v3:
      2017-06-12  Pedro Alves  <palves@redhat.com>
      
      	* doc/xml/manual/status_cxx2017.xml: Update C++17 constexpr
      	char_traits status.
      	* doc/html/*: Regenerate.
      
      	* include/bits/char_traits.h (_GLIBCXX_ALWAYS_INLINE): Define if
      	not already defined.
      	(__cpp_lib_constexpr_char_traits): Uncomment.
      	(__constant_string_p, __constant_char_array_p): New.
      	(std::char_traits<char>, std::char_traits<wchar_t>): Add
      	_GLIBCXX17_CONSTEXPR on compare, length and find and use
      	__constant_string_p, __constant_char_array_p and
      	__builtin_constant_p to defer to __gnu_cxx::char_traits at compile
      	time.
      
      	* testsuite/21_strings/char_traits/requirements/
      	constexpr_functions_c++17.cc: Uncomment
      	__cpp_lib_constexpr_char_traits tests.  Uncomment
      	test_compare<char>, test_length<char>, test_find<char>,
      	test_compare<wchar_t>, test_length<wchar_t> and test_find<wchar_t>
      	static_assert tests.
      
      From-SVN: r249137
      Pedro Alves committed
    • stl_tree.h (_Rb_tree_impl()): Restore _Node_allocator default init. · 07cfc2d7
      2017-06-12  François Dumont  <fdumont@gcc.gnu.org>
      
      	* include/bits/stl_tree.h (_Rb_tree_impl()): Restore _Node_allocator
      	default init.
      	* testsuite/util/testsuite_allocator.h
      	(__gnu_test::default_init_allocator<>) New.
      	* testsuite/23_containers/set/allocator/default_init.cc: New.
      	* testsuite/23_containers/map/allocator/default_init.cc: New.
      
      From-SVN: r249136
      François Dumont committed
    • More refinements to fixing sparc's PR target/80968. · 6d1ea02a
      gcc/
      
      	PR target/80968
      	* config/sparc/sparc.md (return expander): Emit frame blockage if
      	function uses alloca.
      
      From-SVN: r249134
      David S. Miller committed
    • compiler: avoid orphaning Bexpressions when processing conversions · 20d5c873
          
          The method Type_conversion_expression::do_get_backend was (in some
          circumstances) creating a Bexpression for the source expression of the
          conversion and then throwing it away before using it. Fix up this
          method to insure that the call to get_backend() on the source
          expression is only made when the result will be used.
          
          Reviewed-on: https://go-review.googlesource.com/45350
      
      From-SVN: r249131
      Ian Lance Taylor committed
    • PR libstdc++/55917 do not handle exceptions in std::thread · 754d67d5
      	PR libstdc++/55917
      	* src/c++11/thread.cc (execute_native_thread_routine): Remove
      	try-block so that exceptions propagate out of the thread and terminate
      	is called by the exception-handling runtime.
      	(execute_native_thread_routine_compat): Likewise.
      	* testsuite/30_threads/thread/cons/terminate.cc: New.
      
      From-SVN: r249130
      Jonathan Wakely committed
    • split-1.c: Require split_stack, don't require freorder. · 196ed8ea
      	* gcc.dg/tree-prof/split-1.c: Require split_stack, don't require
      	freorder.  Update comment to explain test.
      
      From-SVN: r249129
      Ian Lance Taylor committed
    • Fix pessimistic DImode handling in combine.c:make_field_assignment · e701e0b9
      The make_field_assignment code:
      
            src = force_to_mode (src, mode,
      		       GET_MODE_PRECISION (mode) >= HOST_BITS_PER_WIDE_INT
      		       ? HOST_WIDE_INT_M1U
      		       : (HOST_WIDE_INT_1U << len) - 1,
      		       0);
      
      would ignore the field length len for DImode, even though DImode can be
      handled using HWIs.  I think the code should be testing len instead.
      
      2017-06-12  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* combine.c (make_field_assignment): Check len rather than the mode
      	precision when calling force_to_mode.
      
      From-SVN: r249128
      Richard Sandiford committed
    • inline-lrint_1.c: Broaden regexp. · 64ff4f60
      
      2017-06-12  Tamar Christina  <tamar.christina@arm.com>
      
      	* gcc.target/aarch64/inline-lrint_1.c: Broaden regexp.
      	* gcc.target/aarch64/inline-lrint_2.c: Likewise.
      	* gcc.target/aarch64/no-inline-lrint_1.c: Likewise.
      	* gcc.target/aarch64/no-inline-lrint_2.c: Likewise.
      
      From-SVN: r249127
      Tamar Christina committed
    • sdiv_costs_1.c: Require arm_v8_vfp_ok. · 5ed2fdfe
      2017-06-12  Tamar Christina  <tamar.christina@arm.com>
      
      	* gcc.target/arm/sdiv_costs_1.c: Require arm_v8_vfp_ok.
      
      From-SVN: r249125
      Tamar Christina committed
    • Support multilibs and devices that see flash in RAM address range. · 3266ddb3
      gcc/
      	Support multilibs and devices that see flash in RAM address range.
      
      	PR target/81072
      	* config/avr/avr-arch.h (avr_arch_id) <ARCH_AVRXMEGA3>: New enum.
      	(avr_mcu_t) <flash_pm_offset>: New field.
      	(avr_device_specific_features) <AVR_ISA_RCALL>: New enum.
      	* config/avr/avr.h (AVR_SHORT_CALLS): New define.
      	(AVR_HAVE_JMP_CALL): Don't set if AVR_SHORT_CALLS.
      	(AVR_TINY_PM_OFFSET): Remove macro.
      	* config/avr/avr.opt (-mshort-calls): New option.
      	* config/avr/gen-avr-mmcu-specs.c (print_mcu)
      	[*self_spec]: Add / remove -mshort-calls depending on AVR_ISA_RCALL.
      	* config/avr/avr-c.c (avr_cpu_cpp_builtins)
      	<__AVR_SHORT_CALLS__>: Built-in define if AVR_SHORT_CALLS.
      	<__AVR_HAVE_JMP_CALL__>: Use AVR_HAVE_JMP_CALL as condition
      	instead of avr_arch->have_jmp_call.
      	<__AVR_PM_BASE_ADDRESS__>: Built-in define if avr_arch->flash_pm_offset.
      	[AVR_TINY] <__AVR_TINY_PM_BASE_ADDRESS__>: Use
      	avr_arch->flash_pm_offset to define.
      	* config/avr/avr-devices.c (avr_arch_types): Add initializers for
      	new field flash_pm_offset.  Add entry for avrxmega3.
      	(avr_texinfo): Add entry for avrxmega3.
      	* config/avr/avr-mcus.def: Add entries for: avrxmega3,
      	attiny212, attiny214,
      	attiny412, attiny414, attiny416, attiny417,
      	attiny814, attiny816, attiny817,
      	attiny1614, attiny1616, attiny1617,
      	attiny3214, attiny3216, attiny3217.
      	* config/avr/avr.c (avr_assemble_integer)[AVR_TINY]: Use
      	avr_arch->flash_pm_offset instead of AVR_TINY_PM_OFFSET.
      	(avr_print_operand_address) [AVR_TINY]: Same.
      	(avr_asm_init_sections) <readonly_data_section>: Only patch
      	callback if avr_arch->flash_pm_offset = 0.
      	(avr_asm_named_section) <avr_need_copy_data_p>: Skip setting it
      	for rodata if avr_arch->flash_pm_offset != 0.
      	(avr_encode_section_info) [AVR_TINY]: Adjust comment.
      	* config/avr/genmultilib.awk (dir_rcall, opt_rcall): New vars.
      	(opts) [AVR_ISA_RCALL]: Append opt_rcall.
      	(m_options): Append opt_rcall.
      	(m_dirnames): Append dir_rcall.
      	* config/avr/t-multilib: Regenerate.
      	* configure.ac [target=avr]: Check whether avrxmega3 default
      	linker description file works as needed.
      	* configure: Regenerate.
      	* doc/avr-mmcu.texi: Regenerate.
      	* doc/invoke.texi (AVR Options) <-mshort-calls>: Document it.
      	<__AVR_ARCH__>: Document avrxmega3 and 103.
      	<__AVR_HAVE_JMP_CALL__>: Adjust documentation.
      	<__AVR_SHORT_CALLS__>: Document it.
      	<__AVR_PM_BASE_ADDRESS__>: Document it.
      	* doc/extend.texi (AVR Options) <-mshort-calls>: Document it.
      	(AVR Variable Attributes) <progmem>: Document this is
      	not needed for avrxmega3.
      	(AVR Named Address Spaces) <__flash>: Dito.
      
      From-SVN: r249124
      Georg-Johann Lay committed