Commit bc162b0e by Indu Bhagat Committed by Qing Zhao

re PR gcov-profile/86957 (gcc should warn about missing profiles for a…

re PR gcov-profile/86957 (gcc should warn about missing profiles for a compilation unit or a new function with -fprofile-use)

2018-09-26  Indu Bhagat  <indu.bhagat@oracle.com>

	PR gcov-profile/86957
	* common.opt: New warning option -Wmissing-profile.
	* coverage.c (get_coverage_counts): Add warning for missing .gcda file.
	* doc/invoke.texi: Document -Wmissing-profile.

From-SVN: r264657
parent 8313a764
2018-09-26 Indu Bhagat <indu.bhagat@oracle.com>
PR gcov-profile/86957
* common.opt: New warning option -Wmissing-profile.
* coverage.c (get_coverage_counts): Add warning for missing .gcda file.
* doc/invoke.texi: Document -Wmissing-profile.
2018-09-26 Jim Wilson <jimw@sifive.com> 2018-09-26 Jim Wilson <jimw@sifive.com>
* config/riscv/riscv.md (subsi3_extended2): Add J constraint. * config/riscv/riscv.md (subsi3_extended2): Add J constraint.
......
...@@ -811,6 +811,10 @@ Wcoverage-mismatch ...@@ -811,6 +811,10 @@ Wcoverage-mismatch
Common Var(warn_coverage_mismatch) Init(1) Warning Common Var(warn_coverage_mismatch) Init(1) Warning
Warn in case profiles in -fprofile-use do not match. Warn in case profiles in -fprofile-use do not match.
Wmissing-profile
Common Var(warn_missing_profile) Init(1) Warning
Warn in case profiles in -fprofile-use do not exist.
Wvector-operation-performance Wvector-operation-performance
Common Var(warn_vector_operation_performance) Warning Common Var(warn_vector_operation_performance) Warning
Warn when a vector operation is compiled outside the SIMD. Warn when a vector operation is compiled outside the SIMD.
......
...@@ -304,16 +304,23 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum, ...@@ -304,16 +304,23 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum,
{ {
static int warned = 0; static int warned = 0;
if (!warned++ && dump_enabled_p ()) if (!warned++)
{ {
dump_user_location_t loc warning (OPT_Wmissing_profile,
= dump_user_location_t::from_location_t (input_location); "%qs profile count data file not found",
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc, da_file_name);
if (dump_enabled_p ())
{
dump_user_location_t loc
= dump_user_location_t::from_location_t (input_location);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
"file %s not found\n",
da_file_name);
dump_printf (MSG_OPTIMIZED_LOCATIONS,
(flag_guess_branch_prob (flag_guess_branch_prob
? "file %s not found, execution counts estimated\n" ? "execution counts estimated\n"
: "file %s not found, execution counts assumed to " : "execution counts assumed to be zero\n"));
"be zero\n"), }
da_file_name);
} }
return NULL; return NULL;
} }
...@@ -327,10 +334,17 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum, ...@@ -327,10 +334,17 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum,
elt.ctr = counter; elt.ctr = counter;
entry = counts_hash->find (&elt); entry = counts_hash->find (&elt);
if (!entry) if (!entry)
/* The function was not emitted, or is weak and not chosen in the {
final executable. Silently fail, because there's nothing we if (counter == GCOV_COUNTER_ARCS)
can do about it. */ warning_at (DECL_SOURCE_LOCATION (current_function_decl),
return NULL; OPT_Wmissing_profile,
"profile for function %qD not found in profile data",
current_function_decl);
/* The function was not emitted, or is weak and not chosen in the
final executable. Silently fail, because there's nothing we
can do about it. */
return NULL;
}
if (entry->cfg_checksum != cfg_checksum) if (entry->cfg_checksum != cfg_checksum)
{ {
......
...@@ -315,7 +315,7 @@ Objective-C and Objective-C++ Dialects}. ...@@ -315,7 +315,7 @@ Objective-C and Objective-C++ Dialects}.
-Wlogical-op -Wlogical-not-parentheses -Wlong-long @gol -Wlogical-op -Wlogical-not-parentheses -Wlong-long @gol
-Wmain -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args @gol -Wmain -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args @gol
-Wmisleading-indentation -Wmissing-attributes -Wmissing-braces @gol -Wmisleading-indentation -Wmissing-attributes -Wmissing-braces @gol
-Wmissing-field-initializers -Wmissing-include-dirs @gol -Wmissing-field-initializers -Wmissing-include-dirs -Wmissing-profile @gol
-Wno-multichar -Wmultistatement-macros -Wnonnull -Wnonnull-compare @gol -Wno-multichar -Wmultistatement-macros -Wnonnull -Wnonnull-compare @gol
-Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol -Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol
-Wnull-dereference -Wodr -Wno-overflow -Wopenmp-simd @gol -Wnull-dereference -Wodr -Wno-overflow -Wopenmp-simd @gol
...@@ -4215,8 +4215,8 @@ Warn about an invalid memory access that is found by Pointer Bounds Checker ...@@ -4215,8 +4215,8 @@ Warn about an invalid memory access that is found by Pointer Bounds Checker
@opindex Wcoverage-mismatch @opindex Wcoverage-mismatch
Warn if feedback profiles do not match when using the Warn if feedback profiles do not match when using the
@option{-fprofile-use} option. @option{-fprofile-use} option.
If a source file is changed between compiling with @option{-fprofile-gen} and If a source file is changed between compiling with @option{-fprofile-generate}
with @option{-fprofile-use}, the files with the profile feedback can fail and with @option{-fprofile-use}, the files with the profile feedback can fail
to match the source file and GCC cannot use the profile feedback to match the source file and GCC cannot use the profile feedback
information. By default, this warning is enabled and is treated as an information. By default, this warning is enabled and is treated as an
error. @option{-Wno-coverage-mismatch} can be used to disable the error. @option{-Wno-coverage-mismatch} can be used to disable the
...@@ -4820,6 +4820,23 @@ This warning is enabled by @option{-Wall}. ...@@ -4820,6 +4820,23 @@ This warning is enabled by @option{-Wall}.
@opindex Wno-missing-include-dirs @opindex Wno-missing-include-dirs
Warn if a user-supplied include directory does not exist. Warn if a user-supplied include directory does not exist.
@item -Wmissing-profile
@opindex Wmissing-profile
@opindex Wno-missing-profile
Warn if feedback profiles are missing when using the
@option{-fprofile-use} option.
This option diagnoses those cases where a new function or a new file is added
to the user code between compiling with @option{-fprofile-generate} and with
@option{-fprofile-use}, without regenerating the profiles. In these cases, the
profile feedback data files do not contain any profile feedback information for
the newly added function or file respectively. Also, in the case when profile
count data (.gcda) files are removed, GCC cannot use any profile feedback
information. In all these cases, warnings are issued to inform the user that a
profile generation step is due. @option{-Wno-missing-profile} can be used to
disable the warning. Ignoring the warning can result in poorly optimized code.
Completely disabling the warning is not recommended and should be done only
when non-existent profile data is justified.
@item -Wmultistatement-macros @item -Wmultistatement-macros
@opindex Wmultistatement-macros @opindex Wmultistatement-macros
@opindex Wno-multistatement-macros @opindex Wno-multistatement-macros
...@@ -9917,8 +9934,9 @@ Before you can use this option, you must first generate profiling information. ...@@ -9917,8 +9934,9 @@ Before you can use this option, you must first generate profiling information.
By default, GCC emits an error message if the feedback profiles do not By default, GCC emits an error message if the feedback profiles do not
match the source code. This error can be turned into a warning by using match the source code. This error can be turned into a warning by using
@option{-Wcoverage-mismatch}. Note this may result in poorly optimized @option{-Wno-error=coverage-mismatch}. Note this may result in poorly
code. optimized code. Additionally, by default, GCC also emits a warning message if
the feedback profiles do not exist (See @option{-Wmissing-profile}).
If @var{path} is specified, GCC looks at the @var{path} to find If @var{path} is specified, GCC looks at the @var{path} to find
the profile feedback data files. See @option{-fprofile-dir}. the profile feedback data files. See @option{-fprofile-dir}.
2018-09-26 Indu Bhagat <indu.bhagat@oracle.com>
PR gcov-profile/86957
* gcc.dg/Wmissing-profile.c: New test.
2018-09-26 Joseph Myers <joseph@codesourcery.com> 2018-09-26 Joseph Myers <joseph@codesourcery.com>
PR c/87390 PR c/87390
......
/* PR gcov-profile/86957 */
/* { dg-do compile } */
/* { dg-options "-fprofile-use" } */
void foo () { } /* { dg-warning "profile count data file not found" } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment