1. 13 Sep, 2018 22 commits
  2. 12 Sep, 2018 18 commits
    • re PR c++/87093 (is_constructible (__is_constructible() instrinsic) explicitly… · b51da998
      re PR c++/87093 (is_constructible (__is_constructible() instrinsic) explicitly instantiates conversion member function of source)
      
      PR c++/87093
      
      gcc/cp
      
      PR c++/87093
      * method.c (constructible_expr): We're in an unevaluated context
      in all cases, not just for class targets.
      
      testsuite/
      
      PR c++/87093
      * g++.dg/ext/is_constructible2.C: New.
      
      From-SVN: r264253
      Ville Voutilainen committed
    • C++: special-case single non-viable candidate (more PR c++/85110) · 4911b24d
      I broke out the "no viable candidates" case in build_new_method_call_1
      into a subroutine, and added special-case handling for when there's
      a single non-viable candidate where there's an argument conversion
      error.  I turned the error-handling from convert_for_assignment into
      a subroutine, calling it from this new special-case.
      
      This converts:
      
      demo.cc: In function 'int test_4(int, const char*, float)':
      demo.cc:5:44: error: no matching function for call to 's4::member_1(int&, const char*&, float&)'
      5 |   return s4::member_1 (first, second, third);
        |                                            ^
      demo.cc:1:24: note: candidate: 'static int s4::member_1(int, const char**, float)'
      1 | struct s4 { static int member_1 (int one, const char **two, float three); };
        |                        ^~~~~~~~
      demo.cc:1:56: note:   no known conversion for argument 2 from 'const char*' to 'const char**'
      1 | struct s4 { static int member_1 (int one, const char **two, float three); };
        |                                           ~~~~~~~~~~~~~^~~
      
      to:
      
      demo.cc: In function 'int test_4(int, const char*, float)':
      demo.cc:5:31: error: cannot convert 'const char*' to 'const char**'
      5 |   return s4::member_1 (first, second, third);
        |                               ^~~~~~
        |                               |
        |                               const char*
      demo.cc:1:56: note:   initializing argument 2 of 'static int s4::member_1(int, const char**, float)'
      1 | struct s4 { static int member_1 (int one, const char **two, float three); };
        |                                           ~~~~~~~~~~~~~^~~
      
      thus highlighting the problematic argument at the callsite (and its type).
      
      gcc/cp/ChangeLog:
      	PR c++/85110
      	* call.c (struct conversion_info): Add "loc" field.
      	(arg_conversion_rejection): Add "loc" param, using it to
      	initialize the new field.
      	(bad_arg_conversion_rejection): Likewise.
      	(explicit_conversion_rejection): Initialize the new field to
      	UNKNOWN_LOCATION.
      	(template_conversion_rejection): Likewise.
      	(add_function_candidate): Pass on the argument location to the new
      	param of arg_conversion_rejection.
      	(add_conv_candidate): Likewise.
      	(build_builtin_candidate): Likewise.
      	(build_user_type_conversion_1): Likewise.
      	(single_z_candidate): New function.
      	(maybe_get_bad_conversion_for_unmatched_call): New function.
      	(complain_about_bad_argument): New function, based on part of
      	convert_for_assignment.
      	(build_new_method_call_1): Split out handling of the "no viable
      	candidates" case into...
      	(complain_about_no_candidates_for_method_call): ...this new
      	function, and use the new functions above to special-case the
      	handling of a single non-viable candidate due to a bad argument.
      	* cp-tree.h (complain_about_bad_argument): New decl.
      	* typeck.c (convert_for_assignment): Split out one error-handling
      	case into complain_about_bad_argument.
      
      gcc/testsuite/ChangeLog:
      	PR c++/85110
      	* g++.dg/cpp0x/explicit4.C: Update expected output to reflect
      	special-casing of diagnostic for a single non-viable candidate due
      	to a bad argument.
      	* g++.dg/diagnostic/param-type-mismatch-2.C: Likewise.
      	Add test coverage for an unmatched overloaded operator.
      	* g++.dg/expr/pmf-1.C: Likewise.
      	* g++.old-deja/g++.bugs/900330_02.C: Likewise.
      	* g++.old-deja/g++.jason/conversion11.C: Likewise.
      	* g++.old-deja/g++.law/arg11.C: Likewise.
      	* g++.old-deja/g++.law/arm9.C: Likewise.
      	* g++.old-deja/g++.robertl/eb131.C: Likewise.
      
      From-SVN: r264250
      David Malcolm committed
    • re PR fortran/87284 (Allocation of class arrays with mold results in… · 3b582f1f
      re PR fortran/87284 (Allocation of class arrays with mold results in "conditional jump or move depends on uninitialised value")
      
      2018-09-12  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/87284
      	* trans-expr.c (gfc_trans_class_init_assign): Access to
      	to array elements of the dynamic type requires that the array
      	reference be added to the class expression and not the _data
      	component, unlike scalar expressions.
      
      2018-09-12  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/87284
      	* gfortran.dg/allocate_with_mold_2.f90: New test.
      
      From-SVN: r264249
      Paul Thomas committed
    • re PR middle-end/82853 (Optimize x % 3 == 0 without modulo) · c0cbe526
      	PR middle-end/82853
      	* expr.h (maybe_optimize_mod_cmp): Declare.
      	* expr.c (mod_inv): New function.
      	(maybe_optimize_mod_cmp): New function.
      	(do_store_flag): Use it.
      	* cfgexpand.c (expand_gimple_cond): Likewise.
      
      	* gcc.target/i386/pr82853-1.c: New test.
      	* gcc.target/i386/pr82853-2.c: New test.
      
      From-SVN: r264248
      Jakub Jelinek committed
    • [OpenACC] C++ reference mapping · 8e36332c
      2018-09-09  Cesar Philippidis  <cesar@codesourcery.com>
      	    Julian Brown  <julian@codesourcery.com>
      
      	PR middle-end/86336
      
      	gcc/cp/
      	* semantics.c (finish_omp_clauses): Treat C++ references the same in
      	OpenACC as OpenMP.
      
      	gcc/
      	* gimplify.c (gimplify_scan_omp_clauses): Set
      	target_firstprivatize_array_bases in OpenACC parallel and kernels
      	region contexts.  Remove GOMP_MAP_FIRSTPRIVATE_REFERENCE clauses from
      	OpenACC data regions.
      
      	libgomp/
      	* testsuite/libgomp.oacc-c++/non-scalar-data.C: Remove XFAIL.
      
      Co-Authored-By: Julian Brown <julian@codesourcery.com>
      
      From-SVN: r264244
      Cesar Philippidis committed
    • i386.md (sqrt_extend<mode>xf3_i387): Remove. · c7493059
      	* config/i386/i386.md (sqrt_extend<mode>xf3_i387): Remove.
      	(sqrt<mode>2): Extend operand 1 to XFmode and generate sqrtxf3 insn.
      
      From-SVN: r264243
      Uros Bizjak committed
    • re PR tree-optimization/87280 (ICE in set_ssa_val_to, at tree-ssa-sccvn.c:3647) · b25508e0
      2018-09-12  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/87280
      	* tree-ssa-sccvn.c (process_bb): Handle the case of executable
      	edge but unreachable target.
      	(do_rpo_vn): For conservatively handling a PHI only mark
      	the backedge executable but not the block reachable.
      
      	* gcc.dg/torture/pr87280.c: New testcase.
      
      From-SVN: r264241
      Richard Biener committed
    • Fix interleaving of Fortran STOP messages · 72ced874
      Fortran STOP and ERROR STOP use a different function to print the "STOP" string
      and the message string.  On GCN this results in out-of-order output, such as
      "<msg>ERROR STOP ".
      
      This patch fixes the problem by making estr_write use the proper Fortran write,
      not C printf, so both parts are now output the same way.  This also ensures
      that both parts are output to STDERR (not that that means anything on GCN).
      
      2018-09-12  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	libgfortran/
      	* runtime/minimal.c (estr_write): Define in terms of write.
      
      From-SVN: r264239
      Kwok Cheung Yeung committed
    • Fix Fortran STOP. · 4986a956
      The minimal libgfortran setup was created for NVPTX, but will also be used by
      AMD GCN.
      
      This patch simply removes an assumption that NVPTX is the only user.
      Specifically, NVPTX exit is broken, but AMD GCN exit works just fine.
      
      2018-09-12  Andrew Stubbs  <ams@codesourcery.com>
      
      	libgfortran/
      	* runtime/minimal.c (exit): Only work around nvptx bugs on nvptx.
      
      From-SVN: r264238
      Andrew Stubbs committed
    • re PR tree-optimization/87266 (ICE: Segmentation fault (in… · 28c4b740
      re PR tree-optimization/87266 (ICE: Segmentation fault (in useless_type_conversion_p, tree_nop_conversion_p, or is_gimple_reg_type))
      
      2018-09-12  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/87266
      	* tree-ssa-sccvn.c (do_rpo_vn): Always iterate to not yet
      	visited blocks.
      
      	* gcc.dg/torture/pr87266-1.c: New testcase.
      	* gcc.dg/torture/pr87266-2.c: Likewise.
      	* gcc.dg/torture/pr87266-3.c: Likewise.
      	* gcc.dg/torture/pr87266-4.c: Likewise.
      
      From-SVN: r264237
      Richard Biener committed
    • S/390: Use proper rounding mode for DFP to BFD conversions · ced8d882
      According to IEEE 754 2008 4.3 'Rounding-direction attributes' the
      rounding mode of the target format needs to be used. By not setting
      the value so far we have always used the DFP rounding mode.
      
      gcc/ChangeLog:
      
      2018-09-12  Andreas Krebbel  <krebbel@linux.ibm.com>
      
      	* config/s390/s390.md (PFPO_RND_MODE_DFP, PFPO_RND_MODE_BFP): New
      	constants.
      	("trunc<BFP:mode><DFP_ALL:mode>2")
      	("trunc<DFP_ALL:mode><BFP:mode>2")
      	("extend<BFP:mode><DFP_ALL:mode>2")
      	("extend<DFP_ALL:mode><BFP:mode>2"): Set proper rounding mode
      	according to the target operand type.
      
      gcc/testsuite/ChangeLog:
      
      2018-09-12  Andreas Krebbel  <krebbel@linux.ibm.com>
      
      	* gcc.target/s390/dfp_to_bfp_rounding.c: New test.
      
      From-SVN: r264234
      Andreas Krebbel committed
    • Add quotes for -fconstexpr-depth= in an error message. · 7e7a6ed7
      From-SVN: r264233
      Martin Liska committed
    • re PR tree-optimization/86844 (wrong code caused by store merging pass) · 6cd4c66e
      	PR tree-optimization/86844
      	* gimple-ssa-store-merging.c
      	(imm_store_chain_info::coalesce_immediate): For overlapping stores, if
      	there are any overlapping stores in between them, make sure they are
      	also coalesced or we give up completely.
      
      	* gcc.c-torture/execute/pr86844.c: New test.
      	* gcc.dg/store_merging_22.c: New test.
      	* gcc.dg/store_merging_23.c: New test.
      
      Co-Authored-By: Andreas Krebbel <krebbel@linux.ibm.com>
      
      From-SVN: r264232
      Jakub Jelinek committed
    • re PR middle-end/87248 (Bad code for masked operations involving signed ints) · 9095b53a
      	PR middle-end/87248
      	* fold-const.c (fold_ternary_loc) <case COND_EXPR>: Verify also that
      	BIT_AND_EXPR's second operand is a power of two.  Formatting fix.
      
      	* c-c++-common/torture/pr87248.c: New test.
      
      From-SVN: r264230
      Jakub Jelinek committed
    • [debug] Add -gdescribe-dies · 03e992ac
      This patch adds option -gdescribe-dies.  It sets the DW_AT_description
      attribute of dies that do not get a DW_AT_name attribute, to make it easier
      to figure out what the die is describing.
      
      The option exports the names of artificial variables:
      ...
       DIE    0: DW_TAG_variable (0x7fa934dd54b0)
      +  DW_AT_description: "D.1922"
         DW_AT_type: die -> 0 (0x7fa934dd0d70)
         DW_AT_artificial: 1
      
      ...
      which can be traced back to gimple dumps:
      ...
        char a[0:D.1922] [value-expr: *a.0];
      ...
      
      Furthermore, it adds names to external references:
      ...
       DIE    0: DW_TAG_subprogram (0x7fa88b9650f0)
      +DW_AT_description: "main"
       DW_AT_abstract_origin: die -> label: vla_1.c.6719312a + 29 (0x7fa88b965140)
      ...
      and likewise to DW_TAG_call_site_parameter DIEs.
      
      Bootstrapped and reg-tested on x86_64.
      
      2018-09-12  Tom de Vries  <tdevries@suse.de>
      
      	* common.opt (gdescribe-dies): Add option.
      	* dwarf2out.c (add_name_and_src_coords_attributes): Add description
      	attribute for artifical and nameless decls.
      	(dwarf2out_register_external_die): Add description attribute to
      	external reference die.
      	(add_desc_attribute): New functions.
      	(gen_subprogram_die): Add description attribute to
      	DW_TAG_call_site_parameter.
      	* tree-pretty-print.c (print_generic_expr_to_str): New function.
      	* tree-pretty-print.h (print_generic_expr_to_str): Declare.
      	* doc/invoke.texi (@item Debugging Options): Add -gdescribe-dies and
      	-gno-describe-dies.
      	(@item -gdescribe-dies): Add.
      
      From-SVN: r264229
      Tom de Vries committed
    • tree-vrp.c (vrp_shift_undefined_p): Remove. · 28aa6323
      	* tree-vrp.c (vrp_shift_undefined_p): Remove.
      	(extract_range_from_binary_expr_1: Call
      	wide_int_range_shift_undefined_p instead of vrp_shift_undefined_p.
      	* wide-int-range.h (wide_int_range_shift_undefined_p): Do not
      	depend on sign.
      
      From-SVN: r264228
      Aldy Hernandez committed
    • * gimple-ssa-warn-alloca.c · bb753cad
      	(alloca_type_and_limit::alloca_type_and_limit): Initialize limit
      	field for ALLOCA_BOUND_*_LARGE.
      
      From-SVN: r264227
      Aldy Hernandez committed
    • Daily bump. · be673084
      From-SVN: r264226
      GCC Administrator committed