From a45222a0e5951558bd896b0513bf638eb376e086 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Fri, 15 Jan 2016 18:40:44 +0000 Subject: Revert "Fix toolchain/gcc build for mingw." This reverts commit f1c3ad6cac0465017759cce0cb381ce66760d907. [Change no longer needed since we're switching to a different gcc for the mingw build.] Change-Id: I03a57335e9ca94c6848cb71bbc1a451f0c0ef18f --- gcc-4.9/gcc/config/linux-android.h | 10 ------ gcc-4.9/gcc/cp/call.c | 71 +++++++++++++++++++------------------- gcc-4.9/gcc/cp/cp-tree.h | 45 +++++++++++------------- gcc-4.9/gcc/cp/init.c | 16 +++++---- gcc-4.9/gcc/gcc.c | 27 +++++++-------- 5 files changed, 77 insertions(+), 92 deletions(-) diff --git a/gcc-4.9/gcc/config/linux-android.h b/gcc-4.9/gcc/config/linux-android.h index 76654c34b..d8a66c7fe 100644 --- a/gcc-4.9/gcc/config/linux-android.h +++ b/gcc-4.9/gcc/config/linux-android.h @@ -60,13 +60,3 @@ #define ANDROID_ENDFILE_SPEC \ "%{shared: crtend_so%O%s;: crtend_android%O%s}" - -#define PROFILE_OR_COV_LINK_SPEC \ - "%{fprofile-arcs|fprofile-generate*|coverage:-lgcov " \ - LINUX_OR_ANDROID_LD("", "-lgcc") "}" SANITIZER_SPEC - -// -// For Android apparently we want to temporarily -// disable __cxa_throw_bad_array_new_length -// -#define DISABLE_CXA_THROW_BAD_ARRAY_NEW_LENGTH 1 diff --git a/gcc-4.9/gcc/cp/call.c b/gcc-4.9/gcc/cp/call.c index 74de4f273..db43bf10d 100644 --- a/gcc-4.9/gcc/cp/call.c +++ b/gcc-4.9/gcc/cp/call.c @@ -462,7 +462,7 @@ struct conversion_info { /* The type of the formal argument. */ tree to_type; }; - + struct rejection_reason { enum rejection_reason_code code; union { @@ -1589,7 +1589,7 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags, conv->rvaluedness_matches_p = (TYPE_REF_IS_RVALUE (rto) == TYPE_REF_IS_RVALUE (rfrom)); else - conv->rvaluedness_matches_p + conv->rvaluedness_matches_p = (TYPE_REF_IS_RVALUE (rto) == !is_lvalue); if ((gl_kind & clk_bitfield) != 0 @@ -2490,16 +2490,16 @@ add_builtin_candidate (struct z_candidate **candidates, enum tree_code code, break; if (TYPE_PTR_P (type1) && TYPE_PTR_P (type2)) break; - if (TREE_CODE (type1) == ENUMERAL_TYPE + if (TREE_CODE (type1) == ENUMERAL_TYPE && TREE_CODE (type2) == ENUMERAL_TYPE) break; - if (TYPE_PTR_P (type1) + if (TYPE_PTR_P (type1) && null_ptr_cst_p (args[1])) { type2 = type1; break; } - if (null_ptr_cst_p (args[0]) + if (null_ptr_cst_p (args[0]) && TYPE_PTR_P (type2)) { type1 = type2; @@ -2662,7 +2662,7 @@ add_builtin_candidate (struct z_candidate **candidates, enum tree_code code, if (ARITHMETIC_TYPE_P (type1)) break; return; - + default: gcc_unreachable (); } @@ -3940,7 +3940,7 @@ print_error_for_call_failure (tree fn, vec *args, bool any_viable_p ARGS. */ tree -build_new_function_call (tree fn, vec **args, bool koenig_p, +build_new_function_call (tree fn, vec **args, bool koenig_p, tsubst_flags_t complain) { struct z_candidate *candidates, *cand; @@ -4041,8 +4041,9 @@ build_operator_new_call (tree fnname, vec **args, if (size_check != NULL_TREE) { tree errval = TYPE_MAX_VALUE (sizetype); - if (cxx_dialect >= cxx11 && flag_exceptions && - DISABLE_CXA_THROW_BAD_ARRAY_NEW_LENGTH) + if (cxx_dialect >= cxx11 && flag_exceptions + /* ANDROID - temporarily disable __cxa_throw_bad_array_new_length call. */ + && !TARGET_ANDROID) errval = throw_bad_array_new_length (); *size = fold_build3 (COND_EXPR, sizetype, size_check, original_size, errval); @@ -4233,7 +4234,7 @@ build_op_call_1 (tree obj, vec **args, tsubst_flags_t complain) { if (complain & tf_error) { - error ("call of %<(%T) (%A)%> is ambiguous", + error ("call of %<(%T) (%A)%> is ambiguous", TREE_TYPE (obj), build_tree_list_vec (*args)); print_z_candidates (location_of (TREE_TYPE (obj)), candidates); } @@ -4462,7 +4463,7 @@ build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3, if (!arg2) { if (complain & tf_error) - pedwarn (loc, OPT_Wpedantic, + pedwarn (loc, OPT_Wpedantic, "ISO C++ forbids omitting the middle term of a ?: expression"); /* Make sure that lvalues remain lvalues. See g++.oliva/ext1.C. */ @@ -5160,7 +5161,7 @@ add_candidates (tree fns, tree first_arg, const vec *args, fn, ctype, explicit_targs, - fn_first_arg, + fn_first_arg, fn_args, return_type, access_path, @@ -5376,7 +5377,7 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1, -fpermissive. */ else { - const char *msg = (flag_permissive) + const char *msg = (flag_permissive) ? G_("no %<%D(int)%> declared for postfix %qs," " trying prefix operator instead") : G_("no %<%D(int)%> declared for postfix %qs"); @@ -5579,8 +5580,8 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1, return cp_build_array_ref (input_location, arg1, arg2, complain); case MEMBER_REF: - return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR, - complain), + return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR, + complain), arg2, complain); /* The caller will deal with these. */ @@ -6111,7 +6112,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, about to bind it to a reference, in which case we need to leave it as an lvalue. */ if (inner >= 0) - { + { expr = decl_constant_value_safe (expr); if (expr == null_node && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (totype)) /* If __null has been converted to an integer type, we do not @@ -6205,7 +6206,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, expr = convert_like_real (next_conversion (convs), expr, fn, argnum, convs->kind == ck_ref_bind ? -1 : 1, - convs->kind == ck_ref_bind ? issue_conversion_warnings : false, + convs->kind == ck_ref_bind ? issue_conversion_warnings : false, c_cast_p, complain); if (expr == error_mark_node) @@ -6273,7 +6274,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, return error_mark_node; } - /* If necessary, create a temporary. + /* If necessary, create a temporary. VA_ARG_EXPR and CONSTRUCTOR expressions are special cases that need temporaries, even when their types are reference @@ -6621,7 +6622,7 @@ convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain) tree bitfield_type; /* If VAL is a bitfield, then -- since it has already been converted - to TYPE -- it cannot have a precision greater than TYPE. + to TYPE -- it cannot have a precision greater than TYPE. If it has a smaller precision, we must widen it here. For example, passing "int f:3;" to a function expecting an "int" will @@ -6635,7 +6636,7 @@ convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain) if we call convert_bitfield_to_declared_type, the bitfield will be converted to "long long". */ bitfield_type = is_bitfield_expr_with_lowered_type (val); - if (bitfield_type + if (bitfield_type && TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)) val = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type), val); @@ -6717,7 +6718,7 @@ get_function_version_dispatcher (tree fn) return dispatcher_decl; } -/* fn is a function version dispatcher that is marked used. Mark all the +/* fn is a function version dispatcher that is marked used. Mark all the semantically identical function versions it will dispatch as used. */ void @@ -7058,7 +7059,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) : complain & (~tf_warning)); val = convert_for_arg_passing (type, val, complain); - + if (val == error_mark_node) return error_mark_node; else @@ -7098,8 +7099,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) if (! flag_elide_constructors) /* Do things the hard way. */; - else if (cand->num_convs == 1 - && (DECL_COPY_CONSTRUCTOR_P (fn) + else if (cand->num_convs == 1 + && (DECL_COPY_CONSTRUCTOR_P (fn) || DECL_MOVE_CONSTRUCTOR_P (fn))) { tree targ; @@ -7297,11 +7298,11 @@ build_cxx_call (tree fn, int nargs, tree *argarray, return error_mark_node; /* If it is a built-in array notation function, then the return type of - the function is the element type of the array passed in as array + the function is the element type of the array passed in as array notation (i.e. the first parameter of the function). */ - if (flag_cilkplus && TREE_CODE (fn) == CALL_EXPR) + if (flag_cilkplus && TREE_CODE (fn) == CALL_EXPR) { - enum built_in_function bif = + enum built_in_function bif = is_cilkplus_reduce_builtin (CALL_EXPR_FN (fn)); if (bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ADD || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUL @@ -7309,7 +7310,7 @@ build_cxx_call (tree fn, int nargs, tree *argarray, || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN || bif == BUILT_IN_CILKPLUS_SEC_REDUCE || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING) - { + { if (call_expr_nargs (fn) == 0) { error_at (EXPR_LOCATION (fn), "Invalid builtin arguments"); @@ -7317,13 +7318,13 @@ build_cxx_call (tree fn, int nargs, tree *argarray, } /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or - BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or + BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_NONZERO or BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND or BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND The pre-defined return-type is the correct one. */ - tree array_ntn = CALL_EXPR_ARG (fn, 0); - TREE_TYPE (fn) = TREE_TYPE (array_ntn); + tree array_ntn = CALL_EXPR_ARG (fn, 0); + TREE_TYPE (fn) = TREE_TYPE (array_ntn); return fn; } } @@ -7384,7 +7385,7 @@ build_java_interface_fn_ref (tree fn, tree instance) /* Look up the pointer to the runtime java.lang.Class object for `instance'. This is the first entry in the vtable. */ - klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL, + klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL, tf_warning_or_error), integer_zero_node); @@ -7568,7 +7569,7 @@ build_special_member_call (tree instance, tree name, vec **args, if ((complain & tf_error) && (flags & LOOKUP_DELEGATING_CONS) - && name == complete_ctor_identifier + && name == complete_ctor_identifier && TREE_CODE (ret) == CALL_EXPR && (DECL_ABSTRACT_ORIGIN (TREE_OPERAND (CALL_EXPR_FN (ret), 0)) == current_function_decl)) @@ -8745,7 +8746,7 @@ joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn, source = TREE_TYPE (source); if (warning (OPT_Wconversion, "choosing %qD over %qD", w->fn, l->fn) && warning (OPT_Wconversion, " for conversion from %qT to %qT", - source, w->second_conv->type)) + source, w->second_conv->type)) { inform (input_location, " because conversion sequence for the argument is better"); } @@ -8846,7 +8847,7 @@ joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn, tree f2 = TREE_TYPE (cand2->fn); tree p1 = TYPE_ARG_TYPES (f1); tree p2 = TYPE_ARG_TYPES (f2); - + /* Check if cand1->fn and cand2->fn are versions of the same function. It is possible that cand1->fn and cand2->fn are function versions but of different functions. Check types to see if they are versions of the same diff --git a/gcc-4.9/gcc/cp/cp-tree.h b/gcc-4.9/gcc/cp/cp-tree.h index 582988c30..ac60ad5b9 100644 --- a/gcc-4.9/gcc/cp/cp-tree.h +++ b/gcc-4.9/gcc/cp/cp-tree.h @@ -465,7 +465,7 @@ typedef enum expr_list_kind { ELK_INIT, /* initializer */ ELK_MEM_INIT, /* member initializer */ ELK_FUNC_CAST /* functional cast */ -} expr_list_kind; +} expr_list_kind; /* Possible cases of implicit bad rhs conversions. */ typedef enum impl_conv_rhs { @@ -662,7 +662,7 @@ typedef enum cp_trait_kind struct GTY (()) tree_trait_expr { struct tree_common common; tree type1; - tree type2; + tree type2; enum cp_trait_kind kind; }; @@ -817,7 +817,7 @@ union GTY((desc ("cp_tree_node_structure (&%h)"), struct tree_default_arg GTY ((tag ("TS_CP_DEFAULT_ARG"))) default_arg; struct tree_deferred_noexcept GTY ((tag ("TS_CP_DEFERRED_NOEXCEPT"))) deferred_noexcept; struct lang_identifier GTY ((tag ("TS_CP_IDENTIFIER"))) identifier; - struct tree_static_assert GTY ((tag ("TS_CP_STATIC_ASSERT"))) + struct tree_static_assert GTY ((tag ("TS_CP_STATIC_ASSERT"))) static_assertion; struct tree_argument_pack_select GTY ((tag ("TS_CP_ARGUMENT_PACK_SELECT"))) argument_pack_select; @@ -2694,7 +2694,7 @@ extern void decl_shadowed_for_var_insert (tree, tree); TREE_PURPOSE is the TEMPLATE_DECL of which this entity is a specialization or abstract instance. The TREE_VALUE is the template arguments used to specialize the template. - + Consider: template struct S { friend void f(T) {} }; @@ -2884,7 +2884,7 @@ extern void decl_shadowed_for_var_insert (tree, tree); template struct S {}; template struct S {}; - + the CLASSTPYE_TI_TEMPLATE for S will be S, not the S. */ #define CLASSTYPE_TI_TEMPLATE(NODE) TI_TEMPLATE (CLASSTYPE_TEMPLATE_INFO (NODE)) #define CLASSTYPE_TI_ARGS(NODE) TI_ARGS (CLASSTYPE_TEMPLATE_INFO (NODE)) @@ -3001,7 +3001,7 @@ extern void decl_shadowed_for_var_insert (tree, tree); select. */ #define ARGUMENT_PACK_SELECT_INDEX(NODE) \ (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->index) - + /* In an ARGUMENT_PACK_SELECT, the actual underlying argument that the ARGUMENT_PACK_SELECT represents. */ #define ARGUMENT_PACK_SELECT_ARG(NODE) \ @@ -3308,7 +3308,7 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter) /* [basic.fundamental] Integral and floating types are collectively called arithmetic - types. + types. As a GNU extension, we also accept complex types. @@ -3326,7 +3326,7 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter) Arithmetic types, enumeration types, pointer types, pointer-to-member types, and std::nullptr_t are collectively called scalar types. - + Keep these checks in ascending code order. */ #define SCALAR_TYPE_P(TYPE) \ (TYPE_PTRDATAMEM_P (TYPE) \ @@ -3346,7 +3346,7 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter) Scoped enumeration types are different from normal (unscoped) enumeration types in several ways: - + - The enumerators of a scoped enumeration type are only available within the scope of the enumeration type and not in the enclosing scope. For example, the Red color can be referred to @@ -3892,18 +3892,18 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter) template <> int min (int, int), 3=explicit instantiation, e.g.: - + template int min (int, int); Note that NODE will be marked as a specialization even if the template it is instantiating is not a primary template. For example, given: - template struct O { + template struct O { void f(); - struct I {}; + struct I {}; }; - + both O::f and O::I will be marked as instantiations. If DECL_USE_TEMPLATE is nonzero, then DECL_TEMPLATE_INFO will also @@ -5040,7 +5040,7 @@ extern bool pragma_java_exceptions; extern bool check_dtor_name (tree, tree); bool magic_varargs_p (tree); -extern tree build_conditional_expr (location_t, tree, tree, tree, +extern tree build_conditional_expr (location_t, tree, tree, tree, tsubst_flags_t); extern tree build_addr_func (tree, tsubst_flags_t); extern void set_flags_from_callee (tree); @@ -5052,7 +5052,7 @@ extern bool sufficient_parms_p (const_tree); extern tree type_decays_to (tree); extern tree build_user_type_conversion (tree, tree, int, tsubst_flags_t); -extern tree build_new_function_call (tree, vec **, bool, +extern tree build_new_function_call (tree, vec **, bool, tsubst_flags_t); extern tree build_operator_new_call (tree, vec **, tree *, tree *, tree, tree *, @@ -5542,7 +5542,7 @@ extern tree convert_generic_types_to_packs (tree, int, int); extern tree splice_late_return_type (tree, tree); extern bool is_auto (const_tree); extern bool is_auto_or_concept (const_tree); -extern tree process_template_parm (tree, location_t, tree, +extern tree process_template_parm (tree, location_t, tree, bool, bool); extern tree end_template_parm_list (tree); extern void end_template_decl (void); @@ -6062,7 +6062,7 @@ extern tree unlowered_expr_type (const_tree); extern tree decay_conversion (tree, tsubst_flags_t); extern tree build_class_member_access_expr (tree, tree, tree, bool, tsubst_flags_t); -extern tree finish_class_member_access_expr (tree, tree, bool, +extern tree finish_class_member_access_expr (tree, tree, bool, tsubst_flags_t); extern tree build_x_indirect_ref (location_t, tree, ref_operator, tsubst_flags_t); @@ -6089,10 +6089,10 @@ extern tree build_x_unary_op (location_t, tsubst_flags_t); extern tree cp_build_addr_expr (tree, tsubst_flags_t); extern tree cp_build_addr_expr_strict (tree, tsubst_flags_t); -extern tree cp_build_unary_op (enum tree_code, tree, int, +extern tree cp_build_unary_op (enum tree_code, tree, int, tsubst_flags_t); extern tree unary_complex_lvalue (enum tree_code, tree); -extern tree build_x_conditional_expr (location_t, tree, tree, tree, +extern tree build_x_conditional_expr (location_t, tree, tree, tree, tsubst_flags_t); extern tree build_x_compound_expr_from_list (tree, expr_list_kind, tsubst_flags_t); @@ -6133,7 +6133,7 @@ extern void expand_ptrmemfunc_cst (tree, tree *, tree *); extern tree type_after_usual_arithmetic_conversions (tree, tree); extern tree common_pointer_type (tree, tree); extern tree composite_pointer_type (tree, tree, tree, tree, - composite_pointer_operation, + composite_pointer_operation, tsubst_flags_t); extern tree merge_types (tree, tree); extern tree strip_array_domain (tree); @@ -6277,11 +6277,6 @@ bool cilkplus_an_triplet_types_ok_p (location_t, tree, tree, tree, /* In c-family/cilk.c */ extern bool cilk_valid_spawn (tree); -// This symbol can be overridden by target config. -#ifndef DISABLE_CXA_THROW_BAD_ARRAY_NEW_LENGTH -#define DISABLE_CXA_THROW_BAD_ARRAY_NEW_LENGTH 0 -#endif - /* -- end of C++ */ #endif /* ! GCC_CP_TREE_H */ diff --git a/gcc-4.9/gcc/cp/init.c b/gcc-4.9/gcc/cp/init.c index 7313f8477..283843ae9 100644 --- a/gcc-4.9/gcc/cp/init.c +++ b/gcc-4.9/gcc/cp/init.c @@ -388,7 +388,7 @@ build_value_init_noctor (tree type, tsubst_flags_t complain) { gcc_assert (!TYPE_HAS_COMPLEX_DFLT (type) || errorcount != 0); - + if (TREE_CODE (type) != UNION_TYPE) { tree field; @@ -1217,7 +1217,7 @@ expand_virtual_init (tree binfo, tree decl) } /* Compute the location of the vtpr. */ - vtbl_ptr = build_vfield_ref (cp_build_indirect_ref (decl, RO_NULL, + vtbl_ptr = build_vfield_ref (cp_build_indirect_ref (decl, RO_NULL, tf_warning_or_error), TREE_TYPE (binfo)); gcc_assert (vtbl_ptr != error_mark_node); @@ -2586,8 +2586,10 @@ build_new_1 (vec **placement, tree type, tree nelts, } /* Perform the overflow check. */ tree errval = TYPE_MAX_VALUE (sizetype); - if (cxx_dialect >= cxx11 && flag_exceptions && - DISABLE_CXA_THROW_BAD_ARRAY_NEW_LENGTH) + if (cxx_dialect >= cxx11 && flag_exceptions + /* ANDROID - temporarily disable __cxa_throw_bad_array_new_length + call. */ + && !TARGET_ANDROID) errval = throw_bad_array_new_length (); if (outer_nelts_check != NULL_TREE) size = fold_build3 (COND_EXPR, sizetype, outer_nelts_check, @@ -3218,7 +3220,7 @@ build_vec_delete_1 (tree base, tree maxindex, tree type, "even if they are declared when the class is defined"); } return build_builtin_delete_call (base); - } + } size_exp = size_in_bytes (type); @@ -3379,7 +3381,7 @@ get_temp_regvar (tree type, tree init) decl = create_temporary_var (type); add_decl_expr (decl); - finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init, + finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init, tf_warning_or_error)); return decl; @@ -3768,7 +3770,7 @@ build_vec_init (tree base, tree maxindex, tree init, from = NULL_TREE; if (from_array == 2) - elt_init = cp_build_modify_expr (to, NOP_EXPR, from, + elt_init = cp_build_modify_expr (to, NOP_EXPR, from, complain); else if (type_build_ctor_call (type)) elt_init = build_aggr_init (to, from, 0, complain); diff --git a/gcc-4.9/gcc/gcc.c b/gcc-4.9/gcc/gcc.c index e2d921718..e187cd19c 100644 --- a/gcc-4.9/gcc/gcc.c +++ b/gcc-4.9/gcc/gcc.c @@ -751,11 +751,6 @@ proper position among the other output files. */ %{fvtable-verify=preinit: -lvtv -u_vtable_map_vars_start -u_vtable_map_vars_end}}" #endif -/* Overridable by target. */ -#ifndef PROFILE_OR_COV_LINK_SPEC -#define PROFILE_OR_COV_LINK_SPEC "" -#endif - /* -u* was put back because both BSD and SysV seem to support it. */ /* %{static:} simply prevents an error message if the target machine doesn't handle -static. */ @@ -782,7 +777,9 @@ proper position among the other output files. */ %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\ %{fcilkplus:%:include(libcilkrts.spec)%(link_cilkrts)}\ %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\ - %(mflib) " STACK_SPLIT_SPEC PROFILE_OR_COV_LINK_SPEC "\ + %(mflib) " STACK_SPLIT_SPEC "\ + %{fprofile-arcs|fprofile-generate*|coverage:-lgcov " \ + LINUX_OR_ANDROID_LD("", "-lgcc") "}" SANITIZER_SPEC " \ %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\ %{!nostdlib:%{!nostartfiles:%E}} %{T*} }}}}}}" #endif @@ -5404,7 +5401,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) "%{foo=*:bar%*}%{foo=*:one%*two}" matches -foo=hello then it will produce: - + barhello onehellotwo */ if (*p == 0 || *p == '}') @@ -6347,7 +6344,7 @@ set_func_reorder_linker_plugin_spec (void) int i; const char *plugin_opt_none = "group=none"; const char *plugin_opt_callgraph = "group=callgraph"; - + /* Find the linker plugin that does function ordering. */ func_reorder_linker_plugin_file_spec = find_a_file (&exec_prefixes, FRPLUGINSONAME, R_OK, false); @@ -7221,7 +7218,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n" lto_gcc_spec = argv[0]; /* The function reordering linker plugin will be loaded if the option - -freorder-functions= is present in the command-line. */ + -freorder-functions= is present in the command-line. */ if (switch_matches (freorder_functions_, freorder_functions_ + strlen (freorder_functions_), 1)) set_func_reorder_linker_plugin_spec (); @@ -8490,9 +8487,9 @@ static unsigned HOST_WIDE_INT get_random_number (void) { unsigned HOST_WIDE_INT ret = 0; - int fd; + int fd; - fd = open ("/dev/urandom", O_RDONLY); + fd = open ("/dev/urandom", O_RDONLY); if (fd >= 0) { read (fd, &ret, sizeof (HOST_WIDE_INT)); @@ -8744,16 +8741,16 @@ replace_extension_spec_func (int argc, const char **argv) return result; } -/* Insert backslash before spaces in ORIG (usually a file path), to +/* Insert backslash before spaces in ORIG (usually a file path), to avoid being broken by spec parser. This function is needed as do_spec_1 treats white space (' ' and '\t') as the end of an argument. But in case of -plugin /usr/gcc install/xxx.so, the file name should be treated as a single argument rather than being - broken into multiple. Solution is to insert '\\' before the space in a + broken into multiple. Solution is to insert '\\' before the space in a file name. - - This function converts and only converts all occurrence of ' ' + + This function converts and only converts all occurrence of ' ' to '\\' + ' ' and '\t' to '\\' + '\t'. For example: "a b" -> "a\\ b" "a b" -> "a\\ \\ b" -- cgit v1.2.3