1. 28 Nov, 2018 19 commits
    • Implement uniform container erasure for C++20. · 188588e4
      2018-11-28  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement uniform container erasure for C++20.
      	* include/Makefile.am: Move erase_if.h.
      	* include/Makefile.in: Move erase_if.h.
      	* include/experimental/bits/erase_if.h: Move ...
      	* include/bits/erase_if.h: ... here.
      	* include/experimental/map: Move erase_if.h.
      	* include/experimental/set: Move erase_if.h.
      	* include/experimental/unordered_map: Move erase_if.h.
      	* include/experimental/unordered_set: Move erase_if.h.
      	* include/std/deque (erase_if, erase): New functions.
      	* include/std/forward_list: Ditto.
      	* include/std/list: Ditto.
      	* include/std/map: Ditto.
      	* include/std/set: Ditto.
      	* include/std/string: Ditto.
      	* include/std/unordered_map: Ditto.
      	* include/std/unordered_set: Ditto.
      	* include/std/vector: Ditto.
      	* testsuite/21_strings/basic_string/erasure.cc: New test.
      	* testsuite/23_containers/deque/erasure.cc: New test.
      	* testsuite/23_containers/forward_list/erasure.cc: New test.
      	* testsuite/23_containers/list/erasure.cc: New test.
      	* testsuite/23_containers/map/erasure.cc: New test.
      	* testsuite/23_containers/set/erasure.cc: New test.
      	* testsuite/23_containers/unordered_map/erasure.cc: New test.
      	* testsuite/23_containers/unordered_set/erasure.cc: New test.
      	* testsuite/23_containers/vector/erasure.cc: New test.
      
      From-SVN: r266567
      Edward Smith-Rowland committed
    • Apply resolution for LWG DR 3096 · bd6ccc29
      Add fix for "path::lexically_relative is confused by trailing slashes".
      
      	* doc/xml/manual/intro.xml: Document LWG 3096 change.
      	* src/filesystem/std-path.cc (path::lexically_relative(const path&)):
      	Treat a final empty element equivalently to a final dot element.
      	* testsuite/27_io/filesystem/path/generation/relative.cc: Add checks
      	for the examples in the DR.
      
      From-SVN: r266566
      Jonathan Wakely committed
    • PR libstdc++/83306 make filesystem_error no-throw copyable · 24d9b090
      The class API provides no way to modify the members, so we can share
      them between copies of the same object. Copying becomes a simple
      reference count update, which doesn't throw.
      
      Also adjust the what() string to allow distinguishing between an empty
      path passed to the constructor, and no path.
      
      	PR libstdc++/83306
      	* include/bits/fs_path.h (filesystem_error): Move data members into
      	pimpl class owned by shared_ptr. Remove inline definitions of member
      	functions.
      	* src/filesystem/std-path.cc (filesystem_error::_Impl): Define.
      	(filesystem_error): Define member functions.
      	* testsuite/27_io/filesystem/filesystem_error/cons.cc: New test.
      	* testsuite/27_io/filesystem/filesystem_error/copy.cc: New test.
      
      From-SVN: r266565
      Jonathan Wakely committed
    • Changed email ID to existing one. · 2b4be500
      From-SVN: r266563
      Sameera Deshpande committed
    • [libbacktrace] Fix segfault upon allocation failure · 18c742b5
      If the allocation of abbrevs->abbrevs in read_abbrevs fails, then
      abbrevs->num_abbrevs remains nonzero, and consequently free_abbrevs will
      segfault when accessing abbrevs->abbrevs.
      
      Fix this by setting abbrevs->num_abbrevs only after abbrevs->abbrevs
      allocation has succeeded.
      
      Bootstrapped and reg-tested on x86_64.
      
      2018-11-28  Tom de Vries  <tdevries@suse.de>
      
      	* dwarf.c (read_abbrevs): Fix handling of abbrevs->abbrevs allocation
      	failure.
      
      From-SVN: r266562
      Tom de Vries committed
    • re PR tree-optimization/88223 (Wrong code for intrinsic memmove) · 2bf8ae1b
      2018-11-28  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/88223
      	* tree-ssa-sccvn.c (vn_reference_lookup_3): When skipping
      	over a stored-same value may-alias store make sure to consider
      	partial overlaps which are valid when TBAA reasonings do not
      	apply and byte-granular overlaps are possible at all.
      
      	* gcc.dg/torture/pr88223.c: New testcase.
      
      From-SVN: r266560
      Richard Biener committed
    • Update C++17 library status docs · 5916922e
      	* doc/xml/manual/status_cxx2017.xml: Update C++17 status.
      	* doc/html/*: Regenerate.
      
      From-SVN: r266559
      Jonathan Wakely committed
    • re PR tree-optimization/88217 (Compile time and memory hog w/ -O2 -fstrict-enums… · a257ad46
      re PR tree-optimization/88217 (Compile time and memory hog w/ -O2 -fstrict-enums -fno-tree-forwprop -fno-tree-fre)
      
      2018-11-28  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/88217
      	* vr-values.c (vr_values::extract_range_from_phi_node): Make
      	sure to handle results > +INF and < -INF correctly when
      	trying to drop down to +INF - 1 or -INF + 1.
      
      	* g++.dg/pr88217.C: New testcase.
      
      From-SVN: r266557
      Richard Biener committed
    • [RS6000] Bootstrap failure compiling xcoffout.c · 20f65b56
      git commit 41f70262f (svn rev 264868) exposed a signed/unsigned
      comparison.  Fixed by matching the type of the local var to that of
      the tree field.
      
      	* xcoffout.c (do_block): Signed/unsigned warning fix.
      
      From-SVN: r266555
      Alan Modra committed
    • re PR testsuite/85368 (phi-opt-11 test fails on IBM Z) · dc7ca394
      	PR testsuite/85368
      	* gcc.dg/tree-ssa/phi-opt-11.c: For branch_cost targets, expect 0 ifs
      	rather than 0 or 2 depending on logical_op_short_circuit.
      
      From-SVN: r266552
      Jakub Jelinek committed
    • re PR tree-optimization/79351 (Invalid tree PRE optimization around compound literal) · aa2e903e
      2018-11-28  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/79351
      	* tree-ssa-sccvn.c (vn_reference_lookup_3): For assignments from
      	empty CONSTRUCTORs ensure the store is at a constant position.
      
      	* gcc.dg/torture/pr79351.c: New testcase.
      
      From-SVN: r266551
      Richard Biener committed
    • re PR fortran/88229 (ICE tree check: expected integer_cst, have nop_expr in… · 80e6a1ed
      re PR fortran/88229 (ICE tree check: expected integer_cst, have nop_expr in get_len, at tree.h:5608)
      
      2018-11-28  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/88229
      	* tree-ssa.c (non_rewritable_mem_ref_base): Check DECL_SIZE_UNIT
      	is an INTEGER_CST before accessing it so.
      
      From-SVN: r266550
      Richard Biener committed
    • [PATCH][GCC][DOC] Remove obsolete arm and aarch64 CPU names from invoke.texi · dcc4956c
      gcc/ChangeLog:
      
      2018-11-28  Sam Tebbs  <sam.tebbs@arm.com>
      
      	* doc/invoke.texi (-mtune=): Remove obsolete CPU names.
      
      From-SVN: r266549
      Sam Tebbs committed
    • re PR target/88189 (ix86_expand_sse_movcc and blend for scalars) · d132e873
      	PR target/88189
      	* config/i386/i386.c (ix86_expand_sse_movcc): Handle DFmode and
      	SFmode using sse4_1_blendvs[sd] with TARGET_SSE4_1.  Formatting fixes.
      	* config/i386/sse.md (sse4_1_blendv<ssemodesuffix>): New pattern.
      
      	* gcc.target/i386/sse4_1-pr88189-1.c: New test.
      	* gcc.target/i386/sse4_1-pr88189-2.c: New test.
      	* gcc.target/i386/avx-pr88189-1.c: New test.
      	* gcc.target/i386/avx-pr88189-2.c: New test.
      
      From-SVN: r266548
      Jakub Jelinek committed
    • re PR c++/87476 (char-array initialized from wide-string) · 62574f12
      	PR c++/87476
      	* typeck2.c (digest_init_r): Re-add handing of signed/unsigned char
      	strings and add it to the initialization of wide array from non-wide
      	string diagnostics too.
      
      	* g++.dg/cpp0x/pr87476-1.C: New test.
      	* g++.dg/cpp0x/pr87476-2.C: New test.
      
      From-SVN: r266547
      Jakub Jelinek committed
    • re PR sanitizer/88215 (UBSAN: Internal compiler error with attribute(unused)) · ace83db0
      	PR c++/88215
      	* c-ubsan.c: Include langhooks.h.
      	(ubsan_instrument_division): Change gcc_assert that main variants
      	of op0 and op1 types are equal to gcc_checking_assert that the
      	main variants are compatible types.
      
      	* c-c++-common/ubsan/pr88215.c: New test.
      
      From-SVN: r266546
      Jakub Jelinek committed
    • re PR tree-optimization/88182 (ICE in vectorizable_reduction, at tree-vect-loop.c:6465) · fc60283c
      2018-10-19  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/88182
      	* g++.dg/gomp/pr88182.C: Move from libgomp and use -fopenmp-simd.
      
      	* testsuite/libgomp.c++/pr88182.C: Move to g++.dg/gomp.
      
      From-SVN: r266545
      Richard Biener committed
    • Add myself to MAINTAINERS · f9b4801c
      2018-11-28  Johannes Pfau  <johannespfau@gmail.com>
      
      	* MAINTAINERS (Write After Approval): Add myself.
      
      From-SVN: r266544
      Johannes Pfau committed
    • Daily bump. · 091d77df
      From-SVN: r266540
      GCC Administrator committed
  2. 27 Nov, 2018 21 commits
    • re PR c++/88187 (ICE on (invalid) C++ code when compiled with -std=c++17: Segmentation fault) · d1a27eae
      	PR c++/88187
      	* decl.c (grokdeclarator): Don't diagnose deduction guide errors
      	if !funcdecl_p.
      
      	* g++.dg/other/pr88187.C: New test.
      
      From-SVN: r266537
      Jakub Jelinek committed
    • compiler: tweaks for importing inline function bodies · 08e10724
          
          Track whether we've seen an error when importing a function; we will
          use error tracking to avoid knock-on errors.
          
          Stop importing identifiers at a ')'.
          
          Provide a way to adjust the indentation level while importing.
          
          Reviewed-on: https://go-review.googlesource.com/c/150072
      
      From-SVN: r266536
      Ian Lance Taylor committed
    • Clean up temporary files created by std::filesystem testsuite · c718ff41
      	* testsuite/27_io/filesystem/operations/canonical.cc: Remove
      	directory created by test.
      	* testsuite/27_io/filesystem/operations/symlink_status.cc: Remove
      	symlink created by test.
      
      From-SVN: r266535
      Jonathan Wakely committed
    • compiler: record final type for numeric expressions · 9b4e458b
          
          Inlinable function bodies are generated after the determine_types pass,
          so we know the type for all constants.  Rather than try to determine
          it again when inlining, record the type in the export data, using a
          $convert expression.  Reduce the number of explicit $convert
          expressions by recording a type context with the expected type in
          cases where that type is known.
          
          Reviewed-on: https://go-review.googlesource.com/c/150071
      
      From-SVN: r266534
      Ian Lance Taylor committed
    • PR libstdc++/67843 set shared_ptr lock policy at build-time · da29d2a3
      This resolves a longstanding issue where the lock policy for shared_ptr
      reference counting depends on compilation options when the header is
      included, so that different -march options can cause ABI changes. For
      example, objects compiled with -march=armv7 will use atomics to
      synchronize reference counts, and objects compiled with -march=armv5t
      will use a mutex. That means the shared_ptr control block will have a
      different layout in different objects, causing ODR violations and
      undefined behaviour. This was the root cause of PR libstdc++/42734 as
      well as PR libstdc++/67843.
      
      The solution is to decide on the lock policy at build time, when
      libstdc++ is configured. The configure script checks for the
      availability of the necessary atomic built-ins for the target and fixes
      that choice permanently. Different -march flags used to compile user
      code will not cause changes to the lock policy. This results in an ABI
      change for certain compilations, but only where there was already an ABI
      incompatibility between the libstdc++.so library and objects built with
      an incompatible -march option. In general, this means a more stable ABI
      that isn't silently altered when -march flags make addition atomic ops
      available.
      
      To force a target to use "atomic" or "mutex" the new configure option
      --with-libstdcxx-lock-policy can be used.
      
      In order to turn ODR violations into linker errors, the uses of
      shared_ptr in filesystem directory iterators have been replaced
      with __shared_ptr, and explicit instantiations are declared. This
      ensures that object files using those types cannot link to libstdc++
      libs unless they use the same lock policy.
      
      	PR libstdc++/67843
      	* acinclude.m4 (GLIBCXX_ENABLE_LOCK_POLICY): Add new macro
      	that defines _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY.
      	* config.h.in: Regenerate.
      	* configure: Regenerate.
      	* configure.ac: Use GLIBCXX_ENABLE_LOCK_POLICY.
      	* doc/xml/manual/configure.xml: Document new configure option.
      	* include/bits/fs_dir.h (directory_iterator): Use __shared_ptr
      	instead of shared_ptr.
      	(recursive_directory_iterator): Likewise.
      	(__shared_ptr<_Dir>): Add explicit instantiation declaration.
      	(__shared_ptr<recursive_directory_iterator::_Dir_stack>): Likewise.
      	* include/bits/shared_ptr_base.h (__allocate_shared, __make_shared):
      	Add default template argument for _Lock_policy template parameter.
      	* include/ext/concurrence.h (__default_lock_policy): Check macro
      	_GLIBCXX_HAVE_ATOMIC_LOCK_POLICY instead of checking if the current
      	target supports the builtins for compare-and-swap.
      	* src/filesystem/std-dir.cc (__shared_ptr<_Dir>): Add explicit
      	instantiation definition.
      	(__shared_ptr<recursive_directory_iterator::_Dir_stack>): Likewise.
      	(directory_iterator, recursive_directory_iterator): Use __make_shared
      	instead of make_shared.
      
      From-SVN: r266533
      Jonathan Wakely committed
    • compiler: add result parameter names for inlinable functions · b07b0671
          
          An inlinable function body may need to refer to result parameters, so
          each result parameter needs a name.  We already give them all names in
          start_function (via create_result_variables).  Change the export data
          so that for an inlinable function we use those names for the function
          declaration's result parameters.
          
          Reviewed-on: https://go-review.googlesource.com/c/150070
      
      From-SVN: r266532
      Ian Lance Taylor committed
    • compiler: finalize types parsed for inline functions · 34ea9597
          
          When we inline functions, we may parse types that we have not seen
          before inlining.  Inlining runs after the finalize_methods pass, so
          those types will not be finalized, meaning that we don't have an
          accurate list of which methods they support.  Explicitly finalize them
          when we parse them.
          
          Reviewed-on: https://go-review.googlesource.com/c/150068
      
      From-SVN: r266530
      Ian Lance Taylor committed
    • compiler: add '$' to names in expression export data · 80d7d30d
          
          For inlined function bodies we're going to need to refer to variables,
          so change the existing export data to add a '$' to names that look
          like identifiers: true, false, nil, convert.
          
          While we're here drop an unnecessary space character after operators.
          
          Reviewed-on: https://go-review.googlesource.com/c/150067
      
      From-SVN: r266529
      Ian Lance Taylor committed
    • re PR libstdc++/88199 (memory leak on unordered container move assignment) · 01021139
      2018-11-27  François Dumont  <fdumont@gcc.gnu.org>
      
      	PR libstdc++/88199
      	* include/bits/hashtable.h (_Hashtable<>::_M_assign_elements): New.
      	(_Hashtable<>::operator=(const _Hashtable&)): Use latter.
      	(_Hashtable<>::_M_move_assign(_Hashtable&&, false_type)): Likewise.
      	* testsuite/23_containers/unordered_set/allocator/move_assign.cc
      	(test03): New.
      
      From-SVN: r266528
      François Dumont committed
    • re PR c++/88181 (ICE: verify_type failed (error: type variant differs by TYPE_PACKED)) · d15a7969
      	PR c++/88181
      	* class.c (fixup_attribute_variants): Also propagate TYPE_PACKED
      	to variants.
      
      	* g++.dg/debug/pr88181.C: New test.
      
      From-SVN: r266527
      Jakub Jelinek committed
    • compiler: change expression importing to use Import_expression · fc74d562
          
          Change expression importing to use a new abstract interface class
          Import_expression, so that we can more easily import expressions from
          inlinable function bodies.  This is a refactoring with no affect on
          compiler behavior.
          
          Reviewed-on: https://go-review.googlesource.com/c/150065
      
      From-SVN: r266526
      Ian Lance Taylor committed
    • compiler: pass a Location to import_expression · 59357059
          
          Separate the Location that import_expression uses when creating a new
          Expression from the Location used to report an error.  This is a step
          toward importing expressions for inlined functions.  This is a pure
          refactoring that does not affect compiler behavior.
          
          Reviewed-on: https://go-review.googlesource.com/c/150064
      
      From-SVN: r266525
      Ian Lance Taylor committed
    • re PR middle-end/87157 (gcc.dg/vect/costmodel/ppc/costmodel-vect-33.c fails starting with r263981) · 98f33efc
      	PR middle-end/87157
      	* gcc.dg/vect/costmodel/ppc/costmodel-vect-33.c (main1): Add noipa
      	attribute.
      
      From-SVN: r266524
      Jakub Jelinek committed
    • compiler: change Expression export to use Export_function_body · 336785ef
          
          In preparation for writing expressions to inline function bodies,
          change the existing expression export code to use Export_function_body
          rather than Export.  Adjust existing expression exporters accordingly.
          
          This is a refactoring that doesn't affect compiler output.
          
          Reviewed-on: https://go-review.googlesource.com/c/150063
      
      From-SVN: r266523
      Ian Lance Taylor committed
    • PR 87756 - missing unterminated argument warning using address of a constant character · ba28599c
      PR 87756 - missing unterminated argument warning using address of a constant character
      PR 88211 - missing warning on printf %ls and unterminated wide member array
      PR 88226 - missing warning on fprintf, fputs, and puts with an unterminated array
      
      gcc/ChangeLog:
      
      	* gcc.dg/tree-ssa/builtin-fprintf-warn-1.c: Update/remove xfails.
      	* gcc.dg/tree-ssa/builtin-printf-warn-1.c: Same.
      	* gcc.dg/tree-ssa/user-printf-warn-1.c: Same.
      
      From-SVN: r266522
      Martin Sebor committed
    • gcov: do not ICE on NULL string in JSON export. · 0ffa4bc2
      2018-11-27  Martin Liska  <mliska@suse.cz>
      
      	* gcov.c (generate_results): Append current_working_directory
      	only when exists.
      
      From-SVN: r266521
      Martin Liska committed
    • PR preprocessor/83173: Enhance -fdump-internal-locations output · bc65bad2
      gcc/ChangeLog:
      2018-11-27  Mike Gulick  <mgulick@mathworks.com>
      
      	PR preprocessor/83173
      	* input.c (dump_location_info): Dump reason and included_from
      	fields from line_map_ordinary struct.  Fix indentation when
      	location > 5 digits.
      	* diagnostic-show-locus.c (num_digits, num_digits): Move to
      	diagnostic.c to allow it to be utilized by input.c.
      	* diagnostic.c (num_digits, selftest::test_num_digits): Moved
      	here.
      	(selftest::diagnostic_c_tests): Run selftest::test_num_digits.
      	* diagnostic.h (num_digits): Add extern definition.
      
      libcpp/ChangeLog:
      2018-11-27  Mike Gulick  <mgulick@mathworks.com>
      
      	PR preprocessor/83173
      	* location-example.txt: Update example -fdump-internal-locations
      	output.
      
      From-SVN: r266520
      Mike Gulick committed
    • MIPS: Add `-mfix-r5900' option for the R5900 short loop erratum · fb51a3a8
      The short loop bug under certain conditions causes loops to
      execute only once or twice, due to a hardware bug in the R5900 chip.
      
      `-march=r5900' already enables the R5900 short loop workaround.
      However, the R5900 ISA and most other MIPS ISAs are mutually
      exclusive since R5900-specific instructions are generated as well.
      
      The `-mfix-r5900' option can be used in combination with e.g.
      `-mips2' or `-mips3' to generate generic MIPS binaries that also
      work with the R5900 target.  The workaround is implemented by GAS
      rather than by GCC.
      
      The following small `shortloop.c' file has been used as a test
      with GCC 8.2.0:
      
      void shortloop(void)
      {
          __asm__ __volatile__ (
      	"	li $3, 300\n"
      	"loop:\n"
      	"	addi $3, -1\n"
      	"	addi $4, -1\n"
      	"	bne $3, $0, loop\n"
      	"	li $4, 3\n"
      	::);
      }
      
      The following six combinations have been tested:
      
      % mipsr5900el-unknown-linux-gnu-gcc -O1 -c shortloop.c
      % mipsr5900el-unknown-linux-gnu-gcc -O1 -c shortloop.c -mfix-r5900
      % mipsr5900el-unknown-linux-gnu-gcc -O1 -c shortloop.c -mno-fix-r5900
      
      % mipsr4000el-unknown-linux-gnu-gcc -O1 -c shortloop.c
      % mipsr4000el-unknown-linux-gnu-gcc -O1 -c shortloop.c -mfix-r5900
      % mipsr4000el-unknown-linux-gnu-gcc -O1 -c shortloop.c -mno-fix-r5900
      
      The R5900 short loop erratum is corrected in exactly three cases:
      
      1. for the target `mipsr5900el' by default;
      
      2. for the target `mipsr5900el' with `-mfix-r5900';
      
      3. for any other MIPS target (e.g. `mipsr4000el') with `-mfix-r5900'.
      
      In all other cases the correction is not made.
      
      2018-11-27  Fredrik Noring  <noring@nocrew.org>
      
      	gcc/
      	* config/mips/mips.c (mips_reorg_process_insns)
      	(mips_option_override): Handle `-mfix-r5900'.
      	* config/mips/mips.h (ASM_SPEC): Add `mfix-r5900' and
      	`mno-fix-r5900'.
      	* config/mips/mips.opt (mfix-r5900): New option.
      	* doc/invoke.texi: Document the `r5900' processor name, and
      	`-mfix-r5900' and `-mno-fix-r5900' options.
      
      From-SVN: r266519
      Fredrik Noring committed
    • PR preprocessor/83173: New test · 4d8da4df
      2018-11-27  Mike Gulick  <mgulick@mathworks.com>
      
      	PR preprocessor/83173
      	* gcc.dg/plugin/location-overflow-test-pr83173.c: New test.
      	* gcc.dg/plugin/location-overflow-test-pr83173.h: Header for
      	pr83173.c.
      	* gcc.dg/plugin/location-overflow-test-pr83173-1.h: Header for
      	pr83173.c.
      	* gcc.dg/plugin/location-overflow-test-pr83173-2.h: Header for
      	pr83173.c.
      	* gcc.dg/plugin/location_overflow_plugin.c: Use PLUGIN_PRAGMAS
      	instead of PLUGIN_START_UNIT.
      	* gcc.dg/plugin/plugin.exp: Enable new test.
      
      From-SVN: r266518
      Mike Gulick committed
    • compiler: import inlinable functions from package data · 862ec763
          
          Start reading the export data generated by the last change in this
          series.  At this point we will inline direct calls to empty functions
          and methods defined in different packages.
          
          Reviewed-on: https://go-review.googlesource.com/c/150062
      
      From-SVN: r266517
      Ian Lance Taylor committed