1. 27 Nov, 2018 39 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
    • [RS6000] libgcc cfi · 1ea7ea18
      There are a few places in libgcc assembly where we don't emit call
      frame information for functions, potentially breaking unwinding from
      asynchronous signal handlers.  This patch fixes them.  Although I
      patch tramp.S there is no attempt made to provide CFI for the actual
      trampoline on the stack.  Doing that would require generating CFI at
      run time and both registering and deregistering it, which is probably
      not worth doing since it would significantly slow down the call.
      
      	* config/rs6000/morestack.S (__stack_split_initialize),
      	(__morestack_get_guard, __morestack_set_guard),
      	(__morestack_make_guard): Provide CFI covering these functions.
      	* config/rs6000/tramp.S (__trampoline_setup): Likewise.
      
      From-SVN: r266503
      Alan Modra committed
    • [RS6000] PowerPC -mcpu=native support · 28a09576
      The -mcpu=native support has bit-rotted a little, in particular the
      fallback when the native cpu couldn't be determined.  This patch fixes
      the bit-rot and reorganizes ASM_CPU_SPEC so that it should be a little
      easier to keep the -mcpu=native data up to date.
      
      The patch also changes the fix for PR63177 (-mpower9-vector being
      passed by the user when the default is -mpower8) to also apply when
      -mcpu=powerpc64le and -mcpu=native is given.  I'll note that the hack
      for PR63177 should probably be extended to lots of other options, if
      we're going to continue supporting all those sub-architecture options
      (-mpower9-vector, -mpower8-vector, -mcrypto, -mdirect-move, -mhtm,
      -mvsx and others) in the positive sense.  I think those should have
      only been supported in their -mno- variants..
      
      	* config/rs6000/aix71.h (ASM_SPEC): Don't select default -maix64
      	cpu here.
      	(ASM_CPU_SPEC): Do so here.  Rewrite using if .. else if .. specs
      	form.  Error on missing -mcpu case.
      	* config/rs6000/driver-rs6000.c (asm_names <_AIX>): Update NULL case.
      	(asm_names <!_AIX>): Add missing cpus.  Update NULL case.  Apply
      	PR63177 fix for -mcpu=power8 and -mcpu=powerpc64le.
      	* config/rs6000/rs6000.h (ASM_CPU_SPEC): Rewrite using if ..
      	else if .. specs form.  Error on missing -mcpu case.  Don't output
      	duplicate -maltivec.  Apply PR63177 fix for -mcpu=powerpc64le.
      
      From-SVN: r266502
      Alan Modra committed
    • Fix missing dump_impl_location_t values, using a new dump_metadata_t · 3da39f52
      The dump_* API attempts to capture emission location metadata for the
      various dump messages, but looking in -fsave-optimization-record shows
      that many dump messages are lacking useful impl_location values, instead
      having this location within dumpfile.c:
      
                  "impl_location": {
                      "file": "../../src/gcc/dumpfile.c",
                      "function": "ensure_pending_optinfo",
                      "line": 1169
                  },
      
      The problem is that the auto-capturing of dump_impl_location_t is tied to
      dump_location_t, and this is tied to the dump_*_loc calls.  If a message
      comes from a dump_* call without a "_loc" suffix (e.g. dump_printf), the
      current code synthesizes the dump_location_t within
      dump_context::ensure_pending_optinfo, and thus saves the useless
      impl_location seen above.
      
      This patch fixes things by changing the dump_* API so that, rather than
      taking a dump_flags_t, they take a new class dump_metadata_t, which is
      constructed from a dump_flags_t, but captures the emission location.
      
      Hence e.g.:
      
        dump_printf (MSG_NOTE, "some message\n");
      
      implicitly builds a dump_metadata_t wrapping the MSG_NOTE and the
      emission location.  If there are several dump_printf calls without
      a dump_*_loc call, the emission location within the optinfo is that
      of the first dump call within it.
      
      The patch updates selftest::test_capture_of_dump_calls to verify
      that the impl location of various dump_* calls is captured.  I also
      verified things manually.
      
      gcc/ChangeLog:
      	* dump-context.h (dump_context::dump_loc): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.  Convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_context::dump_loc_immediate): Convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_context::dump_gimple_stmt): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.
      	(dump_context::void dump_gimple_stmt_loc): Likewise; convert
      	2nd param from const dump_location_t & to
      	const dump_user_location_t &.
      	(dump_context::dump_gimple_expr): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.
      	(dump_context::dump_gimple_expr_loc): Likewise; convert
      	2nd param from const dump_location_t & to
      	const dump_user_location_t &.
      	(dump_context::dump_generic_expr): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.
      	(dump_context::dump_generic_expr_loc): Likewise; convert
      	2nd param from const dump_location_t & to
      	const dump_user_location_t &.
      	(dump_context::dump_printf_va): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.
      	(dump_context::dump_printf_loc_va): Likewise; convert
      	2nd param from const dump_location_t & to
      	const dump_user_location_t &.
      	(dump_context::dump_dec): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.
      	(dump_context::dump_symtab_node): Likewise.
      	(dump_context::begin_scope): Split out 2nd param into
      	user and impl locations.
      	(dump_context::ensure_pending_optinfo): Add metadata param.
      	(dump_context::begin_next_optinfo): Replace dump_location_t param
      	with metadata and user location.
      	* dumpfile.c (dump_context::dump_loc): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.  Convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_context::dump_loc_immediate): Convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_context::dump_gimple_stmt): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.
      	(dump_context::void dump_gimple_stmt_loc): Likewise; convert
      	2nd param from const dump_location_t & to
      	const dump_user_location_t &.
      	(dump_context::dump_gimple_expr): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.
      	(dump_context::dump_gimple_expr_loc): Likewise; convert
      	2nd param from const dump_location_t & to
      	const dump_user_location_t &.
      	(dump_context::dump_generic_expr): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.
      	(dump_context::dump_generic_expr_loc): Likewise; convert
      	2nd param from const dump_location_t & to
      	const dump_user_location_t &.
      	(dump_context::dump_printf_va): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.
      	(dump_context::dump_printf_loc_va): Likewise; convert
      	2nd param from const dump_location_t & to
      	const dump_user_location_t &.
      	(dump_context::dump_dec): Convert 1st param from
      	dump_flags_t to const dump_metadata_t &.
      	(dump_context::dump_symtab_node): Likewise.
      	(dump_context::begin_scope): Split out 2nd param into
      	user and impl locations.
      	(dump_context::ensure_pending_optinfo): Add metadata param.
      	(dump_context::begin_next_optinfo): Replace dump_location_t param
      	with metadata and user location.
      	(dump_gimple_stmt): Convert 1st param from dump_flags_t to
      	const dump_metadata_t &.
      	(dump_gimple_stmt_loc): Likewise; convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_gimple_expr): Convert 1st param from dump_flags_t to
      	const dump_metadata_t &.
      	(dump_gimple_expr_loc): Likewise; convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_generic_expr): Convert 1st param from dump_flags_t to
      	const dump_metadata_t &.
      	(dump_generic_expr_loc): Likewise; convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_printf): Convert 1st param from dump_flags_t to
      	const dump_metadata_t &.
      	(dump_printf_loc): Likewise; convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_dec): Convert 1st param from dump_flags_t to
      	const dump_metadata_t &.
      	(dump_symtab_node): Likewise.
      	(dump_begin_scope): Split out 2nd param into user and impl
      	locations.
      	(selftest::assert_impl_location_eq): New function.
      	(ASSERT_IMPL_LOCATION_EQ): New macro.
      	(selftest::test_impl_location): Update to use
      	ASSERT_IMPL_LOCATION_EQ.
      	(selftest::test_capture_of_dump_calls): Convert "loc" to
      	dump_user_location_t.  Add ASSERT_IMPL_LOCATION_EQ throughout,
      	verifying line numbers of dump emissions.
      	* dumpfile.h (class dump_metadata_t): New class.
      	(dump_printf): Convert 1st param from dump_flags_t to
      	const dump_metadata_t &.
      	(dump_printf_loc): Likewise; convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_generic_expr_loc): Likewise.
      	(dump_generic_expr): Convert 1st param from dump_flags_t to
      	const dump_metadata_t &.
      	(dump_gimple_stmt_loc): Likewise; convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_gimple_stmt): Convert 1st param from dump_flags_t to
      	const dump_metadata_t &.
      	(dump_gimple_expr_loc): Likewise; convert 2nd param from
      	const dump_location_t & to const dump_user_location_t &.
      	(dump_gimple_expr): Convert 1st param from dump_flags_t to
      	const dump_metadata_t &.
      	(dump_symtab_node): Likewise.
      	(dump_dec): Likewise.
      	(dump_begin_scope): Split out 2nd param into user and impl
      	locations.
      	(auto_dump_scope::auto_dump_scope): Split "loc" param into a user
      	location and impl_location, and capture the impl_location.
      	(AUTO_DUMP_SCOPE): Rename param from LOC to USER_LOC.
      	* loop-unroll.c (report_unroll): Update for changes to
      	dump_printf_loc and dump_printf.
      	* opt-problem.cc (opt_problem::opt_problem): Update for change to
      	dump_loc.
      	* optinfo-emit-json.cc
      	(selftest::test_building_json_from_dump_calls): Convert "loc" from
      	dump_location_t to dump_user_location_t.
      	* optinfo.cc (optinfo::emit_for_opt_problem): Update for change in
      	dump_loc_immediate.
      	* profile.c (compute_branch_probabilities): Update for change to
      	dump_printf_loc.
      	* selftest.h (ASSERT_STR_CONTAINS_AT): New macro.
      	* tree-vect-slp.c (vect_print_slp_tree): Update for change to
      	dump_printf_loc.
      
      From-SVN: r266501
      David Malcolm committed
    • Tweak directives in GCC tests for msp430-elf · 27c16e61
      2018-11-27  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
      
      	Tweak directives in GCC tests for msp430-elf
      
      	gcc/ChangeLog:
      
      	* doc/sourcebuild.texi: Document check_effective_target_int_eq_float
      	and check_effective_target_ptr_eq_long.
      
      	gcc/testsuite/ChangeLog:
      
      	* lib/target-supports.exp
      	(check_effective_target_logical_op_short_circuit): Add msp430.
      	(check_effective_target_int_eq_float): New. 
      	(check_effective_target_ptr_eq_long): New. 
      	* c-c++-common/pr41779.c: Require int_eq_float for dg-warning tests.
      	* c-c++-common/pr57371-2.c: XFAIL optimized dump scan when
      	sizeof (float) != sizeof (int).
      	* gcc.dg/pr84670-4.c: Require ptr_eq_long.
      	* gcc.dg/pr85859.c: Likewise.
      	* gcc.dg/Wno-frame-address.c: Skip for msp430-elf.
      	* gcc.dg/torture/stackalign/builtin-apply-2.c: Likewise.
      	* gcc.dg/ifcvt-4.c: Likewise.
      	* gcc.dg/pr34856.c: Likewise.
      	* gcc.dg/builtin-apply2.c: Likewise.
      	* gcc.dg/tree-ssa/ssa-dse-26.c: Likewise.
      	* gcc.dg/attr-alloc_size-11.c: Remove dg-warning XFAIL for msp430.
      	* gcc.dg/tree-ssa/20040204-1.c: Likewise.
      	* gcc.dg/compat/struct-by-value-16a_x.c: Build at -O1 for msp430
      	so it fits.
      	* gcc.dg/lto/20091013-1_0.c: Require ptr_eq_long.
      	* gcc.dg/lto/20091013-1_1.c: Remove xfail-if for when
      	sizeof(void *) != sizeof(long).
      	* gcc.dg/lto/20091013-1_2.c: Likewise.
      	* gcc.dg/tree-ssa/loop-1.c: Fix expected dg-final behaviour for msp430.
      	* gcc.dg/tree-ssa/gen-vect-25.c: Likewise.
      	* gcc.dg/tree-ssa/gen-vect-11.c: Likewise.
      	* gcc.dg/tree-ssa/loop-35.c: Likewise.
      	* gcc.dg/tree-ssa/pr23455.c: Likewise.
      	* gcc.dg/weak/typeof-2.c: Likewise.
      	* gcc.target/msp430/interrupt_fn_placement.c: Skip for 430 ISA.
      	* gcc.target/msp430/pr78818-data-region.c: Fix scan-assembler text.
      	* gcc.target/msp430/pr79242.c: Don't skip for -msmall.
      	* gcc.target/msp430/special-regs.c: Use "__asm__" instead of "asm".
      
      From-SVN: r266500
      Jozef Lawrynowicz committed
    • Daily bump. · 660254d3
      From-SVN: r266499
      GCC Administrator committed
    • [RS6000] rs6000/sysv4.h using gnu-user.h · 62045234
      This patch removes some duplication in rs6000/sysv4.h of macros found
      in gnu-user.h that we want for linux.  Including gnu-user.h will mean
      powerpc doesn't miss updates to that file.
      
      	* config.gcc (powerpc*-*-freebsd*, powerpc-*-netbsd*),
      	(powerpc-*-eabisimaltivec*, powerpc-*-eabisim*, powerpc-*-elf*),
      	(powerpc-*-eabialtivec*, powerpc-*-eabi*, powerpc-*-rtems*),
      	(powerpc-wrs-vxworks*, powerpc-*-lynxos*, powerpcle-*-elf*),
      	(powerpcle-*-eabisim*, powerpcle-*-eabi*): Add gnu-user.h to tm_file.
      	* config/rs6000/freebsd.h (CPLUSPLUS_CPP_SPEC),
      	(LINK_GCC_C_SEQUENCE_SPEC): Undef.
      	(ASM_APP_ON, ASM_APP_OFF): Don't define.
      	* config/rs6000/freebsd64.h (ASM_APP_ON, ASM_APP_OFF): Don't define.
      	* config/rs6000/lynx.h (ASM_APP_ON, ASM_APP_OFF): Don't define.
      	* config/rs6000/linux64.h (LINK_GCC_C_SEQUENCE_SPEC): Define.
      	* config/rs6000/netbsd.h (CPLUSPLUS_CPP_SPEC),
      	(LINK_GCC_C_SEQUENCE_SPEC): Undef.
      	* config/rs6000/rtems.h (LINK_GCC_C_SEQUENCE_SPEC): Define.
      	* config/rs6000/sysv4.h (GNU_USER_TARGET_CRTI): Redefine.
      	(GNU_USER_TARGET_CRTN): Redefine.
      	(CC1_SPEC): Use GNU_USER_TARGET_CC1_SPEC.
      	(LIB_LINUX_SPEC): Use GNU_USER_TARGET_LIB_SPEC.
      	(CRTOFFLOADBEGIN, CRTOFFLOADEND): Don't define.
      	(STARTFILE_LINUX_SPEC): Define as GNU_USER_TARGET_STARTFILE_SPEC.
      	(ENDFILE_LINUX_SPEC): Define as GNU_USER_TARGET_ENDFILE_SPEC.
      	(UCLIBC_DYNAMIC_LINKER, CHOOSE_DYNAMIC_LINKER): Don't define.
      	(LINK_EH_SPEC): Don't define.
      
      From-SVN: r266496
      Alan Modra committed
  2. 26 Nov, 2018 1 commit