1. 14 Sep, 2018 6 commits
    • [libgfortran] Fix uninitialized variable use in fallback_access · ef5057c8
      I've been tracking down a bug in a Fortran program on a newlib target and it boils down to fallback_access doing something bad.
      The unconditional calls to close cause havoc when open doesn't get called due to the short-circuiting in the if-statement above
      because the fd is uninitialised. In my environment GCC ends up calling close on file descriptor 0, thus trying to close stdin.
      
      This patch tightens up the calling so that close is called only when the corresponding open call succeeded.
      With this my runtime failure disappears.
      
      Bootstrapped and tested on aarch64-none-linux-gnu.
      Though that doesn't exercise this call I hope it's an obviously correct change. 
      
      	* io/unix.c (fallback_access): Avoid calling close on
      	uninitialized file descriptor.
      
      From-SVN: r264305
      Kyrylo Tkachov committed
    • 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 5 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