mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
8313a7643a
commit
bc162b0e6f
|
|
@ -1,3 +1,10 @@
|
||||||
|
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
|
||||||
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,
|
||||||
{
|
{
|
||||||
static int warned = 0;
|
static int warned = 0;
|
||||||
|
|
||||||
if (!warned++ && dump_enabled_p ())
|
if (!warned++)
|
||||||
|
{
|
||||||
|
warning (OPT_Wmissing_profile,
|
||||||
|
"%qs profile count data file not found",
|
||||||
|
da_file_name);
|
||||||
|
if (dump_enabled_p ())
|
||||||
{
|
{
|
||||||
dump_user_location_t loc
|
dump_user_location_t loc
|
||||||
= dump_user_location_t::from_location_t (input_location);
|
= dump_user_location_t::from_location_t (input_location);
|
||||||
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
|
||||||
(flag_guess_branch_prob
|
"file %s not found\n",
|
||||||
? "file %s not found, execution counts estimated\n"
|
|
||||||
: "file %s not found, execution counts assumed to "
|
|
||||||
"be zero\n"),
|
|
||||||
da_file_name);
|
da_file_name);
|
||||||
|
dump_printf (MSG_OPTIMIZED_LOCATIONS,
|
||||||
|
(flag_guess_branch_prob
|
||||||
|
? "execution counts estimated\n"
|
||||||
|
: "execution counts assumed to be zero\n"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
|
{
|
||||||
|
if (counter == GCOV_COUNTER_ARCS)
|
||||||
|
warning_at (DECL_SOURCE_LOCATION (current_function_decl),
|
||||||
|
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
|
/* The function was not emitted, or is weak and not chosen in the
|
||||||
final executable. Silently fail, because there's nothing we
|
final executable. Silently fail, because there's nothing we
|
||||||
can do about it. */
|
can do about it. */
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (entry->cfg_checksum != cfg_checksum)
|
if (entry->cfg_checksum != cfg_checksum)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
@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}.
|
||||||
@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.
|
||||||
|
|
||||||
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}.
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
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
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
/* PR gcov-profile/86957 */
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-fprofile-use" } */
|
||||||
|
|
||||||
|
void foo () { } /* { dg-warning "profile count data file not found" } */
|
||||||
Loading…
Reference in New Issue