This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [GOOGLE] Disallow importing modules with different --std
- From: Xinliang David Li <davidxl at google dot com>
- To: Dehao Chen <dehao at google dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 26 Apr 2013 21:23:35 -0700
- Subject: Re: [GOOGLE] Disallow importing modules with different --std
- References: <CAO2gOZV6u7dH1gHLHa_vf8aBoPUH_M6LtHsXDB_3LQ+BUHn_zA at mail dot gmail dot com>
ok with benchmark testing.
Need to be in all google branches (47, 48 and main)
David
On Fri, Apr 26, 2013 at 7:57 PM, Dehao Chen <dehao@google.com> wrote:
> This patch forbids modules to be imported as aux module if its --std
> is different with the primary module.
>
> Bootstrapped and passed regression test.
>
> OK for google branches?
>
> Thanks,
> Dehao
>
> Index: gcc/coverage.c
> ===================================================================
> --- gcc/coverage.c (revision 198353)
> +++ gcc/coverage.c (working copy)
> @@ -384,6 +384,7 @@ incompatible_cl_args (struct gcov_module_info* mod
> char **warning_opts2 = XNEWVEC (char *, mod_info2->num_cl_args);
> char **non_warning_opts1 = XNEWVEC (char *, mod_info1->num_cl_args);
> char **non_warning_opts2 = XNEWVEC (char *, mod_info2->num_cl_args);
> + char *std_opts1 = NULL, *std_opts2 = NULL;
> unsigned int i, num_warning_opts1 = 0, num_warning_opts2 = 0;
> unsigned int num_non_warning_opts1 = 0, num_non_warning_opts2 = 0;
> bool warning_mismatch = false;
> @@ -396,7 +397,7 @@ incompatible_cl_args (struct gcov_module_info* mod
> mod_info2->num_bracket_paths + mod_info2->num_cpp_defines +
> mod_info2->num_cpp_includes;
>
> - bool *cg_opts1, *cg_opts2, has_any_incompatible_cg_opts;
> + bool *cg_opts1, *cg_opts2, has_any_incompatible_cg_opts,
> has_incompatible_std;
> unsigned int num_cg_opts = 0;
>
> for (i = 0; force_matching_cg_opts[i].opt_str; i++)
> @@ -426,6 +427,8 @@ incompatible_cl_args (struct gcov_module_info* mod
> char *option_string = mod_info1->string_array[start_index1 + i];
>
> check_cg_opts (cg_opts1, option_string);
> + if (strstr (option_string, "-std="))
> + std_opts1 = option_string;
>
> slot = htab_find_slot (option_tab1, option_string, INSERT);
> if (!*slot)
> @@ -445,6 +448,8 @@ incompatible_cl_args (struct gcov_module_info* mod
> char *option_string = mod_info2->string_array[start_index2 + i];
>
> check_cg_opts (cg_opts2, option_string);
> + if (strstr (option_string, "-std="))
> + std_opts2 = option_string;
>
> slot = htab_find_slot (option_tab2, option_string, INSERT);
> if (!*slot)
> @@ -454,6 +459,10 @@ incompatible_cl_args (struct gcov_module_info* mod
> }
> }
>
> + has_incompatible_std =
> + std_opts1 != std_opts2 && (std_opts1 == NULL || std_opts2 == NULL
> + || strcmp (std_opts1, std_opts2));
> +
> /* Compare warning options. If these mismatch, we emit a warning. */
> if (num_warning_opts1 != num_warning_opts2)
> warning_mismatch = true;
> @@ -498,7 +507,7 @@ incompatible_cl_args (struct gcov_module_info* mod
> htab_delete (option_tab1);
> htab_delete (option_tab2);
> return ((flag_ripa_disallow_opt_mismatch && non_warning_mismatch)
> - || has_any_incompatible_cg_opts);
> + || has_any_incompatible_cg_opts || has_incompatible_std);
> }
>
> /* Support for module sorting based on user specfication. */