- error ("coverage mismatch for function %qs while reading counter %qs.",
- IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl)),
- ctr_names[counter]);
- error ("number of counters is %d instead of %d", entry->summary.num, expected);
- return 0;
+ static int warned = 0;
+ bool warning_printed = false;
+ tree id = DECL_ASSEMBLER_NAME (current_function_decl);
+
+ warning_printed =
+ warning_at (input_location, OPT_Wcoverage_mismatch,
+ "The control flow of function %qE does not match "
+ "its profile data (counter %qs)", id, ctr_names[counter]);
+ if (warning_printed)
+ {
+ inform (input_location, "Use -Wno-error=coverage-mismatch to tolerate "
+ "the mismatch but performance may drop if the function is hot");
+
+ if (!seen_error ()
+ && !warned++)
+ {
+ inform (input_location, "coverage mismatch ignored");
+ inform (input_location, flag_guess_branch_prob
+ ? G_("execution counts estimated")
+ : G_("execution counts assumed to be zero"));
+ if (!flag_guess_branch_prob)
+ inform (input_location,
+ "this can result in poorly optimized code");
+ }
+ }
+
+ return NULL;