1. 16 Dec, 2018 9 commits
  2. 15 Dec, 2018 11 commits
    • re PR c++/88482 (ICE when wrongly declaring __cxa_allocate_exception) · 784417d1
      	PR c++/88482
      	* except.c (verify_library_fn): New function.
      	(declare_library_fn): Use it.  Initialize TM even if the non-TM
      	library function has been user declared.
      	(do_end_catch): Don't set TREE_NOTHROW on error_mark_node.
      	(expand_start_catch_block): Don't call initialize_handler_parm
      	for error_mark_node.
      	(build_throw): Use verify_library_fn.  Initialize TM even if the
      	non-TM library function has been user declared.  Don't crash if
      	any library fn is error_mark_node.
      
      	* g++.dg/eh/builtin5.C: New test.
      	* g++.dg/eh/builtin6.C: New test.
      	* g++.dg/eh/builtin7.C: New test.
      	* g++.dg/eh/builtin8.C: New test.
      	* g++.dg/eh/builtin9.C: New test.
      	* g++.dg/eh/builtin10.C: New test.
      	* g++.dg/eh/builtin11.C: New test.
      	* g++.dg/parse/crash55.C: Adjust expected diagnostics.
      
      	* eh_cpp.cc (__cxa_throw): Change DEST argument type from
      	void * to void (*) (void *).
      	(_ITM_cxa_throw): Likewise.
      	* libitm.h (_ITM_cxa_throw): Likewise.
      	* libitm.texi (_ITM_cxa_throw): Likewise.
      
      From-SVN: r267179
      Jakub Jelinek committed
    • re PR fortran/88138 (ICE in gfc_arith_concat, at fortran/arith.c:1007) · e310b381
      2019-12-15  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/88138
      	* decl.c (variable_decl): Check that a derived isn't being assigned
      	an incompatible entity in an initialization.
       
      2019-12-15  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/88138
      	* gfortran.dg/pr88138.f90: new test.
      
      From-SVN: r267177
      Steven G. Kargl committed
    • Small lambda instantiation tweak. · 54d04ce9
      While looking at something else I noticed that we were passing 0 to the
      "nonclass" parameter here; we might as well pass 1, since capture proxies
      are always at block scope.
      
      	* pt.c (tsubst_expr) [DECL_EXPR]: Ignore class-scope bindings when
      	looking up a capture proxy.
      
      From-SVN: r267176
      Jason Merrill committed
    • cgraph.h (cgraph_node): Add predicate prevailing_p. · f714ecf5
      
      	* cgraph.h (cgraph_node): Add predicate prevailing_p.
      	(cgraph_edge): Add predicate possible_call_in_translation_unit_p.
      	* ipa-prop.c (ipa_write_jump_function): Optimize streaming of ADDR_EXPR.
      	(ipa_read_jump_function): Add prevails parameter; optimize streaming.
      	(ipa_read_edge_info): Break out from ...
      	(ipa_read_node_info): ... here; optimize streaming.
      	* cgraph.c (cgraph_edge::possibly_call_in_translation_unit_p): New
      	predicate.
      
      From-SVN: r267175
      Jan Hubicka committed
    • ipa-utils.c (ipa_merge_profiles): Do no merging when source function has zero count. · 6263c29d
      
      	* ipa-utils.c (ipa_merge_profiles): Do no merging when source function
      	has zero count.
      
      From-SVN: r267174
      Jan Hubicka committed
    • re PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing… · 305f1fb7
      re PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing with "not suitable for scatter store")
      
      	PR tree-optimization/88464
      	PR target/88498
      	* tree-vect-stmts.c (vect_build_gather_load_calls): For NARROWING
      	and mask with integral masktype, don't try to permute mask vectors,
      	instead emit VEC_UNPACK_{LO,HI}_EXPR.  Fix up NOP_EXPR operand.
      	(vectorizable_store): Handle masked scatters with decl and integral
      	mask type.
      	(permute_vec_elements): Allow scalar_dest to be NULL.
      	* config/i386/i386.c (ix86_get_builtin)
      	<case IX86_BUILTIN_GATHER3ALTDIV16SF>: Use lowpart_subreg for masks.
      	<case IX86_BUILTIN_GATHER3ALTDIV8SF>: Don't assume mask and src have
      	to be the same.
      
      	* gcc.target/i386/avx512f-pr88462-1.c: Rename to ...
      	* gcc.target/i386/avx512f-pr88464-1.c: ... this.  Fix up PR number.
      	Expect 4 vectorized loops instead of 3.
      	(f4): New function.
      	* gcc.target/i386/avx512f-pr88462-2.c: Rename to ...
      	* gcc.target/i386/avx512f-pr88464-2.c: ... this.  Fix up PR number
      	and #include.
      	(avx512f_test): Prepare arguments for f4 and check the results.
      	* gcc.target/i386/avx512f-pr88464-3.c: New test.
      	* gcc.target/i386/avx512f-pr88464-4.c: New test.
      
      From-SVN: r267170
      Jakub Jelinek committed
    • re PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing… · b1985ca0
      re PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing with "not suitable for scatter store")
      
      	PR tree-optimization/88464
      	PR target/88498
      	* tree-vect-stmts.c (vect_build_gather_load_calls): For NARROWING
      	and mask with integral masktype, don't try to permute mask vectors,
      	instead emit VEC_UNPACK_{LO,HI}_EXPR.  Fix up NOP_EXPR operand.
      	(vectorizable_store): Handle masked scatters with decl and integral
      	mask type.
      	(permute_vec_elements): Allow scalar_dest to be NULL.
      	* config/i386/i386.c (ix86_get_builtin)
      	<case IX86_BUILTIN_GATHER3ALTDIV16SF>: Use lowpart_subreg for masks.
      	<case IX86_BUILTIN_GATHER3ALTDIV8SF>: Don't assume mask and src have
      	to be the same.
      
      	* gcc.target/i386/avx512f-pr88462-1.c: Rename to ...
      	* gcc.target/i386/avx512f-pr88464-1.c: ... this.  Fix up PR number.
      	Expect 4 vectorized loops instead of 3.
      	(f4): New function.
      	* gcc.target/i386/avx512f-pr88462-2.c: Rename to ...
      	* gcc.target/i386/avx512f-pr88464-2.c: ... this.  Fix up PR number
      	and #include.
      	(avx512f_test): Prepare arguments for f4 and check the results.
      	* gcc.target/i386/avx512f-pr88464-3.c: New test.
      	* gcc.target/i386/avx512f-pr88464-4.c: New test.
      
      From-SVN: r267169
      Jakub Jelinek committed
    • ipa.c (cgraph_build_static_cdtor_1): Add OPTIMIZATION and TARGET parameters. · ee34ebba
      
      	* ipa.c (cgraph_build_static_cdtor_1): Add OPTIMIZATION and TARGET
      	parameters.
      	(cgraph_build_static_cdtor): Update.
      	(build_cdtor): Use OPTIMIZATION and TARGET of the first real cdtor
      	callsed.
      
      From-SVN: r267168
      Jan Hubicka committed
    • re PR c++/84644 (internal compiler error: in warn_misplaced_attr_for_class_type, at cp/decl.c:4718) · 1039d00c
      /cp
      2018-12-15  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/84644
      	* decl.c (check_tag_decl): A decltype with no declarator
      	doesn't declare anything.
      
      /testsuite
      2018-12-15  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/84644
      	* g++.dg/cpp0x/decltype68.C: New.
      	* g++.dg/cpp0x/decltype-33838.C: Adjust.
      	* g++.dg/template/spec32.C: Likewise.
      	* g++.dg/template/ttp22.C: Likewise.
      
      From-SVN: r267165
      Paolo Carlini committed
    • [RS6000] Use gen_hard_reg_clobber in rs6000.c · 590f447b
      I noticed when looking at PR88311 that rs6000_call_sysv should be
      using gen_hard_reg_clobber (as the sysv call insns did prior to
      introducing rs6000_call_sysv).  This patch fixes that minor
      regression, and other like places in rs6000.c.
      
      	* config/rs6000/rs6000.c (generate_set_vrsave, rs6000_emit_savres_rtx),
      	(rs6000_emit_prologue, rs6000_call_aix, rs6000_call_sysv),
      	(rs6000_call_darwin_1): Use gen_hard_reg_clobber.
      
      From-SVN: r267164
      Alan Modra committed
    • Daily bump. · 0e29ebb8
      From-SVN: r267163
      GCC Administrator committed
  3. 14 Dec, 2018 20 commits
    • re PR target/88489 (FAIL: gcc.target/i386/avx512f-vfixupimmss-2.c execution test) · 07179718
      	PR target/88489
      	* config/i386/sse.md (UNSPEC_SFIXUPIMM): New unspec enumerator.
      	(avx512f_sfixupimm<mode><mask_name><round_saeonly_name>): Use it
      	instead of UNSPEC_FIXUPIMM.
      
      	* gcc.target/i386/avx512vl-vfixupimmsd-2.c: New test.
      	* gcc.target/i386/avx512vl-vfixupimmss-2.c: New test.
      
      From-SVN: r267160
      Jakub Jelinek committed
    • re PR rtl-optimization/88478 (valgrind error in cselib_record_sets) · bbc8d04f
      	PR rtl-optimization/88478
      	* cselib.c (cselib_record_sets): Move sets[i].src_elt tests
      	after REG_P (dest) test.
      
      	* g++.dg/opt/pr88478.C: New test.
      
      From-SVN: r267159
      Jakub Jelinek committed
    • PR tree-optimization/88372 - alloc_size attribute is ignored on function pointers · 302db8ba
      gcc/ChangeLog:
      
      	PR tree-optimization/88372
      	* calls.c (maybe_warn_alloc_args_overflow): Handle function pointers.
      	* tree-object-size.c (alloc_object_size): Same.  Simplify.
      	* doc/extend.texi (Object Size Checking): Update.
      	(Other Builtins): Add __builtin_object_size.
      	(Common Type Attributes): Add alloc_size.
      	(Common Variable Attributes): Ditto.
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/88372
      	* gcc.dg/Walloc-size-larger-than-18.c: New test.
      	* gcc.dg/builtin-object-size-19.c: Same.
      
      From-SVN: r267158
      Martin Sebor committed
    • PR tree-optimization/87096 - Optimised snprintf is not POSIX conformant · 3e6837c2
      gcc/ChangeLog:
      
      	PR rtl-optimization/87096
      	* gimple-ssa-sprintf.c (sprintf_dom_walker::handle_gimple_call): Avoid
      	folding calls whose bound may exceed INT_MAX.  Diagnose bound ranges
      	that exceed the limit.
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/87096
      	* gcc.dg/tree-ssa/builtin-snprintf-4.c: New test.
      
      From-SVN: r267157
      Martin Sebor committed
    • PR 79738 - Documentation for __attribute__((const)) slightly misleading · 92863013
      gcc/ChangeLog:
      	* doc/extend.texi (attribute const, pure): Clarify.
      
      From-SVN: r267156
      Martin Sebor committed
    • [PR c++/87814] undefer deferred noexcept on tsubst if request · 3fd156b1
      tsubst_expr and tsubst_copy_and_build are not expected to handle
      DEFERRED_NOEXCEPT exprs, but if tsubst_exception_specification takes a
      DEFERRED_NOEXCEPT expr with !defer_ok, it just passes the expr on for
      tsubst_copy_and_build to barf.
      
      This patch arranges for tsubst_exception_specification to combine the
      incoming args with those already stored in a DEFERRED_NOEXCEPT, and
      then substitute them into the pattern, when retaining a deferred
      noexcept is unacceptable.
      
      
      for  gcc/cp/ChangeLog
      
      	PR c++/87814
      	* pt.c (tsubst_exception_specification): Handle
      	DEFERRED_NOEXCEPT with !defer_ok.
      
      for  gcc/testsuite/ChangeLog
      
      	PR c++/87814
      	* g++.dg/cpp1z/pr87814.C: New.
      
      From-SVN: r267155
      Alexandre Oliva committed
    • x86; Add -mmanual-endbr and cf_check function attribute · 06553c89
      Currently GCC inserts ENDBR instruction at entries of all non-static
      functions, unless LTO compilation is used.  Marking all functions,
      which are not called indirectly with nocf_check attribute, is not
      ideal since 99% of functions in a program may be of this kind.
      
      This patch adds -mmanual-endbr and cf_check function attribute.  They
      can be used together with -fcf-protection such that ENDBR instruction
      is inserted only at entries of functions with cf_check attribute.  It
      can limit number of ENDBR instructions to reduce program size.
      
      gcc/
      
      	* config/i386/i386.c (rest_of_insert_endbranch): Insert ENDBR
      	at the function entry only when -mmanual-endbr isn't used or
      	there is cf_check function attribute.
      	(ix86_attribute_table): Add cf_check.
      	* config/i386/i386.opt: Add -mmanual-endbr.
      	* doc/extend.texi: Document cf_check attribute.
      	* doc/invoke.texi: Document -mmanual-endbr.
      
      gcc/testsuite/
      
      	* gcc.target/i386/cf_check-1.c: New test.
      	* gcc.target/i386/cf_check-2.c: Likewise.
      	* gcc.target/i386/cf_check-3.c: Likewise.
      	* gcc.target/i386/cf_check-4.c: Likewise.
      	* gcc.target/i386/cf_check-5.c: Likewise.
      
      From-SVN: r267154
      H.J. Lu committed
    • Missing changes from "Adjust copy/copyin/copyout/create for OpenACC 2.5" · c759830b
      Most of that patch's changes were already committed as part of r261813 "Update
      OpenACC data clause semantics to the 2.5 behavior", but not all of them.
      
      	libgomp/
      	* oacc-mem.c (acc_present_or_create): Remove definition and change
      	to alias of acc_create.
      	(acc_present_or_copyin): Remove definition and change to alias of
      	acc_copyin.
      	* oacc-parallel.c (GOACC_enter_exit_data): Call acc_create instead
      	of acc_present_or_create.
      	* testsuite/libgomp.oacc-c-c++-common/data-already-1.c: Remove.
      	* testsuite/libgomp.oacc-c-c++-common/data-already-2.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/data-already-3.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/data-already-4.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/data-already-5.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/data-already-6.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/data-already-7.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/data-already-8.c: Likewise.
      	* testsuite/libgomp.oacc-fortran/data-already-1.f: Likewise.
      	* testsuite/libgomp.oacc-fortran/data-already-2.f: Likewise.
      	* testsuite/libgomp.oacc-fortran/data-already-3.f: Likewise.
      	* testsuite/libgomp.oacc-fortran/data-already-4.f: Likewise.
      	* testsuite/libgomp.oacc-fortran/data-already-5.f: Likewise.
      	* testsuite/libgomp.oacc-fortran/data-already-6.f: Likewise.
      	* testsuite/libgomp.oacc-fortran/data-already-7.f: Likewise.
      	* testsuite/libgomp.oacc-fortran/data-already-8.f: Likewise.
      
      Co-Authored-By: Chung-Lin Tang <cltang@codesourcery.com>
      
      From-SVN: r267153
      Thomas Schwinge committed
    • [PR88495] An OpenACC async queue is always synchronized with itself · f847198e
      An OpenACC async queue is always synchronized with itself, so invocations like
      "#pragma acc wait(0) async(0)", or "acc_wait_async (0, 0)" don't make a lot of
      sense, but are still valid.
      
      	libgomp/
      	PR libgomp/88495
      	* plugin/plugin-nvptx.c (nvptx_wait_async): Don't refuse
      	"identical parameters".
      	* testsuite/libgomp.oacc-c-c++-common/asyncwait-nop-1.c: Update.
      	* testsuite/libgomp.oacc-c-c++-common/lib-80.c: Remove.
      
      From-SVN: r267152
      Thomas Schwinge committed
    • [PR88484] OpenACC wait directive without wait argument but with async clause · c8ab8aab
      We don't correctly handle "#pragma acc wait async (a)" for "a >= 0", handling
      as a no-op whereas it should enqueue the appropriate wait operations on
      "async (a)".
      
      	libgomp/
      	PR libgomp/88484
      	* oacc-parallel.c (GOACC_wait): Correct handling for "async >= 0".
      	* testsuite/libgomp.oacc-c-c++-common/asyncwait-nop-1.c: New file.
      
      From-SVN: r267151
      Thomas Schwinge committed
    • [PR88407] [OpenACC] Correctly handle unseen async-arguments · 1404af62
      ... which turn the operation into a no-op.
      
      	libgomp/
      	PR libgomp/88407
      	* plugin/plugin-nvptx.c (nvptx_async_test, nvptx_wait)
      	(nvptx_wait_async): Unseen async-argument is a no-op.
      	* testsuite/libgomp.oacc-c-c++-common/async_queue-1.c: Update.
      	* testsuite/libgomp.oacc-c-c++-common/data-2-lib.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/data-2.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/lib-79.c: Likewise.
      	* testsuite/libgomp.oacc-fortran/lib-12.f90: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/lib-71.c: Merge into...
      	* testsuite/libgomp.oacc-c-c++-common/lib-69.c: ... this.  Update.
      	* testsuite/libgomp.oacc-c-c++-common/lib-77.c: Merge into...
      	* testsuite/libgomp.oacc-c-c++-common/lib-74.c: ... this.  Update
      
      From-SVN: r267150
      Thomas Schwinge committed
    • Revise libgomp.oacc-c-c++-common/data-2-lib.c, libgomp.oacc-c-c++-common/data-2.c · 7de562ee
      These are meant to be functionally equivalent (but no longer are), just using
      different means.  Also, use the OpenACC "*_async" functions recently added.
      
      	libgomp/
      	* testsuite/libgomp.oacc-c-c++-common/data-2-lib.c: Revise.
      	* testsuite/libgomp.oacc-c-c++-common/data-2.c: Likewise.
      
      From-SVN: r267149
      Thomas Schwinge committed
    • Correctly describe OpenACC async/wait dependencies · 17469af7
      	libgomp/
      	* testsuite/libgomp.oacc-c-c++-common/data-2-lib.c: Adjust.
      	* testsuite/libgomp.oacc-c-c++-common/data-2.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/data-3.c: Likewise.
      
      Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
      
      From-SVN: r267148
      Chung-Lin Tang committed
    • [PR88370] acc_get_cuda_stream/acc_set_cuda_stream: acc_async_sync, acc_async_noval · 18c247cc
      Per my reading of the OpenACC specification (and as supported by secondary
      documentation, such as code examples, or presentations), it's valid to call
      "acc_get_cuda_stream"/"acc_set_cuda_stream" also with "acc_async_sync",
      "acc_async_noval" arguments, not just with the nonnegative values as currently
      implemented.
      
      	libgomp/
      	PR libgomp/88370
      	* libgomp.texi (acc_get_current_cuda_context, acc_get_cuda_stream)
      	(acc_set_cuda_stream): Clarify.
      	* oacc-cuda.c (acc_get_cuda_stream, acc_set_cuda_stream): Use
      	"async_valid_p".
      	* plugin/plugin-nvptx.c (nvptx_set_cuda_stream): Refuse "async ==
      	acc_async_sync".
      	* testsuite/libgomp.oacc-c-c++-common/acc_set_cuda_stream-1.c: New file.
      	* testsuite/libgomp.oacc-c-c++-common/async_queue-1.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/lib-84.c: Update.
      	* testsuite/libgomp.oacc-c-c++-common/lib-85.c: Likewise.
      
      From-SVN: r267147
      Thomas Schwinge committed
    • Add user-friendly diagnostics for OpenACC loop parallelism assigned · 5d390fd3
      	gcc/
      	* omp-offload.c (inform_oacc_loop): New function.
      	(execute_oacc_device_lower): Use it to display loop parallelism.
      	gcc/testsuite/
      	* c-c++-common/goacc/note-parallelism.c: New test.
      	* gfortran.dg/goacc/note-parallelism.f90: New test.
      	* c-c++-common/goacc/classify-kernels-unparallelized.c: Update.
      	* c-c++-common/goacc/classify-kernels.c: Likewise.
      	* c-c++-common/goacc/classify-parallel.c: Likewise.
      	* c-c++-common/goacc/classify-routine.c: Likewise.
      	* c-c++-common/goacc/kernels-1.c: Likewise.
      	* c-c++-common/goacc/kernels-double-reduction-n.c: Likewise.
      	* c-c++-common/goacc/kernels-double-reduction.c: Likewise.
      	* gfortran.dg/goacc/classify-kernels-unparallelized.f95: Likewise.
      	* gfortran.dg/goacc/classify-kernels.f95: Likewise.
      	* gfortran.dg/goacc/classify-parallel.f95: Likewise.
      	* gfortran.dg/goacc/classify-routine.f95: Likewise.
      	* gfortran.dg/goacc/kernels-loop-inner.f95: Likewise.
      
      Co-Authored-By: Cesar Philippidis <cesar@codesourcery.com>
      
      From-SVN: r267146
      Thomas Schwinge committed
    • Repair liboffloadmic after "(Partial) OpenMP 5.0 support for GCC 9" · 890b87d1
      ..., which now failed to build, as follows:
      
          In file included from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                           from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
          [...]/source-gcc/liboffloadmic/runtime/offload.h:220:12: error: conflicting declaration of C function 'int omp_target_is_present(void*, int)'
            220 | extern int omp_target_is_present(
                |            ^~~~~~~~~~~~~~~~~~~~~
          In file included from [...]/source-gcc/liboffloadmic/runtime/offload.h:45,
                           from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                           from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
          ./../libgomp/omp.h:166:12: note: previous declaration 'int omp_target_is_present(const void*, int)'
            166 | extern int omp_target_is_present (const void *, int) __GOMP_NOTHROW;
                |            ^~~~~~~~~~~~~~~~~~~~~
          In file included from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                           from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
          [...]/source-gcc/liboffloadmic/runtime/offload.h:236:12: error: conflicting declaration of C function 'int omp_target_memcpy(void*, void*, size_t, size_t, size_t, int, int)'
            236 | extern int omp_target_memcpy(
                |            ^~~~~~~~~~~~~~~~~
          In file included from [...]/source-gcc/liboffloadmic/runtime/offload.h:45,
                           from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                           from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
          ./../libgomp/omp.h:167:12: note: previous declaration 'int omp_target_memcpy(void*, const void*, long unsigned int, long unsigned int, long unsigned int, int, int)'
            167 | extern int omp_target_memcpy (void *, const void *, __SIZE_TYPE__,
                |            ^~~~~~~~~~~~~~~~~
          In file included from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                           from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
          [...]/source-gcc/liboffloadmic/runtime/offload.h:262:12: error: conflicting declaration of C function 'int omp_target_memcpy_rect(void*, void*, size_t, int, const size_t*, const size_t*, const size_t*, const size_t*, const size_t*, int, int)'
            262 | extern int omp_target_memcpy_rect(
                |            ^~~~~~~~~~~~~~~~~~~~~~
          In file included from [...]/source-gcc/liboffloadmic/runtime/offload.h:45,
                           from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                           from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
          ./../libgomp/omp.h:170:12: note: previous declaration 'int omp_target_memcpy_rect(void*, const void*, long unsigned int, int, const long unsigned int*, const long unsigned int*, const long unsigned int*, const long unsigned int*, const long unsigned int*, int, int)'
            170 | extern int omp_target_memcpy_rect (void *, const void *, __SIZE_TYPE__, int,
                |            ^~~~~~~~~~~~~~~~~~~~~~
          In file included from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                           from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
          [...]/source-gcc/liboffloadmic/runtime/offload.h:285:12: error: conflicting declaration of C function 'int omp_target_associate_ptr(void*, void*, size_t, size_t, int)'
            285 | extern int omp_target_associate_ptr(
                |            ^~~~~~~~~~~~~~~~~~~~~~~~
          In file included from [...]/source-gcc/liboffloadmic/runtime/offload.h:45,
                           from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                           from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
          ./../libgomp/omp.h:177:12: note: previous declaration 'int omp_target_associate_ptr(const void*, const void*, long unsigned int, long unsigned int, int)'
            177 | extern int omp_target_associate_ptr (const void *, const void *, __SIZE_TYPE__,
                |            ^~~~~~~~~~~~~~~~~~~~~~~~
          In file included from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                           from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
          [...]/source-gcc/liboffloadmic/runtime/offload.h:299:12: error: conflicting declaration of C function 'int omp_target_disassociate_ptr(void*, int)'
            299 | extern int omp_target_disassociate_ptr(
                |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
          In file included from [...]/source-gcc/liboffloadmic/runtime/offload.h:45,
                           from [...]/source-gcc/liboffloadmic/runtime/offload_common.h:43,
                           from [...]/source-gcc/liboffloadmic/runtime/dv_util.cpp:31:
          ./../libgomp/omp.h:179:12: note: previous declaration 'int omp_target_disassociate_ptr(const void*, int)'
            179 | extern int omp_target_disassociate_ptr (const void *, int) __GOMP_NOTHROW;
                |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
          Makefile:904: recipe for target 'liboffloadmic_target_la-dv_util.lo' failed
          make[3]: *** [liboffloadmic_target_la-dv_util.lo] Error 1
          make[3]: Leaving directory '[...]/build-gcc-offload-x86_64-intelmicemul-linux-gnu/x86_64-intelmicemul-linux-gnu/liboffloadmic'
          Makefile:1031: recipe for target 'all-recursive' failed
          make[2]: *** [all-recursive] Error 1
          make[2]: Leaving directory '[...]/build-gcc-offload-x86_64-intelmicemul-linux-gnu/x86_64-intelmicemul-linux-gnu/liboffloadmic'
          Makefile:12707: recipe for target 'all-target-liboffloadmic' failed
          make[1]: *** [all-target-liboffloadmic] Error 2
          make[1]: Leaving directory '[...]/build-gcc-offload-x86_64-intelmicemul-linux-gnu'
          Makefile:941: recipe for target 'all' failed
          make: *** [all] Error 2
      
      	liboffloadmic/
      	* runtime/offload.h (omp_target_is_present, omp_target_memcpy)
      	(omp_target_memcpy_rect, omp_target_associate_ptr)
      	(omp_target_disassociate_ptr): Adjust to libgomp changes.
      
      From-SVN: r267145
      Thomas Schwinge committed
    • [PR86823] retain deferred access checks from outside firewall · b9677834
      We used to preserve deferred access check along with resolved template
      ids, but a tentative parsing firewall introduced additional layers of
      deferred access checks, so that we don't preserve the checks we
      want to any more.
      
      This patch moves the deferred access checks from outside the firewall
      into it.
      
      
      From: Jason Merrill <jason@redhat.com>
      for  gcc/cp/ChangeLog
      
      	PR c++/86823
      	* parser.c (cp_parser_template_id): Rearrange deferred access
      	checks into the firewall.
      
      From: Alexandre Oliva <aoliva@redhat.com>
      for  gcc/testsuite/ChangeLog
      
      	PR c++/86823
      	* g++.dg/pr86823.C: New.
      
      From-SVN: r267144
      Alexandre Oliva committed
    • re PR c++/82294 (Array of objects with constexpr constructors initialized from… · 0fca07e3
      re PR c++/82294 (Array of objects with constexpr constructors initialized from space-inefficient memory image)
      
      	PR c++/82294
      	PR c++/87436
      	* expr.h (categorize_ctor_elements): Add p_unique_nz_elts argument.
      	* expr.c (categorize_ctor_elements_1): Likewise.  Compute it like
      	p_nz_elts, except don't multiply it by mult.  Adjust recursive call.
      	Fix up COMPLEX_CST handling.
      	(categorize_ctor_elements): Add p_unique_nz_elts argument, initialize
      	it and pass it through to categorize_ctor_elements_1.
      	(mostly_zeros_p, all_zeros_p): Adjust categorize_ctor_elements callers.
      	* gimplify.c (gimplify_init_constructor): Likewise.  Don't force
      	ctor into readonly data section if num_unique_nonzero_elements is
      	smaller or equal to 1/8 of num_nonzero_elements and size is >= 64
      	bytes.
      
      	* g++.dg/tree-ssa/pr82294.C: New test.
      	* g++.dg/tree-ssa/pr87436.C: New test.
      
      From-SVN: r267143
      Jakub Jelinek committed
    • re PR c++/82294 (Array of objects with constexpr constructors initialized from… · faa9232d
      re PR c++/82294 (Array of objects with constexpr constructors initialized from space-inefficient memory image)
      
      	PR c++/82294
      	PR c++/87436
      	* init.c (build_vec_init): Change num_initialized_elts type from int
      	to HOST_WIDE_INT.  Build a RANGE_EXPR if e needs to be repeated more
      	than once.
      
      From-SVN: r267142
      Jakub Jelinek committed
    • ARM] Improve robustness of -mslow-flash-data · 8d33eae8
      Current code to handle -mslow-flash-data in machine description files
      suffers from a number of issues which this patch fixes:
      
      1) The insn_and_split in vfp.md to load a generic floating-point
      constant via GPR first and move it to VFP register are guarded by
      !reload_completed which is forbidden explicitely in the GCC internals
      documentation section 17.2 point 3;
      
      2) A number of testcase in the testsuite ICEs under -mslow-flash-data
      when targeting the hardfloat ABI [1];
      
      3) Instructions performing load from literal pool are not disabled.
      
      These problems are addressed by 2 separate actions:
      
      1) Making the splitters take a clobber and changing the expanders
      accordingly to generate a mov with clobber in cases where a literal
      pool would be used. The splitter can thus be enabled after reload since
      it does not call gen_reg_rtx anymore;
      
      2) Adding new predicates and constraints to disable literal pool loads
      in existing instructions when -mslow-flash-data is in effect.
      
      The patch also rework the splitter for DFmode slightly to generate an
      intermediate DI load instead of 2 intermediate SI loads, thus relying on
      the existing DI splitters instead of redoing their job. At last, the
      patch adds some missing arm_fp_ok effective target to some of the
      slow-flash-data testcases.
      
      [1]
      c-c++-common/Wunused-var-3.c
      gcc.c-torture/compile/pr72771.c
      gcc.c-torture/compile/vector-5.c
      gcc.c-torture/compile/vector-6.c
      gcc.c-torture/execute/20030914-1.c
      gcc.c-torture/execute/20050316-1.c
      gcc.c-torture/execute/pr59643.c
      gcc.dg/builtin-tgmath-1.c
      gcc.dg/debug/pr55730.c
      gcc.dg/graphite/interchange-7.c
      gcc.dg/pr56890-2.c
      gcc.dg/pr68474.c
      gcc.dg/pr80286.c
      gcc.dg/torture/pr35227.c
      gcc.dg/torture/pr65077.c
      gcc.dg/torture/pr86363.c
      g++.dg/torture/pr81112.C
      g++.dg/torture/pr82985.C
      g++.dg/warn/Wunused-var-7.C
      and a lot more in libstdc++ in special_functions/*_comp_ellint_* and
      special_functions/*_ellint_* directories.
      
      2018-12-14  Thomas Preud'homme  <thomas.preudhomme@arm.com>
      
          gcc/
          * config/arm/arm.md (arm_movdi): Split if -mslow-flash-data and
          source is a constant that would be loaded by literal pool.
          (movsf expander): Generate a no_literal_pool_sf_immediate insn if
          -mslow-flash-data is present, targeting hardfloat ABI and source is a
          float constant that cannot be loaded via vmov.
          (movdf expander): Likewise but generate a no_literal_pool_df_immediate
          insn.
          (arm_movsf_soft_insn): Split if -mslow-flash-data and source is a
          float constant that would be loaded by literal pool.
          (softfloat constant movsf splitter): Splitter for the above case.
          (movdf_soft_insn): Split if -mslow-flash-data and source is a float
          constant that would be loaded by literal pool.
          (softfloat constant movdf splitter): Splitter for the above case.
          * config/arm/constraints.md (Pz): Document existing constraint.
          (Ha): Define constraint.
          (Tu): Likewise.
          * config/arm/predicates.md (hard_sf_operand): New predicate.
          (hard_df_operand): Likewise.
          * config/arm/thumb2.md (thumb2_movsi_insn): Split if
          -mslow-flash-data and constant would be loaded by literal pool.
          * constant/arm/vfp.md (thumb2_movsi_vfp): Likewise and disable constant
          load in VFP register.
          (movdi_vfp): Likewise.
          (thumb2_movsf_vfp): Use hard_sf_operand as predicate for source to
          prevent match for a constant load if -mslow-flash-data and constant
          cannot be loaded via vmov.  Adapt constraint accordingly by
          using Ha instead of E for generic floating-point constant load.
          (thumb2_movdf_vfp): Likewise using hard_df_operand predicate instead.
          (no_literal_pool_df_immediate): Add a clobber to use as the
          intermediate general purpose register and also enable it after reload
          but disable it constant is a valid FP constant.  Add constraints and
          generate a DI intermediate load rather than 2 SI loads.
          (no_literal_pool_sf_immediate): Add a clobber to use as the
          intermediate general purpose register and also enable it after
          reload.
      
      2018-11-14  Thomas Preud'homme  <thomas.preudhomme@arm.com>
      
          gcc/testsuite/
          * gcc.target/arm/thumb2-slow-flash-data-2.c: Require arm_fp_ok
          effective target.
          * gcc.target/arm/thumb2-slow-flash-data-3.c: Likewise.
          * gcc.target/arm/thumb2-slow-flash-data-4.c: Likewise.
          * gcc.target/arm/thumb2-slow-flash-data-5.c: Likewise.
      
      From-SVN: r267141
      Thomas Preud'homme committed