Index: gcc/opts.c --- gcc/opts.c.orig +++ gcc/opts.c @@ -50,6 +50,9 @@ const char *const debug_type_names[] = ((strncmp (prefix, string, sizeof prefix - 1) == 0) \ ? ((string += sizeof prefix - 1), 1) : 0) +int warn_stack_larger_than; +HOST_WIDE_INT stack_larger_than_size; + void set_struct_debug_option (struct gcc_options *opts, location_t loc, const char *spec) @@ -501,7 +504,6 @@ static const struct default_options default_options_ta #ifdef INSN_SCHEDULING { OPT_LEVELS_2_PLUS, OPT_fschedule_insns2, NULL, 1 }, #endif - { OPT_LEVELS_2_PLUS, OPT_fstrict_aliasing, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_fstore_merging, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_fthread_jumps, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_ftree_pre, NULL, 1 }, @@ -536,6 +538,7 @@ static const struct default_options default_options_ta { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 }, { OPT_LEVELS_3_PLUS, OPT_fsplit_loops, NULL, 1 }, { OPT_LEVELS_3_PLUS, OPT_fsplit_paths, NULL, 1 }, + { OPT_LEVELS_3_PLUS, OPT_fstrict_aliasing, NULL, 1 }, { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribution, NULL, 1 }, { OPT_LEVELS_3_PLUS, OPT_ftree_loop_vectorize, NULL, 1 }, { OPT_LEVELS_3_PLUS, OPT_ftree_partial_pre, NULL, 1 }, @@ -969,6 +972,8 @@ finish_options (struct gcc_options *opts, struct gcc_o opts->x_flag_pic = 0; if (opts->x_flag_pic && !opts->x_flag_pie) opts->x_flag_shlib = 1; + if (opts->x_profile_flag) + opts->x_flag_pie = 0; opts->x_flag_opts_finished = true; } @@ -2463,6 +2468,11 @@ common_handle_option (struct gcc_options *opts, case OPT_Wfatal_errors: dc->fatal_errors = value; break; + + case OPT_Wstack_larger_than_: + stack_larger_than_size = value; + warn_stack_larger_than = stack_larger_than_size != -1; + break; case OPT_Wstack_usage_: opts->x_flag_stack_usage_info = value != -1;