1. 30 Nov, 2018 22 commits
    • Clean up Fortran OpenACC wait clause handling · fc2a1f2f
      "wait" can be deduced from "wait_list".
      
      	gcc/fortran/
      	* gfortran.h (struct gfc_omp_clauses): Remove "wait".  Adjust all
      	users.
      
      From-SVN: r266685
      Thomas Schwinge committed
    • Support multiple OpenACC wait clauses · c34f4fbc
      Support for this is not explicitly called for in OpenACC 2.6, but given that
      GCC internally decomposes "wait (1, 2)" into "wait (1) wait (2)" (similar for
      other clauses, too), it's reasonable to also support that syntax in the front
      ends -- which happens to already be the case for C, C++, and easy enough to do
      for Fortran.
      
      	gcc/fortran/
      	* openmp.c (gfc_match_omp_clauses): Support multiple OpenACC wait
      	clauses.
      	gcc/testsuite/
      	* c-c++-common/goacc/asyncwait-5.c: New file.
      	* gfortran.dg/goacc/asyncwait-5.f: Likewise.
      
      From-SVN: r266684
      Thomas Schwinge committed
    • Add libgomp.oacc-fortran/lib-16-2.f90 · c223608f
      This is a copy of libgomp.oacc-fortran/lib-16.f90, but does 'include
      "openacc_lib.h"' instead of 'use openacc'.
      
      	libgomp/
      	* testsuite/libgomp.oacc-fortran/lib-16-2.f90: New file.
      
      From-SVN: r266683
      Thomas Schwinge committed
    • re PR rtl-optimization/88179 ([MIPS] pr84941.c ICE in… · 9cb95c07
      re PR rtl-optimization/88179 ([MIPS]  pr84941.c ICE in lra_eliminate_reg_if_possible at lra-eliminations.c:1393  start with r266385)
      
      2018-11-30  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR rtl-optimization/88179
      	* lra-constraints.c (address_eliminator::address_eliminator):
      	Don't eleminate regs in illegitimate address.
      
      From-SVN: r266682
      Vladimir Makarov committed
    • re PR target/87496 (ICE in aggregate_value_p at gcc/function.c:2046) · 8863a902
      gcc/testsuite/
      	PR target/87496
      	* gcc.target/powerpc/pr86324-1.c: Add dg-skip-if selector.
      	Add -mcpu=power7 option.
      
      From-SVN: r266680
      Peter Bergner committed
    • Initialize backtrace state once · 854cedfd
      From backtrace.h for backtrace_create_state:
      
         Calling this function allocates resources that can not be freed.
         There is no backtrace_free_state function.  The state is used to
         cache information that is expensive to recompute.  Programs are
         expected to call this function at most once and to save the return
         value for all later calls to backtrace functions.
      
      So instead of calling backtrace_create_state every time we wish to
      show a backtrace, do it once and store the result in a static
      variable.  libbacktrace allows multiple threads to access the state,
      so no need to use TLS.
      
      Regtested on x86_64-pc-linux-gnu.
      
      libgfortran/ChangeLog:
      
      2018-11-30  Janne Blomqvist  <jb@gcc.gnu.org>
      
      	PR libfortran/88137
      	* runtime/backtrace.c (show_backtrace): Make lbstate a static
      	variable, initialize once.
      
      From-SVN: r266677
      Janne Blomqvist committed
    • Implement P0457R2 String Prefix and Suffix Checking. · 5bd624fb
      2018-11-30  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement P0457R2 String Prefix and Suffix Checking.
      	* include/bits/basic_string.h: Add starts_with, ends_with members.
      	* include/std/string_view: Ditto.
      	* testsuite/21_strings/basic_string/operations/starts_with/
      	char/1.cc: New test.
      	* testsuite/21_strings/basic_string/operations/starts_with/
      	wchar_t/1.cc: New test.
      	* testsuite/21_strings/basic_string/operations/ends_with/
      	char/1.cc: New test.
      	* testsuite/21_strings/basic_string/operations/ends_with/
      	wchar_t/1.cc: New test.
      	* testsuite/21_strings/basic_string_view/operations/starts_with/
      	char/1.cc: New test.
      	* testsuite/21_strings/basic_string_view/operations/starts_with/
      	wchar_t/1.cc: New test.
      	* testsuite/21_strings/basic_string_view/operations/ends_with/
      	char/1.cc: New test.
      	* testsuite/21_strings/basic_string_view/operations/ends_with/
      	wchar_t/1.cc: New test.
      
      From-SVN: r266674
      Edward Smith-Rowland committed
    • Pre-emptively support P0646R1 for std container erasure. · 0b44b4b8
      2018-11-30  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Pre-emptively support P0646R1 for std container erasure.
      	* include/bits/erase_if.h: Accumulate and return number of erased nodes.
      	* include/std/forward_list (): Return number of erased items.
      	* 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: Test number of erasures.
      	* testsuite/23_containers/deque/erasure.cc: Ditto.
      	* testsuite/23_containers/forward_list/erasure.cc: Ditto.
      	* testsuite/23_containers/list/erasure.cc: Ditto.
      	* testsuite/23_containers/map/erasure.cc: Ditto.
      	* testsuite/23_containers/set/erasure.cc: Ditto.
      	* testsuite/23_containers/unordered_map/erasure.cc: Ditto.
      	* testsuite/23_containers/unordered_set/erasure.cc: Ditto.
      	* testsuite/23_containers/vector/erasure.cc: Ditto.
      
      From-SVN: r266672
      Edward Smith-Rowland committed
    • Fix ICE in substring locations from macros in header files (PR preprocessor/88257) · ef33afeb
      PR preprocessor/88257 reports an ICE on gcc.dg/format/pr78304.c
      when compiled using g++:
      
      void test (const char *msg)
      {
        printf ("size: %" PRIu32 "\n", msg);
      }
      
      due to mismatching files (and line maps) between
      linemap_resolve_location and expand_location_to_spelling_point
      when PRIu32 is defined in a system header.
      
      The root cause is that expand_location_to_spelling_point stops
      unwinding locations when it reaches a system header, whereas
      linemap_resolve_location can resolve into a system header,
      which can lead to locations within get_substring_ranges_for_loc
      getting out of sync, and using the wrong line map.
      
      This patch fixes the issue by checking that the files are the
      same.
      
      gcc/ChangeLog:
      	PR preprocessor/88257
      	* input.c (get_substring_ranges_for_loc): Fix indentation.
      	Bulletproof against getting a different files back from
      	linemap_resolve_location and expand_location_to_spelling_point.
      
      gcc/testsuite/ChangeLog:
      	PR preprocessor/88257
      	* c-c++-common/Wformat-pr88257.c: New test.
      	* c-c++-common/Wformat-pr88257.h: New test header.
      	* c-c++-common/empty.h: New test header.
      
      From-SVN: r266671
      David Malcolm committed
    • [libbacktrace] Add tests for unused formats · 187b9e1d
      When building libbacktrace, we typically use elf.c, and don't build pecoff.c,
      xcoff.c or unknown.c.
      
      Add testcases that use unused format to ensure that we also build and
      test those on a typical development setup.
      
      Bootstrapped and reg-tested on x86_64.
      
      2018-11-30  Tom de Vries  <tdevries@suse.de>
      
      	* Makefile.am (check_PROGRAMS): Add test_elf, test_xcoff_32,
      	test_xcoff_64, test_pecoff and test_unknown.
      	* Makefile.in: Regenerate.
      	* test_format.c: New file.
      
      From-SVN: r266668
      Tom de Vries committed
    • [libbacktrace] Test check_PROGRAMS without mmap · 9b7d1a97
      When building libbacktrace, we typically use mmapio.c and mmap.c, and don't
      build read.c and alloc.c.
      
      Add testcases that use read.c and alloc.c to ensure that we also build and
      test those on a typical development setup.
      
      Bootstrapped and reg-tested on x86_64.
      
      2018-11-30  Tom de Vries  <tdevries@suse.de>
      
      	* Makefile.am : Add _with_alloc version for each test in
      	check_PROGRAMS.
      	* Makefile.in: Regenerate.
      
      From-SVN: r266667
      Tom de Vries committed
    • Call decl_default_tls_model with a proper type (PR gcov-profile/88279). · 37eafc06
      2018-11-30  Alexander Monakov  <amonakov@ispras.ru>
      
      	PR gcov-profile/88279
      	* tree-profile.c (init_ic_make_global_vars): Call
      	decl_default_tls_model for variable and not it's type.
      
      From-SVN: r266666
      Alexander Monakov committed
    • [PATCH][GCC][ARM] Ensure dotproduct is only enabled on armv8 neon · 427071d4
      
      gcc/ChangeLog:
      
      2018-11-30  Sam Tebbs<sam.tebbs@arm.com>
      
      	* config/arm/arm.h (TARGET_DOTPROD): Add TARGET_VFP5 constraint.
      
      gcc/testsuite/ChangeLog:
      
      2018-11-30  Sam Tebbs<sam.tebbs@arm.com>
      
      	* gcc.target/arm/neon-dotprod-restriction.c: New file.
      	* lib/target-supports.exp
      	(check_effective_target_arm_v8_2a_dotprod_neon_ok_nocache): Include
      	stdint.h.
      
      From-SVN: r266665
      Sam Tebbs committed
    • Make red zone size more flexible for stack variables (PR sanitizer/81715). · 6e644a50
      2018-11-30  Martin Liska  <mliska@suse.cz>
      
      	PR sanitizer/81715
      	* asan.c (asan_shadow_cst): Remove, partially transform
      	into flush_redzone_payload.
      	(RZ_BUFFER_SIZE): New.
      	(struct asan_redzone_buffer): New.
      	(asan_redzone_buffer::emit_redzone_byte): Likewise.
      	(asan_redzone_buffer::flush_redzone_payload): Likewise.
      	(asan_redzone_buffer::flush_if_full): Likewise.
      	(asan_emit_stack_protection): Use asan_redzone_buffer class
      	that is responsible for proper aligned stores and flushing
      	of shadow memory payload.
      	* asan.h (ASAN_MIN_RED_ZONE_SIZE): New.
      	(asan_var_and_redzone_size): Likewise.
      	* cfgexpand.c (expand_stack_vars): Use smaller alignment
      	(ASAN_MIN_RED_ZONE_SIZE) in order to make shadow memory
      	for automatic variables more compact.
      2018-11-30  Martin Liska  <mliska@suse.cz>
      
      	PR sanitizer/81715
      	* c-c++-common/asan/asan-stack-small.c: New test.
      
      From-SVN: r266664
      Martin Liska committed
    • [RS6000] PowerPC64 soft-float · b49f1a7e
      This patch aims to prevent long sequences loading soft-float
      constants.  For 32-bit, it makes sense to load values inline to a gpr
      with lis, addi, but not so much for 64-bit where a 5 insn sequence
      might be needed for each gpr.  For TFmode in particular, a 10 insn
      sequence is reduced to 2 loads from memory plus 1 or 2 address setup
      insns.
      
      	* config/rs6000/predicates.md (easy_fp_constant): Avoid long
      	dependent insn sequences.
      	* config/rs6000/rs6000.c (num_insns_constant): Support long
      	double constants.
      	* config/rs6000/rs6000.md (mov<mode>_softfloat <FMOVE128>): Adjust
      	length attribute.
      
      From-SVN: r266663
      Alan Modra committed
    • [RS6000] num_insns_constant ICE · ceb8c8c4
      This patch came about from investigating an ICE that appeared when I
      was retesting an old half-baked patch of mine to rs6000_rtx_costs.
      If a const_double is fed to rs6000_is_valid_and_mask and from there to
      rs6000_is_valid_mask where INTVAL is used, gcc will ICE.
      
      The num_insns_constant ICE was introduced with git commit f337168d97.
      However, the code was buggy before that.  There was no point in
      testing for a mask since the mask predicates only handle const_int.
      In fact, I don't think the function ever handled floating point
      constants that might match a load of minus one and mask.  It does now.
      I've added a few comments regarding splitters so the next person
      looking at this code can see how this works.
      
      The patch also extracts code out of num_insns_constant that needed to
      handle multiple gprs for DFmode constants in 32-bit mode, to a
      function that handles multiple gprs a little more generally.  I don't
      think there is any need for anything but the 32-bit DFmode case
      currently, but this allows for possible future uses.  The
      CONST_WIDE_INT case is also not used currently, and needed fixing.
      Adding CONST_WIDE_INT_NUNITS - 1 only makes sense if the elements of
      the array were being shifted into a register of size larger than the
      element size (which is 64-bits).
      
      	* config/rs6000/rs6000.c (num_insns_constant_gpr): Renamed from
      	num_insns_constant_wide.  Make static.  Revise comment.
      	(num_insns_constant_multi): New function.
      	(num_insns_constant): Formatting.  Correct CONST_WIDE_INT
      	calculation.  Simplify and extract code common to both
      	CONST_INT and CONST_DOUBLE.  Add gcc_unreachable for unhandled
      	const_double modes.
      	* config/rs6000/rs6000-protos.h (num_insns_const_wide): Delete.
      
      From-SVN: r266662
      Alan Modra committed
    • gimple-parser.c (c_parser_gimple_postfix_expression): Parse _Literal (type) { ... · f44697b7
      2018-11-30  Richard Biener  <rguenther@suse.de>
      
      	c/
      	* gimple-parser.c (c_parser_gimple_postfix_expression): Parse
      	_Literal (type) { ... } as empty aggregate or vector constructor.
      
      	* gcc.dg/gimplefe-34.c: New testcase.
      	* gcc.dg/gimplefe-35.c: Likewise.
      
      From-SVN: r266661
      Richard Biener committed
    • Restrict vector extension to use 128bit vectors (PR testsuite/88265). · eea34f20
      2018-11-30  Martin Liska  <mliska@suse.cz>
      
      	PR testsuite/88265
      	* gfortran.dg/simd-builtins-1.f90: Restrict to 128b vectors.
      	* gfortran.dg/simd-builtins-6.f90: Likewise.
      
      From-SVN: r266660
      Martin Liska committed
    • re PR tree-optimization/88274 (ICE in check, at tree-vrp.c:188) · 45b97a09
      2018-11-30  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/88274
      	* tree-vrp.c (ranges_from_anti_range): Fix handling of
      	TYPE_MIN/MAX_VALUE.
      
      From-SVN: r266659
      Richard Biener committed
    • [libbacktrace] Factor out backtrace_vector_free · 518a3a21
      Factor out new function backtrace_vector_free.
      
      Bootstrapped and reg-tested on x86_64.
      
      2018-11-30  Tom de Vries  <tdevries@suse.de>
      
      	* internal.h (backtrace_vector_free): New static inline fuction,
      	factored out of ...
      	* dwarf.c (read_line_info): ... here.
      
      From-SVN: r266658
      Tom de Vries committed
    • Daily bump. · 507bdfc5
      From-SVN: r266657
      GCC Administrator committed
  2. 29 Nov, 2018 18 commits
    • Allow changing the fentry section per file and per function · 1c31f6c8
      When dynamically patching in/out instrumentation it can be useful
      to handle different classes of functions differently. Add support
      for changing the fentry section name on the command line
      or as a function attributes. This allows to mark functions differently,
      and handle them differently in dynamic patching.
      
      gcc/:
      
      2018-11-29  Andi Kleen  <ak@linux.intel.com>
      
      	* config/i386/i386.c (current_fentry_section): Add.
      	(x86_function_profiler): Handle fentry section.
      	(ix86_attribute_table): Add fentry section.
      	* config/i386/i386.opt: Add -mfentry-section.
      	* doc/extend.texi: Document fentry_section attribute.
      	* doc/invoke.texi: Document -mfentry-section.
      
      gcc/testsuite/:
      
      2018-11-29  Andi Kleen  <ak@linux.intel.com>
      
      	* gcc.target/i386/fentryname2.c: New test.
      	* gcc.target/i386/fentryname3.c: New test.
      
      From-SVN: r266654
      Andi Kleen committed
    • Support changing fentry name per function · d7bf0bd6
      It can be useful to have some classes of functions that use a different
      __fentry__ instrumentation than others.  Currently it is only
      possible to disable instrumentation on the command line or with
      no_instrument_function, but not to change the instrumentation function
      on a case by case base.
      
      Add some flexibility to allow to change the instrumentation function
      name per file with an option or per function with a new attribute.
      This also allows switching to nops for individual functions.
      
      gcc/:
      
      2018-11-29  Andi Kleen  <ak@linux.intel.com>
      
      	* config/i386/i386.c (x86_print_call_or_nop): Handle nop name.
      	(current_fentry_name): Add.
      	(x86_function_profiler): Handle fentry_name attribute.
      	(ix86_handle_fentry_name): Add.
      	(ix86_attribute_table): Add fentry_name.
      	* config/i386/i386.opt: Add -mfentry-name
      	* doc/extend.texi: Document fentry_name.
      	* doc/invoke.texi: Document minstrument-return.
      
      gcc/testsuite/:
      
      2018-11-29  Andi Kleen  <ak@linux.intel.com>
      
      	* gcc.target/i386/fentryname1.c: New test.
      
      From-SVN: r266653
      Andi Kleen committed
    • Support instrumenting returns of instrumented functions · 3b31afe1
      When instrumenting programs using __fentry__ it is often useful
      to instrument the function return too. Traditionally this
      has been done by patching the return address on the stack
      frame on entry. However this is fairly complicated (trace
      function has to emulate a stack) and also slow because
      it causes a branch misprediction on every return.
      
      Add an option to generate call or nop instrumentation for
      every return instead, including patch sections.
      
      This will increase the program size slightly, but can be a
      lot faster and simpler.
      
      This version only instruments true returns, not sibling
      calls or tail recursion. This matches the semantics of the
      original stack.
      
      gcc/:
      
      2018-11-29  Andi Kleen  <ak@linux.intel.com>
      
      	* config/i386/i386-opts.h (enum instrument_return): Add.
      	* config/i386/i386.c (output_return_instrumentation): Add.
      	(ix86_output_function_return): Call output_return_instrumentation.
      	(ix86_output_call_insn): Call output_return_instrumentation.
      	* config/i386/i386.opt: Add -minstrument-return=.
      	* doc/invoke.texi (-minstrument-return): Document.
      
      gcc/testsuite/:
      
      2018-11-29  Andi Kleen  <ak@linux.intel.com>
      
      	* gcc.target/i386/returninst1.c: New test.
      	* gcc.target/i386/returninst2.c: New test.
      	* gcc.target/i386/returninst3.c: New test.
      
      From-SVN: r266652
      Andi Kleen committed
    • re PR target/87807 (passing float/double vectors as variadic args fails on-64bit SPARC) · 856f4c6a
      	PR target/87807
      	* config/sparc/sparc-modes.def: Minor tweak.
      	* config/sparc/sparc.c: Minor reordering.
      	(sparc_pass_by_reference): Move around.
      	(traverse_record_type): Change offset from HOST_WIDE_INT to int.
      	(classify_registers): Likewise for bitpos.
      	(function_arg_slotno): Remove dead test and tweak comments.
      	<MODE_RANDOM>: Remove useless assertion and test whether the
      	parameter is named in order to pass it in FP registers.  Return
      	the regno for floating-point vector types.
      	(compute_int_layout): Change bitpos from HOST_WIDE_INT to int.
      	(compute_fp_layout): Likewise.
      	(count_registers): Likewise.
      	(assign_int_registers): Likewise.
      	(assign_fp_registers): Likewise.
      	(assign_registers): Likewise.
      	(function_arg_record_value): Change size from HOST_WIDE_INT to int
      	and use CEIL_NWORDS to compute the number of registers.
      	(function_arg_union_value): Minor tweaks.
      	(function_arg_vector_value): Add slotno and named parameters, use
      	CEIL_NWORDS to compute the number of registers.
      	(sparc_function_arg_1): Rework handling of vector types.  Change
      	size from HOST_WIDE_INT to int.
      	(sparc_arg_partial_bytes): Rework handling of 32-bit ABI and deal
      	with vector types for the 64-bt ABI.
      	(sparc_function_arg_advance): Likewise.
      	(sparc_return_in_memory): Add reference to -fpcc-struct-return.
      	(sparc_struct_value_rtx): Return NULL_RTX instead of 0.
      	(sparc_function_value_1): Rework handling of vector types.  Change
      	size from HOST_WIDE_INT to int.
      
      From-SVN: r266651
      Eric Botcazou committed
    • re PR target/88152 (optimize SSE & AVX char compares with subsequent movmskb) · 0b1c4b83
      	PR target/88152
      	* config/i386/sse.md (*<sse>_movmsk<ssemodesuffix><avxsizesuffix>_lt,
      	*<sse>_movmsk<ssemodesuffix><avxsizesuffix>_zext_lt,
      	*<sse>_movmsk<ssemodesuffix><avxsizesuffix>_shift,
      	*<sse>_movmsk<ssemodesuffix><avxsizesuffix>_zext_shift,
      	*<sse2_avx2>_pmovmskb_lt, *<sse2_avx2>_pmovmskb_zext_lt): New
      	define_insn_and_split patterns.
      
      	* g++.target/i386/pr88152.C: New test.
      
      From-SVN: r266649
      Jakub Jelinek committed
    • re PR target/54700 (Optimize away x<0 as mask argument of a blend.) · fb9e6a4b
      	PR target/54700
      	* config/i386/sse.md
      	(*<sse4_1>_blendv<ssemodesuffix><avxsizesuffix>_lt,
      	*<sse4_1>_blendv<ssefltmodesuffix><avxsizesuffix>_ltint,
      	*<sse4_1_avx2>_pblendvb_lt): Change define_insn into
      	define_insn_and_split.
      
      From-SVN: r266648
      Jakub Jelinek committed
    • pr34256.c: Adjust the number of expected moves. · f21bfc1b
      2018-11-29  Vladimir Makarov  <vmakarov@redhat.com>
      
      	* gcc.target/i386/pr34256.c: Adjust the number of expected moves.
      
      From-SVN: r266646
      Vladimir Makarov committed
    • decl.c (compute_array_index_type_loc): New, like the current… · eedb990a
      decl.c (compute_array_index_type_loc): New, like the current compute_array_index_type but takes a location_t too.
      
      /cp
      2018-11-29  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* decl.c (compute_array_index_type_loc): New, like the current
      	compute_array_index_type but takes a location_t too.
      	(compute_array_index_type): Forward to the latter.
      	(create_array_type_for_decl): Use compute_array_index_type_loc.
      
      /testsuite
      2018-11-29  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* g++.dg/cpp0x/constexpr-base6b.C: New.
      	* g++.dg/cpp0x/constexpr-47969.C: Test locations too.
      	* g++.dg/cpp0x/constexpr-48324.C: Likewise.
      	* g++.dg/cpp0x/constexpr-ex2.C: Likewise.
      	* g++.dg/cpp0x/scoped_enum2.C: Likewise.
      	* g++.dg/cpp1y/pr63996.C: Likewise.
      	* g++.dg/ext/constexpr-vla5.C: Likewise.
      	* g++.dg/ext/stmtexpr15.C: Likewise.
      	* g++.dg/ext/vla1.C: Likewise.
      	* g++.dg/other/fold1.C: Likewise.
      	* g++.dg/parse/array-size2.C: Likewise.
      	* g++.dg/parse/crash36.C: Likewise.
      	* g++.dg/ubsan/pr81530.C: Likewise.
      	* g++.dg/warn/Wvla-1.C: Likewise.
      	* g++.dg/warn/Wvla-2.C: Likewise.
      	* g++.old-deja/g++.brendan/array1.C: Likewise.
      	* g++.old-deja/g++.bugs/900402_02.C: Likewise.
      	* g++.old-deja/g++.law/init3.C: Likewise.
      	* g++.old-deja/g++.mike/p6149.C: Likewise.
      
      From-SVN: r266645
      Paolo Carlini committed
    • C++: namespaces and scopes for enum values (PR c++/88121) · 3ded6ffd
      Consider this test case:
      
      namespace json
      {
        enum { JSON_OBJECT };
      }
      
      void test ()
      {
        JSON_OBJECT;
      }
      
      which erroneously accesses an enum value in another namespace without
      qualifying the access.
      
      GCC 6 through 8 issue a suggestion that doesn't mention the namespace:
      
      <source>: In function 'void test()':
      <source>:8:3: error: 'JSON_OBJECT' was not declared in this scope
         JSON_OBJECT;
         ^~~~~~~~~~~
      <source>:8:3: note: suggested alternative:
      <source>:3:10: note:   'JSON_OBJECT'
         enum { JSON_OBJECT };
                ^~~~~~~~~~~
      
      which is suboptimal.
      
      I made the problem worse with r265610, which consolidates the single
      suggestion into the error, and emits:
      
      <source>: In function 'void test()':
      <source>:8:3: error: 'JSON_OBJECT' was not declared in this scope; did
         you mean 'JSON_OBJECT'?
          8 |   JSON_OBJECT;
            |   ^~~~~~~~~~~
            |   JSON_OBJECT
      <source>:3:10: note: 'JSON_OBJECT' declared here
          3 |   enum { JSON_OBJECT };
            |          ^~~~~~~~~~~
      
      where the message:
        'JSON_OBJECT' was not declared in this scope; did you mean 'JSON_OBJECT'?
      is nonsensical.
      
      This patch tweaks dump_scope to detect unscoped enums, and to use the
      enclosing namespace for them, so that the CONST_DECL is dumped as
      "json::JSON_OBJECT".
      
      This changes the output for the above so that it refers to the
      namespace, fixing the issue:
      
      <source>:8:3: error: 'JSON_OBJECT' was not declared in this scope; did
         you mean 'json::JSON_OBJECT'?
          9 |   JSON_OBJECT;
            |   ^~~~~~~~~~~
            |   json::JSON_OBJECT
      <source>3:10: note: 'json::JSON_OBJECT' declared here
          3 |   enum { JSON_OBJECT };
            |          ^~~~~~~~~~~
      
      The patch also fixes scope-printing for values within scoped enums.
      To exercise this, the patch extends the scanner for namespaces for
      exact matches for a name, so that we also scan inside scoped
      enums, to cover the case where someone doesn't supply the scope.
      
      Hence with the patch given e.g.:
      
      enum class vegetable { CARROT, TURNIP };
      
      we're able to offer e.g.:
      
      suggestions-scoped-enums.C:50:3: error: 'CARROT' was not declared in
        this scope; did you mean 'vegetable::CARROT'?
         50 |   CARROT;
            |   ^~~~~~
            |   vegetable::CARROT
      
      and this exercises the code path above.  The patch updates dump_scope
      for scoped enums so that we print the scope when printing the
      value ("vegetable::CARROT"), rather than just the name of the value
      ("CARROT").
      
      Finally, the patch adds spell-corrections within a scoped enum,
      giving e.g.:
      
      suggestions-scoped-enums.C:18:14: error: 'TURNUP' is not a member of
        'vegetable'; did you mean 'TURNIP'?
         18 |   vegetable::TURNUP;
            |              ^~~~~~
            |              TURNIP
      
      gcc/cp/ChangeLog:
      	PR c++/88121
      	* cp-name-hint.h (suggest_alternative_in_scoped_enum): New decl.
      	* error.c (dump_scope): Ensure that we print any scope for values
      	of unscoped enums.  Print the scope of values of scoped enums.
      	(qualified_name_lookup_error): Offer suggestions for failures
      	within scoped enums by calling suggest_alternative_in_scoped_enum.
      	* name-lookup.c (class namespace_hints): Update comment to mention
      	scoped enums.
      	(namespace_hints::namespace_hints): Call
      	maybe_add_candidate_for_scoped_enum.
      	(namespace_hints::maybe_add_candidate_for_scoped_enum): New member
      	(suggest_alternatives_for): Update comment to mention scoped
      	enums.
      	(suggest_alternative_in_scoped_enum): New function.
      
      gcc/testsuite/ChangeLog:
      	PR c++/88121
      	* g++.dg/lookup/suggestions-scoped-enums.C: New test.
      	* g++.dg/lookup/suggestions-unscoped-enums.C: New test.
      
      From-SVN: r266644
      David Malcolm committed
    • re PR target/87496 (ICE in aggregate_value_p at gcc/function.c:2046) · 171954d8
      gcc/
      	PR target/87496
      	* config/rs6000/rs6000.c (rs6000_option_override_internal): Disallow
      	-mabi=ieeelongdouble without both -mpopcntd and -mvsx.
      
      gcc/testsuite/
      	PR target/87496
      	* gcc.target/powerpc/pr87496.c: New test.
      
      From-SVN: r266636
      Peter Bergner committed
    • i386.c (inline_memory_move_cost): Check "in" for 2 in MMX_CLASS_P case. · 9bb3d6c4
      	* config/i386/i386.c (inline_memory_move_cost):
      	Check "in" for 2 in MMX_CLASS_P case.
      	* config/i386/mmx.md (*mov<mode>_internal): Correct
      	TARGET_INTER_UNIT_MOVES_FROM_VEC and TARGET_INTER_UNIT_MOVES_TO_VEC
      	alternatives in preferred_for_speed attribute calculation.
      
      From-SVN: r266635
      Uros Bizjak committed
    • PR c/88091 - c-c++-common/Wconversion-real.c etc. FAIL · 550dfbdc
      gcc/c/ChangeLog:
      
      	PR c/88091
      	* c-typeck.c (convert_argument): Add a parameter.  Adjust indentation.
      	(convert_arguments): Add comments.  Pass additional argument to
      	the function above.
      
      From-SVN: r266634
      Martin Sebor committed
    • PR c/88172 - attribute aligned of zero silently accepted but ignored · 673670da
      PR c/88172 - attribute aligned of zero silently accepted but ignored
      PR testsuite/88208 - new test case c-c++-common/builtin-has-attribute-3.c in r266335 has multiple excess errors
      
      gcc/ChangeLog:
      
      	PR c/88172
      	PR testsuite/88208
      	* doc/extend.texi (attribute constructor): Clarify.
      
      gcc/c/ChangeLog:
      
      	PR c/88172
      	PR testsuite/88208
      	* c-decl.c (declspec_add_alignas): Adjust call to check_user_alignment.
      
      gcc/c-family/ChangeLog:
      
      	PR c/88172
      	PR testsuite/88208
      	* c-attribs.c (common_handle_aligned_attribute): Silently avoid setting
      	alignments to values less than the target requires.
      	(has_attribute): For attribute aligned consider both the attribute
      	and the alignment bits.
      	* c-common.c (c_init_attributes): Optionally issue a warning for
      	zero alignment.
      
      gcc/testsuite/ChangeLog:
      
      	PR c/88172
      	PR testsuite/88208
      	* gcc.dg/attr-aligned-2.c: New test.
      	* gcc.dg/builtin-has-attribute.c: Adjust.
      	* c-c++-common/builtin-has-attribute-2.c: Same.
      	* c-c++-common/builtin-has-attribute-3.c: Same.
      	* c-c++-common/builtin-has-attribute-4.c: Same.
      	* c-c++-common/builtin-has-attribute-5.c: New test.
      	* gcc.target/aarch64/attr-aligned.c: Same.
      	* gcc.target/i386/attr-aligned.c: Same.
      	* gcc.target/powerpc/attr-aligned.c: Same.
      	* gcc.target/sparc/attr-aligned.c: Same.
      
      From-SVN: r266633
      Martin Sebor committed
    • Fix thinko in transition to memop_ret type (PR middle-end/88246). · 2831adb5
      2018-11-29  Martin Liska  <mliska@suse.cz>
      
      	PR middle-end/88246
      	* builtins.c (expand_movstr): Fix thinko introduced
      	when switching to the new enum.
      
      From-SVN: r266631
      Martin Liska committed
    • Add a new option -flive-patching={inline-only-static|inline-clone} · 6fd6a2ff
      to support live patching in GCC.
      
      2018-11-29  qing zhao  <qing.zhao@oracle.com>
      
      gcc/ChangeLog:
      
      	* cif-code.def (EXTERN_LIVE_ONLY_STATIC): New CIF code.
      	* common.opt: Add -flive-patching flag.
      	* doc/invoke.texi: Document -flive-patching.
      	* flag-types.h (enum live_patching_level): New enum.
      	* ipa-inline.c (can_inline_edge_p): Disable external functions from
      	inlining when flag_live_patching is LIVE_PATCHING_INLINE_ONLY_STATIC.
      	* opts.c (control_options_for_live_patching): New function.
      	(finish_options): Make flag_live_patching incompatible with flag_lto.
      	Control IPA optimizations based on different levels of 
      	flag_live_patching.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/live-patching-1.c: New test.
      	* gcc.dg/live-patching-2.c: New test.
      	* gcc.dg/live-patching-3.c: New test.
      	* gcc.dg/tree-ssa/writeonly-3.c: New test.
      	* gcc.target/i386/ipa-stack-alignment-2.c: New test.
      
      From-SVN: r266627
      Qing Zhao committed
    • match.pd (sinh (atanh (x))): New simplification rules. · 4aff6d17
      	* match.pd (sinh (atanh (x))): New simplification rules.
      	(cosh (atanh (x))): Likewise.
      
      	* gcc.dg/sinhatanh-1.c: New test.
      	* gcc.dg/sinhatanh-2.c: New test.
      	* gcc.dg/sinhatanh-3.c: New test.
      
      From-SVN: r266625
      Giuliano Belinassi committed
    • Only include bits/stl_algo.h for C++20. · 355c62ce
      2018-11-29  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Only include bits/stl_algo.h for C++20.
      	* include/std/deque: Only include bits/stl_algo.h for C++20.
      	* include/std/string: Ditto.
      	* include/std/vector: Ditto.
      
      From-SVN: r266624
      Edward Smith-Rowland committed
    • re PR target/54700 (Optimize away x<0 as mask argument of a blend.) · fe907c1f
      	PR target/54700
      	* config/i386/sse.md (ssebytemode): Add V16SI, V8SI and V4SI entries.
      	(ssefltmodesuffix, ssefltvecmode): New define_mode_attrs.
      	(*<sse4_1>_blendv<ssemodesuffix><avxsizesuffix>_lt,
      	*<sse4_1>_blendv<ssefltmodesuffix><avxsizesuffix>_ltint,
      	*<sse4_1_avx2>_pblendvb_lt): New define_insns.
      
      	* g++.target/i386/sse4_1-pr54700-1.C: New test.
      	* g++.target/i386/sse4_1-pr54700-2.C: New test.
      	* g++.target/i386/avx-pr54700-1.C: New test.
      	* g++.target/i386/avx-pr54700-2.C: New test.
      	* g++.target/i386/avx2-pr54700-1.C: New test.
      	* g++.target/i386/avx2-pr54700-2.C: New test.
      	* g++.target/i386/sse4_1-check.h: New file.
      	* g++.target/i386/avx-check.h: New file.
      	* g++.target/i386/avx2-check.h: New file.
      	* g++.target/i386/m128-check.h: New file.
      	* g++.target/i386/m256-check.h: New file.
      	* g++.target/i386/avx-os-support.h: New file.
      
      From-SVN: r266621
      Jakub Jelinek committed