1. 14 Sep, 2018 5 commits
    • re PR middle-end/63155 (memory hog) · 7efd5ff3
      2018-09-14  Richard Biener  <rguenther@suse.de>
      
      	PR middle-end/63155
      	* tree-ssa-coalesce.c (ssa_conflicts_merge): Remove conflict
      	bits for the merged partition.
      
      From-SVN: r264304
      Richard Biener committed
    • builtins.h (c_srlen): Add argument. · 6ab24ea8
      	* builtins.h (c_srlen): Add argument.
      	* builtins.c (warn_string_no_nul): New function.
      	(c_strlen): Add argument and use it.  Update recursive calls.
      	Pass DECL argument to string_constant to get info on non
      	terminated strings.  Update *NONSTR as needed.
      	(fold_builtin_strlen): Add argument to calls to c_strlen.
      	Warn for unterminated arrays.
      	(warn_string_no_null): Add prototype.
      	* expr.c (string_constant): Update arguments.  Update recursive
      	calls appropriately.  Detect missing NUL terminator and outermost
      	declaration its missing in.
      	Improve checks for arrays with nonzero lower bound or elements
      	that are not a single byte.  Simplify offset computation.
      	Simplify checks for non-NUL terminated strings.
      	* gimple-fold.c (get_range_strlen): Add argument to c_strlen call.
      	* gimple-ssa-sprintf.c (get_string_length): Remove unnecessary code.
      
      	* gcc.dg/warn-strlen-no-nul.c: New test.
      
      Co-Authored-By: Bernd Edlinger <bernd.edlinger@hotmail.de>
      Co-Authored-By: Jeff Law <law@redhat.com>
      
      From-SVN: r264302
      Martin Sebor committed
    • builtins.c (c_strlen): Handle not zero terminated STRING_CSTs correctly. · d01b568a
      	* builtins.c (c_strlen): Handle not zero terminated STRING_CSTs
      	correctly.
      	* fold-const.c (c_getstr): Fix function comment.  Remove unused third
      	argument.  Fix range checks.
      	* fold-const.h (c_getstr): Adjust protoype.
      	* gimple-fold.c (gimple_fold_builtin_memory_op): Avoid folding when
      	string is constant but contains no NUL byte.
      
      From-SVN: r264301
      Bernd Edlinger committed
    • expr.c (string_constant): Adjust function comment. · 9a9f692b
      	* expr.c (string_constant): Adjust function comment.
      	Remove bogus check for zero termination.
      
      From-SVN: r264300
      Bernd Edlinger committed
    • Daily bump. · ffbd4c4a
      From-SVN: r264299
      GCC Administrator committed
  2. 13 Sep, 2018 29 commits
  3. 12 Sep, 2018 6 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