1. 21 Dec, 2018 4 commits
  2. 20 Dec, 2018 18 commits
    • tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Don't do versioning… · c9aa9108
      tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Don't do versioning for data accesses with misaligned step.
      
      2018-12-20  Joern Rennecke  <joern.rennecke@riscy-ip.com>
      
              * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Don't do
              versioning for data accesses with misaligned step.
      
      From-SVN: r267314
      Joern Rennecke committed
    • C/C++: Add -Waddress-of-packed-member · da77eace
      When address of packed member of struct or union is taken, it may result
      in an unaligned pointer value.  This patch adds -Waddress-of-packed-member
      to check alignment at pointer assignment and warn unaligned address as
      well as unaligned pointer:
      
      $ cat x.i
      struct pair_t
      {
        char c;
        int i;
      } __attribute__ ((packed));
      
      extern struct pair_t p;
      int *addr = &p.i;
      $ gcc -O2 -S x.i
      x.i:8:13: warning: taking address of packed member of ‘struct pair_t’ may result in an unaligned pointer value [-Waddress-of-packed-member]
      8 | int *addr = &p.i;
        |             ^
      
      $ cat c.i
      struct B { int i; };
      struct C { struct B b; } __attribute__ ((packed));
      
      long* g8 (struct C *p) { return p; }
      $ gcc -O2 -S c.i -Wno-incompatible-pointer-types
      c.i: In function ‘g8’:
      c.i:4:18: warning: converting a packed ‘struct C *’ pointer (alignment 1) to ‘long int *’ (alignment 8) may may result in an unaligned pointer value [-Waddress-of-packed-member]
      4 | long* g8 (struct C *p) { return p; }
        |                  ^
      c.i:2:8: note: defined here
      2 | struct C { struct B b; } __attribute__ ((packed));
        |        ^
      $
      
      This warning is enabled by default.  Since read_encoded_value_with_base
      in unwind-pe.h has
      
        union unaligned
          {
            void *ptr;
            unsigned u2 __attribute__ ((mode (HI)));
            unsigned u4 __attribute__ ((mode (SI)));
            unsigned u8 __attribute__ ((mode (DI)));
            signed s2 __attribute__ ((mode (HI)));
            signed s4 __attribute__ ((mode (SI)));
            signed s8 __attribute__ ((mode (DI)));
          } __attribute__((__packed__));
        _Unwind_Internal_Ptr result;
      
      and GCC warns:
      
      gcc/libgcc/unwind-pe.h:210:37: warning: taking address of packed member of 'union unaligned' may result in an unaligned pointer value [-Waddress-of-packed-member]
          result = (_Unwind_Internal_Ptr) u->ptr;
                                          ^
      we need to add GCC pragma to ignore -Waddress-of-packed-member.
      
      gcc/
      
      	PR c/51628
      	* doc/invoke.texi: Document -Wno-address-of-packed-member.
      
      gcc/c-family/
      
      	PR c/51628
      	* c-common.h (warn_for_address_or_pointer_of_packed_member): New.
      	* c-warn.c (check_alignment_of_packed_member): New function.
      	(check_address_of_packed_member): Likewise.
      	(check_and_warn_address_of_packed_member): Likewise.
      	(warn_for_address_or_pointer_of_packed_member): Likewise.
      	* c.opt: Add -Wno-address-of-packed-member.
      
      gcc/c/
      
      	PR c/51628
      	* c-typeck.c (convert_for_assignment): Call
      	warn_for_address_or_pointer_of_packed_member.
      
      gcc/cp/
      
      	PR c/51628
      	* call.c (convert_for_arg_passing): Call
      	warn_for_address_or_pointer_of_packed_member.
      	* typeck.c (convert_for_assignment): Likewise.
      
      gcc/testsuite/
      
      	PR c/51628
      	* c-c++-common/pr51628-1.c: New test.
      	* c-c++-common/pr51628-2.c: Likewise.
      	* c-c++-common/pr51628-3.c: Likewise.
      	* c-c++-common/pr51628-4.c: Likewise.
      	* c-c++-common/pr51628-5.c: Likewise.
      	* c-c++-common/pr51628-6.c: Likewise.
      	* c-c++-common/pr51628-7.c: Likewise.
      	* c-c++-common/pr51628-8.c: Likewise.
      	* c-c++-common/pr51628-9.c: Likewise.
      	* c-c++-common/pr51628-10.c: Likewise.
      	* c-c++-common/pr51628-11.c: Likewise.
      	* c-c++-common/pr51628-12.c: Likewise.
      	* c-c++-common/pr51628-13.c: Likewise.
      	* c-c++-common/pr51628-14.c: Likewise.
      	* c-c++-common/pr51628-15.c: Likewise.
      	* c-c++-common/pr51628-26.c: Likewise.
      	* c-c++-common/pr51628-27.c: Likewise.
      	* c-c++-common/pr51628-28.c: Likewise.
      	* c-c++-common/pr51628-29.c: Likewise.
      	* c-c++-common/pr51628-30.c: Likewise.
      	* c-c++-common/pr51628-31.c: Likewise.
      	* c-c++-common/pr51628-32.c: Likewise.
      	* gcc.dg/pr51628-17.c: Likewise.
      	* gcc.dg/pr51628-18.c: Likewise.
      	* gcc.dg/pr51628-19.c: Likewise.
      	* gcc.dg/pr51628-20.c: Likewise.
      	* gcc.dg/pr51628-21.c: Likewise.
      	* gcc.dg/pr51628-22.c: Likewise.
      	* gcc.dg/pr51628-23.c: Likewise.
      	* gcc.dg/pr51628-24.c: Likewise.
      	* gcc.dg/pr51628-25.c: Likewise.
      	* c-c++-common/asan/misalign-1.c: Add
      	-Wno-address-of-packed-member.
      	* c-c++-common/asan/misalign-2.c: Likewise.
      	* c-c++-common/ubsan/align-2.c: Likewise.
      	* c-c++-common/ubsan/align-4.c: Likewise.
      	* c-c++-common/ubsan/align-6.c: Likewise.
      	* c-c++-common/ubsan/align-7.c: Likewise.
      	* c-c++-common/ubsan/align-8.c: Likewise.
      	* c-c++-common/ubsan/align-10.c: Likewise.
      	* g++.dg/ubsan/align-2.C: Likewise.
      	* gcc.target/i386/avx512bw-vmovdqu16-2.c: Likewise.
      	* gcc.target/i386/avx512f-vmovdqu32-2.c: Likewise.
      	* gcc.target/i386/avx512f-vmovdqu64-2.c: Likewise.
      	* gcc.target/i386/avx512vl-vmovdqu16-2.c: Likewise.
      	* gcc.target/i386/avx512vl-vmovdqu32-2.c: Likewise.
      	* gcc.target/i386/avx512vl-vmovdqu64-2.c: Likewise.
      
      libgcc/
      
      	* unwind-pe.h (read_encoded_value_with_base): Add GCC pragma
      	to ignore -Waddress-of-packed-member.
      
      From-SVN: r267313
      H.J. Lu committed
    • ieee_arithmetic.F90: Re-organize file to eliminate #ifdef ... · 11e07fa4
      2018-12-20  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	* libgfortran/ieee/ieee_arithmetic.F90: Re-organize file to 
      	eliminate #ifdef ... #endif.  No functional change.
      
      From-SVN: r267312
      Steven G. Kargl committed
    • Fix filesystem::path tests that fail on Windows · 080cec7f
      	* testsuite/27_io/filesystem/operations/proximate.cc: Fix test for
      	MinGW.
      	* testsuite/27_io/filesystem/path/append/source.cc: Likewise.
      	* testsuite/27_io/filesystem/path/compare/lwg2936.cc: Likewise.
      
      From-SVN: r267308
      Jonathan Wakely committed
    • re PR target/88457 (ICE: Max. number of generated reload insns per insn is achieved (90)) · 159fdc39
      2018-12-20  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR target/88457
      	* ira-color.c (fast_allocation): Choose the best cost hard reg.
      
      2018-12-20  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR target/88457
      	* ira-color.c (fast_allocation): Choose the best cost hard reg.
      
      From-SVN: r267307
      Vladimir Makarov committed
    • re PR c++/88180 (ICE in vec<tree_node*, va_gc, vl_embed>::quick_push(tree_node* const&)) · 2694cacb
      	PR c++/88180
      	* parser.c (cp_parser_class_specifier_1): If
      	cp_parser_check_type_definition fails, skip default arguments, NSDMIs,
      	etc. like for erroneous template args.
      
      	* g++.dg/parse/pr88180.C: New test.
      	* g++.dg/pr85039-1.C: Don't expect diagnostics inside of the type
      	definition's NSDMIs.
      
      From-SVN: r267306
      Jakub Jelinek committed
    • cp-tree.h (cp_fully_fold_init): Declare. · 50867d20
      	* cp-tree.h (cp_fully_fold_init): Declare.
      	* cp-gimplify.c (cp_fully_fold_init): New function.
      	* typeck2.c (split_nonconstant_init, store_init_value): Use it
      	instead of cp_fully_fold.
      
      From-SVN: r267305
      Jakub Jelinek committed
    • [AArch64][SVE] Add ABS support · 69c5fdcf
      For some reason we missed ABS out of the list of supported integer
      operations when adding the SVE port initially.
      
      2018-12-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/iterators.md (SVE_INT_UNARY, fp_int_op): Add abs.
      	(SVE_FP_UNARY): Sort.
      
      gcc/testsuite/
      	* gcc.target/aarch64/pr64946.c: Force nosve.
      	* gcc.target/aarch64/ssadv16qi.c: Likewise.
      	* gcc.target/aarch64/usadv16qi.c: Likewise.
      	* gcc.target/aarch64/vect-abs-compile.c: Likewise.
      	* gcc.target/aarch64/sve/abs_1.c: New test.
      
      From-SVN: r267304
      Richard Sandiford committed
    • [AArch64][SVE] Fix IFN_COND_FMLA movprfx alternative · 7abc36cc
      This patch fixes a cut-&-pasto in the (match_dup 4) version of
      "cond_<SVE_COND_FP_TERNARY:optab><SVE_F:mode>".  (It's a shame
      that there's so much cut-&-paste in these patterns, but it's hard
      to avoid without more infrastructure.)
      
      2018-12-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/aarch64-sve.md (*cond_<optab><mode>_4): Use
      	sve_fmla_op rather than sve_fmad_op for the movprfx alternative.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/fmla_2.c: New test.
      	* gcc.target/aarch64/sve/fmla_2_run.c: Likewise
      
      From-SVN: r267303
      Richard Sandiford committed
    • PR tree-optimization/84053 - missing -Warray-bounds accessing a local array… · ab3c292e
      PR tree-optimization/84053 - missing -Warray-bounds accessing a local array across inlined function boundaries
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/Warray-bounds-36.c: New test.
      
      From-SVN: r267302
      Martin Sebor committed
    • -Wtautological-compare: fix comparison of macro expansions · 573767d4
      gcc/c-family/ChangeLog:
      	PR c++/87504
      	* c-warn.c (get_outermost_macro_expansion): New function.
      	(spelled_the_same_p): Use it to unwind the macro expansions, and
      	compare the outermost macro in each nested expansion, rather than
      	the innermost.
      
      gcc/testsuite/ChangeLog:
      	PR c++/87504
      	* c-c++-common/Wtautological-compare-8.c: New test.
      
      From-SVN: r267299
      David Malcolm committed
    • [PR 88214] Assert that ptr is a pointer · 49fb2968
      2018-12-20  Martin Jambor  <mjambor@suse.cz>
      
      	PR ipa/88214
      	* tree-ssa-alias.c (ao_ref_init_from_ptr_and_size): Assert that
      	ptr is a pointer.
      
      From-SVN: r267298
      Martin Jambor committed
    • Add missing test from previous commit · 26bf4e31
      	* testsuite/27_io/filesystem/directory_entry/lwg3171.cc: New test
      	(missed from previous commit).
      
      From-SVN: r267297
      Jonathan Wakely committed
    • re PR tree-optimization/84362 (Auto-vectorization regression when accessing… · 1c852d1d
      re PR tree-optimization/84362 (Auto-vectorization regression when accessing member variable through getter/accessor)
      
      2018-12-20  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/84362
      	* tree-ssa-loop-im.c: Include alias.h, builtins.h and tree-dfa.h.
      	(struct im_mem_ref): add ref_canonical flag.
      	(struct mem_ref_hasher): Use ao_ref as compare_type.
      	(mem_ref_hasher::equal): Adjust and add variant comparing ao_ref
      	parts.
      	(mem_ref_alloc): Take ao_ref parameter, initialize ref_canonical
      	member.
      	(gather_mem_refs_stmt): Set up ao_ref early and do the lookup
      	using it.  If we have non-equal refs canonicalize the one
      	in the hashtable used for insertion.
      	(tree_ssa_lim_initialize): Adjust.
      
      	* g++.dg/vect/pr84362.cc: New testcase.
      
      From-SVN: r267296
      Richard Biener committed
    • fix typo. · f0355446
      From-SVN: r267294
      Xiong Hu Luo committed
    • re PR target/88547 (missed optimization for vector comparisons) · 5a5fe917
      	PR target/88547
      	* config/i386/i386.c (ix86_expand_sse_movcc): For maskcmp, try to
      	emit vpmovm2? instruction perhaps after knot?.  Reorganize code
      	so that it doesn't have to test !maskcmp in almost every conditional.
      
      	* gcc.target/i386/pr88547-1.c: New test.
      
      From-SVN: r267293
      Jakub Jelinek committed
    • [RS6000] Fix non-linux powerpc breakage · 59faa32e
      svn r266496, git commit ab6b1bb456f broke non-linux powerpc builds
      due to GNU_USER_DYNAMIC_LINKER being undefined.
      
      	* config/rs6000/sysv4.h (GNU_USER_DYNAMIC_LINKER): Define.
      
      From-SVN: r267292
      Alan Modra committed
    • Daily bump. · a60d3a72
      From-SVN: r267291
      GCC Administrator committed
  3. 19 Dec, 2018 18 commits
    • re PR fortran/87992 (ICE in resolve_fl_variable, at fortran/resolve.c:12314) · 7d564142
      2018-12-19  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/87992
      	* resolve.c (resolve_fl_variable): Avoid a NULL pointer.
      
      2018-12-19  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/87992
      	* gfortran.dg/pr87992.f90: New test.
      
      From-SVN: r267288
      Steven G. Kargl committed
    • config.gcc: Enable TARGET_DEFAULT_ASYNC_UNWIND_TABLES on aarch64*-*-freebsd* · 5b0acc31
      2018-12-19  Andreas Tobler  <andreast@gcc.gnu.org>
      
      	* config.gcc: Enable TARGET_DEFAULT_ASYNC_UNWIND_TABLES on
      	aarch64*-*-freebsd*
      
      From-SVN: r267287
      Andreas Tobler committed
    • i386.md (SWI1248_AVX512BWDQ_64): Rename from SWI1248_AVX512BWDQ2_64. · 5dd376fa
      	* config/i386/i386.md (SWI1248_AVX512BWDQ_64): Rename from
      	SWI1248_AVX512BWDQ2_64.  Unconditionally enable HImode.
      	(*cmp<mode>_ccz_1): Emit kortest instead of ktest insn.
      	Use SWI1248_AVX512BWDQ_64 mode iterator and enable only for
      	TARGET_AVX512F.
      
      testsuite/ChangeLog:
      
      	* gcc.target/i386/avx512dq-pr82855.c: Update scan-assembler pattern.
      
      From-SVN: r267286
      Uros Bizjak committed
    • Fix grammar in libstdc++ ABI history documentation · f39365f3
      	* doc/xml/manual/abi.xml: Add missing word.
      
      From-SVN: r267285
      Jonathan Wakely committed
    • [ARM] Optimize executable size when using softfloat fmul/dmul · 72e3a529
      Softfloat single precision and double precision floating-point
      multiplication routines in libgcc share some code with the
      floating-point division of their corresponding precision. As the code
      is structured now, this leads to *all* division code being pulled in an
      executable in softfloat mode even if only multiplication is
      performed.
      
      This patch create some new LIB1ASMFUNCS macros to also build files with
      just the multiplication and shared code as weak symbols. By putting
      these earlier in the static library, they can then be picked up when
      only multiplication is used and they are overriden by the global
      definition in the existing file containing both multiplication and
      division code when division is needed.
      
      The patch also removes changes made to the FUNC_START and ARM_FUNC_START
      macros in r218124 since the intent was to put multiplication and
      division code into their own section in a later patch to achieve the
      same size optimization. That approach relied on specific section layout
      to ensure multiplication and division were not too far from the shared
      bit of code in order to the branches to be within range. Due to lack of
      guarantee regarding section layout, in particular with all the
      possibility of linker scripts, this approach was chosen instead. This
      patch keeps the two testcases that were posted by Tony Wang on the mailing
      list to implement this approach and adds a new one.
      
      2018-12-19  Thomas Preud'homme  <thomas.preudhomme@linaro.org>
      
          libgcc/
          * /config/arm/lib1funcs.S (FUNC_START): Remove unused sp_section
          parameter and corresponding code.
          (ARM_FUNC_START): Likewise in both definitions.
          Also update footer comment about condition that need to match with
          gcc/config/arm/elf.h to also include libgcc/config/arm/t-arm.
          * config/arm/ieee754-df.S (muldf3): Also build it if L_arm_muldf3 is
          defined.  Weakly define it in this case.
          * config/arm/ieee754-sf.S (mulsf3): Likewise with L_arm_mulsf3.
          * config/arm/t-elf (LIB1ASMFUNCS): Build _arm_muldf3.o and
          _arm_mulsf3.o before muldiv versions if targeting Thumb-1 only. Add
          comment to keep condition in sync with the one in
          libgcc/config/arm/lib1funcs.S and gcc/config/arm/elf.h.
      
          gcc/
          * config/arm/elf.h: Update comment about condition that need to
          match with libgcc/config/arm/lib1funcs.S to also include
          libgcc/config/arm/t-arm.
          * doc/sourcebuild.texi (output-exists, output-exists-not): Rename
          subsubsection these directives are in to "Check for output files".
          Move scan-symbol to that section and add to it new scan-symbol-not
          directive.
      
      2018-12-19  Tony Wang  <tony.wang@arm.com>
      	    Thomas Preud'homme  <thomas.preudhomme@linaro.org>
      
          gcc/testsuite/
          * lib/lto.exp (lto-execute): Define output_file and testname_with_flags
          to same value as execname.
          (scan-symbol): Move and rename to ...
          * lib/gcc-dg.exp (scan-symbol-common): This.  Adapt into a
          helper function returning true or false if a symbol is present.
          (scan-symbol): New procedure.
          (scan-symbol-not): Likewise.
          * gcc.target/arm/size-optimization-ieee-1.c: New testcase.
          * gcc.target/arm/size-optimization-ieee-2.c: Likewise.
          * gcc.target/arm/size-optimization-ieee-3.c: Likewise.
      
      From-SVN: r267282
      Thomas Preud'homme committed
    • [nvptx] Add PTX_CTA_SIZE · c4686fa9
      2018-12-19  Tom de Vries  <tdevries@suse.de>
      
      	* config/nvptx/nvptx.c (PTX_CTA_SIZE): Define.
      
      From-SVN: r267281
      Tom de Vries committed
    • c++, asm: Do not handle any asm-qualifiers in top-level asm · 7c67ff4a
      Previously, "volatile" was allowed.  Changing this simplifies the code,
      makes things more regular, and makes the C and C++ frontends handle
      this the same way.
      
      
      cp/
      	* parser.c (cp_parser_asm_definition): Do not allow any asm qualifiers
      	on top-level asm.
      
      testsuite/
      	* g++.dg/asm-qual-3.C: New testcase.
      	* gcc.dg/asm-qual-3.c: New testcase.
      
      From-SVN: r267280
      Segher Boessenkool committed
    • c/c++, asm: Use nicer error for const and restrict · 1edf8866
      Not all qualifiers are asm qualifiers.  We can talk about that in a
      nicer way than just giving a generic parser error.
      
      This also adds two testcases for C++, that previously were for C only.
      
      
      c/
      	* c-parser.c (c_parser_asm_statement) <RID_CONST, RID_RESTRICT>: Give
      	a more specific error message (instead of just falling through).
      
      cp/
      	* parser.c (cp_parser_asm_definition) <RID_CONST, RID_RESTRICT>: Give
      	a more specific error message (instead of just falling through).
      
      testsuite/
      	* g++.dg/asm-qual-1.C: New testcase.
      	* g++.dg/asm-qual-2.C: New testcase.
      	* gcc.dg/asm-qual-1.c: Update.
      
      From-SVN: r267279
      Segher Boessenkool committed
    • c/c++, asm: Use nicer error for duplicate asm qualifiers · db4fd626
      Also as suggested by Jason.
      
      
      c/
      	* c-parser.c (c_parser_asm_statement): Keep track of the location each
      	asm qualifier is first seen; use that to give nicer "duplicate asm
      	qualifier" messages.  Delete 'quals" variable, instead pass the
      	"is_volatile_ flag to build_asm_stmt directly.
      	* c-tree.h (build_asm_stmt): Make the first arg bool instead of tree.
      	* c-typeck.c (build_asm_stmt): Ditto; adjust.
      
      cp/
      	* parser.c (cp_parser_asm_definition): Rewrite the loop to work without
      	"done" boolean variable.
      	* parser.c (cp_parser_asm_definition): Keep track of the location each
      	asm qualifier is first seen; use that to give nicer "duplicate asm
      	qualifier" messages.
      
      From-SVN: r267278
      Segher Boessenkool committed
    • c/c++, asm: Write the asm-qualifier loop without "done" boolean · 9c9cfcbb
      As suggested by Jason.
      
      
      c/
      	* c-parser.c (c_parser_asm_statement): Rewrite the loop to work without
      	"done" boolean variable.
      
      cp/
      	* parser.c (cp_parser_asm_definition): Rewrite the loop to work without
      	"done" boolean variable.
      
      From-SVN: r267277
      Segher Boessenkool committed
    • C++: better locations for bogus initializations (PR c++/88375) · 15c40a3b
      PR c++/88375 reports that errors relating to invalid conversions in
      initializations are reported at unhelpfully vague locations, as in
      e.g.:
      
      enum struct a : int {
        one, two
      };
      
      struct foo {
        int e1, e2;
        a e3;
      } arr[] = {
        { 1, 2, a::one },
        { 3, a::two },
        { 4, 5, a::two }
      };
      
      for which g++ trunk emits the vague:
      
      pr88375.cc:12:1: error: cannot convert 'a' to 'int' in initialization
         12 | };
            | ^
      
      with the error at the final closing brace.
      
      This patch uses location information for the initializers, converting the
      above to:
      
      pr88375.cc:10:11: error: cannot convert 'a' to 'int' in initialization
         10 |   { 3, a::two },
            |        ~~~^~~
            |           |
            |           a
      
      highlighting which subexpression is problematic, and its type.
      
      Ideally we'd also issue a note showing the field decl being initialized,
      but that turned out to be more invasive.
      
      gcc/cp/ChangeLog:
      	PR c++/88375
      	* typeck.c (convert_for_assignment): Capture location of rhs
      	before stripping, and if available.  Use the location when
      	complaining about bad conversions, labelling it with the
      	rhstype if the location was present.
      	* typeck2.c (digest_init_r): Capture location of init before
      	stripping.
      
      gcc/testsuite/ChangeLog:
      	PR c++/88375
      	* g++.dg/init/pr88375-2.C: New test.
      	* g++.dg/init/pr88375.C: New test.
      
      From-SVN: r267276
      David Malcolm committed
    • [openacc] Make oacc_fn_attrib_level external · 4c187162
      Expose oacc_fn_attrib_level to be used in backends.
      
      2018-12-19  Tom de Vries  <tdevries@suse.de>
      
      	* omp-offload.c (oacc_fn_attrib_level): Remove static.
      	* omp-offload.h (oacc_fn_attrib_level): Declare.
      
      From-SVN: r267275
      Tom de Vries committed
    • [openacc] Add oacc_get_default_dim · b75e9c83
      Expose oacc_default_dims to backends.
      
      2018-12-19  Tom de Vries  <tdevries@suse.de>
      
      	* omp-offload.c (oacc_get_default_dim): New function.
      	* omp-offload.h (oacc_get_default_dim): Declare.
      
      From-SVN: r267274
      Tom de Vries committed
    • C++: improvements to binary operator diagnostics (PR c++/87504) · a14feb3c
      The C frontend is able (where expression locations are available) to print
      problems with binary operators in 3-location form, labelling the types of
      the expressions:
      
        arg_0 op arg_1
        ~~~~~ ^~ ~~~~~
          |        |
          |        arg1 type
          arg0 type
      
      The C++ frontend currently just shows the combined location:
      
        arg_0 op arg_1
        ~~~~~~^~~~~~~~
      
      and fails to highlight where the subexpressions are, or their types.
      
      This patch introduces a op_location_t struct for handling the above
      operator-location vs combined-location split, and a new
      class binary_op_rich_location for displaying the above, so that the
      C++ frontend is able to use the more detailed 3-location form for
      type mismatches in binary operators, and for -Wtautological-compare
      (where types are not displayed).  Both forms can be seen in this
      example:
      
      bad-binary-ops.C:69:20: error: no match for 'operator&&' (operand types are
        's' and 't')
         69 |   return ns_4::foo && ns_4::inner::bar;
            |          ~~~~~~~~~ ^~ ~~~~~~~~~~~~~~~~
            |                |                   |
            |                s                   t
      bad-binary-ops.C:69:20: note: candidate: 'operator&&(bool, bool)' <built-in>
         69 |   return ns_4::foo && ns_4::inner::bar;
            |          ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
      
      The patch also allows for some uses of macros in
      -Wtautological-compare, where both sides of the comparison have
      been spelled the same way, e.g.:
      
      Wtautological-compare-ranges.c:23:11: warning: self-comparison always
         evaluates to true [-Wtautological-compare]
         23 |   if (FOO == FOO);
            |           ^~
      
      gcc/c-family/ChangeLog:
      	PR c++/87504
      	* c-common.h (warn_tautological_cmp): Convert 1st param from
      	location_t to const op_location_t &.
      	* c-warn.c (find_array_ref_with_const_idx_r): Call fold_for_warn
      	when testing for INTEGER_CST.
      	(warn_tautological_bitwise_comparison): Convert 1st param from
      	location_t to const op_location_t &; use it to build a
      	binary_op_rich_location, and use this.
      	(spelled_the_same_p): New function.
      	(warn_tautological_cmp): Convert 1st param from location_t to
      	const op_location_t &.  Warn for macro expansions if
      	spelled_the_same_p.  Use binary_op_rich_location.
      
      gcc/c/ChangeLog:
      	PR c++/87504
      	* c-typeck.c (class maybe_range_label_for_tree_type_mismatch):
      	Move from here to gcc-rich-location.h and gcc-rich-location.c.
      	(build_binary_op): Use struct op_location_t and
      	class binary_op_rich_location.
      
      gcc/cp/ChangeLog:
      	PR c++/87504
      	* call.c (op_error): Convert 1st param from location_t to
      	const op_location_t &.  Use binary_op_rich_location for binary
      	ops.
      	(build_conditional_expr_1): Convert 1st param from location_t to
      	const op_location_t &.
      	(build_conditional_expr): Likewise.
      	(build_new_op_1): Likewise.
      	(build_new_op): Likewise.
      	* cp-tree.h (build_conditional_expr): Likewise.
      	(build_new_op): Likewise.
      	(build_x_binary_op): Likewise.
      	(cp_build_binary_op): Likewise.
      	* parser.c (cp_parser_primary_expression): Build a location
      	for id-expression nodes.
      	(cp_parser_binary_expression): Use an op_location_t when
      	calling build_x_binary_op.
      	(cp_parser_operator): Build a location for user-defined literals.
      	* typeck.c (build_x_binary_op): Convert 1st param from location_t
      	to const op_location_t &.
      	(cp_build_binary_op): Likewise.  Use binary_op_rich_location.
      
      gcc/ChangeLog:
      	PR c++/87504
      	* gcc-rich-location.c
      	(maybe_range_label_for_tree_type_mismatch::get_text): Move here from
      	c/c-typeck.c.
      	(binary_op_rich_location::binary_op_rich_location): New ctor.
      	(binary_op_rich_location::use_operator_loc_p): New function.
      	* gcc-rich-location.h
      	(class maybe_range_label_for_tree_type_mismatch)): Move here from
      	c/c-typeck.c.
      	(struct op_location_t): New forward decl.
      	(class binary_op_rich_location): New class.
      	* tree.h (struct op_location_t): New struct.
      
      gcc/testsuite/ChangeLog:
      	* c-c++-common/Wtautological-compare-ranges.c: New test.
      	* g++.dg/cpp0x/pr51420.C: Add -fdiagnostics-show-caret and update
      	expected output.
      	* g++.dg/diagnostic/bad-binary-ops.C: Update expected output from
      	1-location form to 3-location form, with labelling of ranges with
      	types.  Add examples of id-expression nodes with namespaces.
      	* g++.dg/diagnostic/param-type-mismatch-2.C: Likewise.
      
      From-SVN: r267273
      David Malcolm committed
    • C++: more location wrapper nodes (PR c++/43064, PR c++/43486) · dfd7fdca
      This is v6 of the patch, as posted to:
        https://gcc.gnu.org/ml/gcc-patches/2018-12/msg01331.html
      
      
      The C++ frontend gained various location wrapper nodes in r256448 (GCC 8).
      That patch:
        https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00799.html
      added wrapper nodes around all nodes with !CAN_HAVE_LOCATION_P for:
      
      * arguments at callsites, and for
      
      * typeid, alignof, sizeof, and offsetof.
      
      This is a followup to that patch, adding many more location wrappers
      to the C++ frontend.  It adds location wrappers for nodes with
      !CAN_HAVE_LOCATION_P to:
      
      * all literal nodes (in cp_parser_primary_expression)
      
      * all id-expression nodes (in finish_id_expression), except within a
        decltype.
      
      * all mem-initializer nodes within a mem-initializer-list
        (in cp_parser_mem_initializer)
      
      However, the patch also adds some suppressions: regions in the parser
      for which wrapper nodes will not be created:
      
      * within a template-parameter-list or template-argument-list (in
        cp_parser_template_parameter_list and cp_parser_template_argument_list
        respectively), to avoid encoding the spelling location of the nodes
        in types.  For example, "array<10>" and "array<10>" are the same type,
        despite the fact that the two different "10" tokens are spelled in
        different locations in the source.
      
      * within a gnu-style attribute (none of are handlers are set up to cope
        with location wrappers yet)
      
      * within various OpenMP clauses
      
      The patch enables various improvements to locations for bad
      initializations, for -Wchar-subscripts, and enables various other
      improvements in the followup patch.
      
      For example, given the followup buggy mem-initializer:
      
      class X {
        X() : bad(42),
              good(42)
        { }
        void* bad;
        int good;
      };
      
      previously, our diagnostic was on the final close parenthesis of the
      mem-initializer-list, leaving it unclear where the problem is:
      
      t.cc: In constructor 'X::X()':
      t.cc:3:16: error: invalid conversion from 'int' to 'void*' [-fpermissive]
          3 |         good(42)
            |                ^
            |                |
            |                int
      
      whereas with the patch we highlight which expression is bogus:
      
      t.cc: In constructor 'X::X()':
      t.cc:2:13: error: invalid conversion from 'int' to 'void*' [-fpermissive]
          2 |   X() : bad(42),
            |             ^~
            |             |
            |             int
      
      Similarly, the diagnostic for this bogus initialization:
      
      i.cc:1:44: error: initializer-string for array of chars is too long [-fpermissive]
          1 | char test[3][4] = { "ok", "too long", "ok" };
            |                                            ^
      
      is improved by the patch so that it indicates which string is too long:
      
      i.cc:1:27: error: initializer-string for array of chars is too long [-fpermissive]
          1 | char test[3][4] = { "ok", "too long", "ok" };
            |                           ^~~~~~~~~~
      
      
      gcc/c-family/ChangeLog:
      	PR c++/43064
      	PR c++/43486
      	* c-common.c (unsafe_conversion_p): Fold any location wrapper.
      	(verify_tree): Handle location wrappers.
      	(c_common_truthvalue_conversion): Strip any location wrapper.
      	Handle CONST_DECL.
      	(fold_offsetof): Strip any location wrapper.
      	(complete_array_type): Likewise for initial_value.
      	(convert_vector_to_array_for_subscript): Call fold_for_warn on the
      	index before checking for INTEGER_CST.
      	* c-pretty-print.c (c_pretty_printer::primary_expression): Don't
      	print parentheses around location wrappers.
      	* c-warn.c (warn_logical_operator): Call fold_for_warn on op_right
      	before checking for INTEGER_CST.
      	(warn_tautological_bitwise_comparison): Call
      	tree_strip_any_location_wrapper on lhs, rhs, and bitop's operand
      	before checking for INTEGER_CST.
      	(readonly_error): Strip any location wrapper.
      	(warn_array_subscript_with_type_char): Strip location wrappers
      	before checking for INTEGER_CST.  Use the location of the index if
      	available.
      
      gcc/ChangeLog:
      	PR c++/43064
      	PR c++/43486
      	* convert.c: Include "selftest.h".
      	(preserve_any_location_wrapper): New function.
      	(convert_to_pointer_maybe_fold): Update to handle location
      	wrappers.
      	(convert_to_real_maybe_fold): Likewise.
      	(convert_to_integer_1): Strip expr when using TREE_OVERFLOW.
      	Handle location wrappers when checking for INTEGER_CST.
      	(convert_to_integer_maybe_fold): Update to handle location
      	wrappers.
      	(convert_to_complex_maybe_fold): Likewise.
      	(selftest::test_convert_to_integer_maybe_fold): New functions.
      	(selftest::convert_c_tests): New function.
      	* convert.h (preserve_any_location_wrapper): New decl.
      	* fold-const.c (size_binop_loc): Strip location wrappers when
      	using TREE_OVERFLOW.
      	(operand_equal_p): Strip any location wrappers.
      	(integer_valued_real_p): Strip any location wrapper.
      	* selftest-run-tests.c (selftest::run_tests): Call
      	selftest::convert_c_tests.
      	* selftest.h (selftest::convert_c_tests): New decl.
      	* tree.c (build_complex): Assert that REAL and IMAG are constants.
      	(integer_zerop): Look through location wrappers.
      	(integer_onep): Likewise.
      	(integer_each_onep): Likewise.
      	(integer_all_onesp): Likewise.
      	(integer_minus_onep): Likewise.
      	(integer_pow2p): Likewise.
      	(integer_nonzerop): Likewise.
      	(integer_truep): Likewise.
      	(fixed_zerop): Likewise.
      	(real_zerop): Likewise.
      	(real_onep): Likewise.
      	(real_minus_onep): Likewise.
      	(tree_int_cst_equal): Likewise.
      	(simple_cst_equal): Treat location wrappers with non-equal source
      	locations as being unequal.
      	(uniform_integer_cst_p): Look through location wrappers.
      	(maybe_wrap_with_location): Don't create wrappers if any
      	auto_suppress_location_wrappers are active.
      	(suppress_location_wrappers): New variable.
      	(selftest::test_predicates): New test.
      	(selftest::tree_c_tests): Call it.
      	* tree.h (CONSTANT_CLASS_OR_WRAPPER_P): New macro.
      	(suppress_location_wrappers): New decl.
      	(class auto_suppress_location_wrappers): New class.
      
      gcc/cp/ChangeLog:
      	PR c++/43064
      	PR c++/43486
      	* call.c (build_conditional_expr_1): Strip location wrappers when
      	checking for CONST_DECL.
      	(conversion_null_warnings): Use location of "expr" if available.
      	* class.c (fixed_type_or_null): Handle location wrappers.
      	* constexpr.c (potential_constant_expression_1): Likewise.
      	* cvt.c (ignore_overflows): Strip location wrappers when
      	checking for INTEGER_CST, and re-wrap the result if present.
      	(ocp_convert): Call fold_for_warn before checking for INTEGER_CST.
      	* decl.c (reshape_init_r): Strip any location wrapper.
      	(undeduced_auto_decl): Likewise.
      	* expr.c (mark_discarded_use): Likewise for expr.
      	* init.c (build_aggr_init): Likewise before checking init for
      	DECL_P.
      	(warn_placement_new_too_small): Call fold_for_warn on adj before
      	checking for CONSTANT_CLASS_P, and on nelts.  Strip any location
      	wrapper from op0 and on oper before checking for VAR_P.
      	* parser.c (cp_parser_primary_expression): Call
      	maybe_add_location_wrapper on numeric and string literals.
      	(cp_parser_postfix_expression): Strip any location wrapper when
      	checking for DECL_IS_BUILTIN_CONSTANT_P.
      	(cp_parser_unary_expression): Ensure that folding of NEGATE_EXPR
      	around a constant happens in the presence of location wrappers and
      	returns a wrapped result.
      	(cp_parser_has_attribute_expression): Strip any location wrapper
      	from "oper".
      	(cp_parser_binary_expression): Strip any location wrapper when
      	checking for DECL_P on the lhs.
      	(cp_parser_decltype): Strip any location wrapper from result of
      	cp_parser_decltype_expr.
      	(cp_parser_mem_initializer): Add location wrappers to the
      	parenthesized expression list.
      	(cp_parser_template_parameter_list): Don't create wrapper nodes
      	within a template-parameter-list.
      	(cp_parser_template_argument_list): Don't create wrapper nodes
      	within a template-argument-list.
      	(cp_parser_parameter_declaration): Strip location wrappers from
      	default arguments.
      	(cp_parser_gnu_attribute_list): Don't create wrapper nodes.
      	(cp_parser_std_attribute_spec_seq): Likewise.
      	(cp_parser_omp_all_clauses): Don't create wrapper nodes within
      	OpenMP clauses.
      	(cp_parser_omp_for_loop): Likewise.
      	(cp_parser_omp_declare_reduction_exprs): Likewise.
      	* pt.c (convert_nontype_argument_function): Strip location
      	wrappers from fn_no_ptr before checking for FUNCTION_DECL.
      	(tsubst_default_argument): Move note about which callsite led to
      	instantiation to after the check_default_argument call.
      	(do_auto_deduction): Likewise from init before checking for
      	DECL_P.
      	* semantics.c (force_paren_expr): Likewise from expr before
      	checking for DECL_P.
      	(finish_parenthesized_expr): Likewise from expr before
      	checking for STRING_CST.
      	(perform_koenig_lookup): Likewise from fn.
      	(finish_call_expr): Likewise.
      	(finish_id_expression): Rename to...
      	(finish_id_expression_1): ...this, calling
      	maybe_add_location_wrapper on the result.
      	(capture_decltype): Use lookup_name_real rather than value_member
      	when looking up decl within the capture-list.
      	* tree.c (cp_stabilize_reference): Strip any location wrapper.
      	(builtin_valid_in_constant_expr_p): Likewise.
      	(strip_typedefs_expr): Strip any location wrapper before checking
      	for decls or constants.
      	(is_overloaded_fn): Likewise.
      	(maybe_get_fns): Likewise.
      	(selftest::test_lvalue_kind): Verify lvalue_p.
      	* typeck.c (cxx_sizeof_expr): Strip any location wrapper.
      	(cxx_alignof_expr): Likewise.
      	(is_bitfield_expr_with_lowered_type): Handle location wrappers.
      	(cp_build_array_ref): Call maybe_constant_value on "idx".
      	(cp_build_binary_op): Strip location wrapper from first_arg before
      	checking for PARM_DECL.  Likewise for op1 before checking for
      	INTEGER_CST in two places.  Likewise for orig_op0 and orig_op1
      	when checking for STRING_CST.
      	(cp_build_addr_expr_1): Likewise for arg when checking for
      	FUNCTION_DECL.
      	(cp_build_modify_expr): Likewise for newrhs when checking for
      	STRING_CST.
      	(convert_for_assignment): Don't strip location wrappers when
      	stripping NON_LVALUE_EXPR.
      	(maybe_warn_about_returning_address_of_local): Strip location
      	wrapper from whats_returned before checking for DECL_P.
      	(can_do_nrvo_p): Strip location wrapper from retval.
      	(treat_lvalue_as_rvalue_p): Likewise.
      	(check_return_expr): Likewise.
      	* typeck2.c (cxx_incomplete_type_diagnostic): Strip location
      	wrapper from value before checking for VAR_P or PARM_DECL.
      	(digest_init_r): Strip location wrapper from init.  When
      	copying "init", also copy the wrapped node.
      
      gcc/objc/ChangeLog:
      	PR c++/43064
      	PR c++/43486
      	* objc-act.c (objc_maybe_build_component_ref): Strip any location
      	wrapper before checking for UOBJC_SUPER_decl and self_decl.
      	(objc_finish_message_expr): Strip any location wrapper.
      	(gen_declaration): Strip location wrappers from "w".
      
      gcc/testsuite/ChangeLog:
      	PR c++/43064
      	PR c++/43486
      	* c-c++-common/pr51712.c (valid2): Mark xfail as passing on C++.
      	* g++.dg/cpp0x/constexpr-47969.C: Update column of expected error.
      	* g++.dg/cpp0x/constexpr-ex2.C: Likewise.
      	* g++.dg/cpp0x/scoped_enum2.C: Likewise.
      	* g++.dg/cpp1z/decomp48.C: Update expected location of warning
      	for named local variables to use that of the local variable.
      	* g++.dg/ext/vla1.C: Update column.
      	* g++.dg/init/array43.C: Update expected column to be that of the
      	initializer.
      	* g++.dg/init/initializer-string-too-long.C: New test.
      	* g++.dg/init/new44.C: Add "-ftrack-macro-expansion=0".
      	* g++.dg/init/pr43064-1.C: New test.
      	* g++.dg/init/pr43064-2.C: New test.
      	* g++.dg/init/pr43064-3.C: New test.
      	* g++.dg/other/fold1.C: Update column of expected error.
      	* g++.dg/parse/crash36.C: Likewise.
      	* g++.dg/plugin/diagnostic-test-expressions-1.C: Add negative
      	integer and float expressions.
      	* g++.dg/template/defarg6.C: Move expected error to the default
      	argument; add expected message about where instantiated.
      	* g++.dg/wrappers/Wparentheses.C: New test.
      	* g++.old-deja/g++.bugs/900402_02.C: Update column of expected
      	error.
      
      From-SVN: r267272
      David Malcolm committed
    • [rs6000] Fix x86 SSSE3 compatibility implementations and testcases · 9a0317e7
      This patch is the analog to r266868-r266870, but for SSSE3.
      The SSSE3 tests had been inadvertently made to PASS without actually running
      the test code. Actually running the code turned up some previously undetected
      issues.
      
      This patch fixes some issues in the implementations, fixes up the tests
      to use a union for the test data, which avoids strict aliasing issues,
      and enables the tests to actually run (by removing a dependency on
      __BUILTIN_CPU_SUPPORTS).
      
      Also, there's a fairly insignificant change in the testcases that walk
      through the data as pairs of vectors from:
        [0] and [1]
        [2] and [3]
        ...
        [n-4] and [n-3]
        [n-2] and [n-1]
      
      to:
        [0] and [1]
        [1] and [2]
        ...
        [n-3] and [n-2]
        [n-2] and [n-1]
      
      Since the testcases compute the correct answers based on the input, no
      other changes were necessary to effect the change.
      
      2018-12-19  Paul A. Clarke  <pc@us.ibm.com>
      
      [gcc]
      
      	* config/rs6000/tmmintrin.h (_mm_hadds_epi16): Vector lanes swapped.
      	(_mm_hsub_epi32): Likewise.
      	(_mm_shuffle_epi8): Fix reversed interpretation of parameters.
      	(_mm_shuffle_pi8): Likewise.
      	(_mm_addubs_pi16): Likewise.
      
      [gcc/testsuite]
      
      	* gcc.target/powerpc/ssse3-check.h: Enable tests to run.
      	* gcc.target/powerpc/ssse3-pabsb.c: Code fixes for strict aliasing
      	issues.
      	* gcc.target/powerpc/ssse3-pabsd.c: Likewise.
      	* gcc.target/powerpc/ssse3-palignr.c: Likewise.
      	* gcc.target/powerpc/ssse3-phaddd.c: Likewise.
      	* gcc.target/powerpc/ssse3-phaddsw.c: Likewise.
      	* gcc.target/powerpc/ssse3-phaddw.c: Likewise.
      	* gcc.target/powerpc/ssse3-phsubd.c: Likewise.
      	* gcc.target/powerpc/ssse3-phsubw.c: Likewise.
      	* gcc.target/powerpc/ssse3-pmulhrsw.c: Likewise.
      	* gcc.target/powerpc/ssse3-pshufb.c: Likewise.
      	* gcc.target/powerpc/ssse3-psignb.c: Likewise.
      	* gcc.target/powerpc/ssse3-psignd.c: Likewise.
      	* gcc.target/powerpc/ssse3-psignw.c: Likewise.
      	* gcc.target/powerpc/ssse3-vals.h: Provide input data as a union.
      
      From-SVN: r267271
      Paul A. Clarke committed
    • [ARM] Do softfloat when -mfpu set, -mfloat-abi=softfp · ec5e6814
      FP instructions are only enabled for TARGET_32BIT and TARGET_HARD_FLOAT
      but GCC only gives an error when TARGET_HARD_FLOAT is true and -mfpu is
      not set. Among other things, it makes some of the cmse tests (eg.
      gcc.target/arm/cmse/baseline/softfp.c) fail when targeting
      -march=armv8-m.base -mcmse -mfpu=<something> -mfloat-abi=softfp. This
      commit adds an extra check for TARGET_32BIT to TARGET_HARD_FLOAT such
      that it is false on TARGET_THUMB1 targets even when a FPU is specified.
      
      2018-12-19  thomas Preud'homme  <thomas.preudhomme@linaro.org>
      
          gcc/
          * config/arm/arm.h (TARGET_HARD_FLOAT): Restrict to TARGET_32BIT
          targets.
          * config/arm/arm.c (output_return_instruction): Only check
          TARGET_HARD_FLOAT to decide whether FP instructions are available.
      
          gcc/testsuite/
          * gcc.target/arm/cmse/baseline/softfp.c: Force an FPU.
      
      From-SVN: r267270
      Thomas Preud'homme committed
    • [nvptx] Commit passing pr85381-*.c test-cases · a152954e
      Add pr85381*.c test-cases that are already passing without the fix for PR85381.
      
      Build and reg-tested on x86_64 with nvptx accelerator.
      
      2018-12-19  Tom de Vries  <tdevries@suse.de>
      
      	* testsuite/libgomp.oacc-c-c++-common/pr85381-2.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/pr85381-3.c: New test.
      	* testsuite/libgomp.oacc-c-c++-common/pr85381-4.c: New test.
      
      From-SVN: r267268
      Tom de Vries committed