1. 28 Nov, 2018 7 commits
  2. 27 Nov, 2018 33 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
    • PR preprocessor/83173: Additional check before decrementing highest_location · 56c79e7f
      2018-11-27  Mike Gulick  <mgulick@mathworks.com>
      
      	PR preprocessor/83173
      	* files.c (_cpp_stack_include): Check if
      	line_table->highest_location is past current line before
      	decrementing.
      
      From-SVN: r266516
      Mike Gulick committed
    • re PR target/88188 (ICE in print_operand, at config/rs6000/rs6000.c) · f316c3e5
      	PR target/88188
      	* config/rs6000/rs6000.c (print_operand) <case 'D'>: Use
      	output_operand_lossage instead of gcc_assert.
      	<case 't'>: Likewise.
      	<case 'z'>: Likewise.
      	<case 'V'>: Use output_operand_lossage instead of gcc_unreachable.
      
      	* gcc.target/powerpc/pr88188.c: New test.
      
      From-SVN: r266515
      Jakub Jelinek committed
    • riscv (riscv_block_mvoe_straight): Use RETURN_BEGIN in call to move_by_pieces. · cece89d0
      	* config/riscv/riscv (riscv_block_mvoe_straight): Use RETURN_BEGIN
      	in call to move_by_pieces.
      
      	* config/sh/sh-mem.c (expand_block_move): Use RETURN_BEGIN in call
      	to move_by_pieces.
      
      From-SVN: r266514
      Jeff Law committed
    • lm32.c (lm32_block_move_inline): Use RETURN_BEGIN in call to move_by_pieces. · 5605f2e1
      	* config/lm32/lm32.c (lm32_block_move_inline): Use RETURN_BEGIN in
      	call to move_by_pieces.
      
      From-SVN: r266513
      Jeff Law committed
    • mips.c (mips_block_move_straight): Use RETURN_BEGIN in call to move_by_pieces. · 5930367d
      	* config/mips/mips.c (mips_block_move_straight): Use RETURN_BEGIN
      	in call to move_by_pieces.
      
      2018-11-27  Tamar Christina  <tamar.christina@arm.com>
      
      From-SVN: r266512
      Jeff Law committed
    • microblaze.c (microblaze_block_move_straight): Use RETURN_BEGIN in call to move_by_pieces. · 441fd442
      	* config/microblaze/microblaze.c (microblaze_block_move_straight): Use
      	RETURN_BEGIN in call to move_by_pieces.
      	(microblaze_expand_block_move): Likewise.
      
      From-SVN: r266511
      Jeff Law committed
    • Document the xorsign optab. · cb369975
      2018-11-27  Tamar Christina  <tamar.christina@arm.com>
      
      	* doc/md.texi (xorsign): Document it.
      
      From-SVN: r266510
      Tamar Christina committed
    • Support simd function declarations via a pre-include. · facf0354
      2018-11-27  Martin Liska  <mliska@suse.cz>
      
      	* config/gnu-user.h (TARGET_F951_OPTIONS): New.
      	* gcc.c (find_fortran_preinclude_file): New function
      	to handle Fortran pre-include.
      2018-11-27  Martin Liska  <mliska@suse.cz>
      
      	* decl.c (gfc_match_gcc_builtin): New function.
      	* gfortran.h (struct vect_builtin_tuple): New.
      	(gfc_adjust_builtins): Likewise.
      	* lang-specs.h (TARGET_F951_OPTIONS): New.
      	(F951_OPTIONS): Use it.
      	* lang.opt: Add new option -fpre-include.
      	* match.h (gfc_match_gcc_builtin): Declare new function.
      	* parse.c (decode_gcc_attribute): Handle builtin.
      	(parse_progunit): Call gfc_adjust_builtins.
      	* scanner.c (gfc_new_file): Load pre-included header file
      	when provided.
      	* trans-intrinsic.c (add_simd_flag_for_built_in): New.
      	(gfc_adjust_builtins): Likewise.
      2018-11-27  Martin Liska  <mliska@suse.cz>
      
      	* gfortran.dg/simd-builtins-1.f90: New test.
      	* gfortran.dg/simd-builtins-1.h: New test.
      	* gfortran.dg/simd-builtins-2.f90: New test.
      	* gfortran.dg/simd-builtins-3.f90: New test.
      	* gfortran.dg/simd-builtins-3.h: New test.
      	* gfortran.dg/simd-builtins-4.f: New test.
      	* gfortran.dg/simd-builtins-4.h: New test.
      	* gfortran.dg/simd-builtins-5.f: New test.
      	* gfortran.dg/simd-builtins-6.f90: New test.
      
      From-SVN: r266509
      Martin Liska committed
    • Come up with memop_ret enum instead of int endp for memory operations. · 2ff5ffb6
      2018-11-27  Martin Liska  <mliska@suse.cz>
      
      	* asan.c (asan_emit_stack_protection): Use new enum values
      	instead of int constants.
      	* builtins.c (expand_builtin_memory_copy_args): Replace int
      	type with memop_ret enum type.
      	(expand_builtin_mempcpy_args): Likewise.
      	(expand_builtin_memcpy): Use new enum values
      	instead of int constants. Likewise.
      	(expand_builtin_mempcpy): Likewise.
      	(expand_movstr): Likewise.
      	(expand_builtin_strcpy_args): Likewise.
      	(expand_builtin_stpcpy_1): Likewise.
      	(expand_builtin_strncpy): Likewise.
      	(expand_builtin_memset_args): Likewise.
      	* expr.c (move_by_pieces_d::finish_endp): Rename to ...
      	(move_by_pieces_d::finish_retmode): ... this.
      	(move_by_pieces): Change last argument type to memop_ret.
      	(store_by_pieces): Use new enum values
      	instead of int constants.
      	(emit_block_move_hints): Likewise.
      	(emit_push_insn): Likewise.
      	(store_expr): Likewise.
      	* expr.h (store_by_pieces): Change int to newly added enum
      	type.
      	* rtl.h (enum memop_ret): Define.
      	(move_by_pieces): Use the enum type.
      
      From-SVN: r266508
      Martin Liska committed
    • c-ada-spec.c: Include stringpool.h. · da193a27
      	* c-ada-spec.c: Include stringpool.h.
      	(has_static_fields): Return false for incomplete types.
      	(is_tagged_type): Likewise.
      	(has_nontrivial_methods): Likewise.
      	(dump_ada_node) <INTEGER_TYPE>: Deal specifically with __int128.
      	(struct overloaded_name_hash): New structure.
      	(struct overloaded_name_hasher): Likewise.
      	(overloaded_names): New global variable.
      	(init_overloaded_names): New static function.
      	(overloaded_name_p): New predicate.
      	(dump_ada_declaration) <TYPE_DECL>: Tidy up and set TREE_VISITED
      	on the TYPE_STUB_DECL of the original type of a typedef, if any.
      	<FUNCTION_DECL>: Bail out for an unsupported overloaded name.
      	Remove always-true condition and dump forward types.
      	(dump_ada_specs): Delete overloaded_names.
      
      From-SVN: r266506
      Eric Botcazou committed
    • [libbacktrace] Don't point to released memory in backtrace_vector_release · 6d760a01
      When backtrace_vector_release is called with vec.size == 0, it releases the
      memory pointed at by vec.base.
      
      Set vec.base set to NULL if vec.size == 0 to ensure we don't point to released
      memory.
      
      Bootstrapped and reg-tested on x86_64.
      
      2018-11-27  Tom de Vries  <tdevries@suse.de>
      
      	* mmap.c (backtrace_vector_release): Same.
      	* unittest.c (test1): Add check.
      
      From-SVN: r266505
      Tom de Vries committed
    • [libbacktrace] Avoid realloc with size == 0 in backtrace_vector_release · 0c155f24
      As of C17, realloc with size 0 is marked as an obsolescent feature.
      
      Fix this in backtrace_vector_release by using free instead.
      
      Bootstrapped and reg-tested on x86_64.
      
      2018-11-27  Tom de Vries  <tdevries@suse.de>
      
      	* alloc.c (backtrace_vector_release): Handle vec->size == 0 using free
      	instead of realloc.
      	* Makefile.am (check_PROGRAMS): Add unittest.
      	* Makefile.in: Regenerate.
      	* unittest.c: New file.
      
      From-SVN: r266504
      Tom de Vries committed