From 0b33d288ecad252d00ef22fd72a1b1f12c0642ff Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Mon, 8 Aug 2016 17:38:07 +0200
Subject: [PATCH] Fix PR gcov-profile/46266
gcc/ChangeLog:
2016-08-12 Martin Liska <mliska@suse.cz>
PR gcov-profile/46266
* gimple.h (gimple_has_not_reserved_location): New function.
* input.h (RESERVED_LOCATION_P): New macro.
* profile.c (branch_prob): Use RESERVED_LOCATION_P and
gimple_has_not_reserved_location instread of comparison
with UNKNOWN_LOCATION.
---
gcc/gimple.h | 8 ++++++++
gcc/input.h | 2 ++
gcc/profile.c | 9 ++++-----
3 files changed, 14 insertions(+), 5 deletions(-)
@@ -1792,6 +1792,14 @@ gimple_has_location (const gimple *g)
return LOCATION_LOCUS (gimple_location (g)) != UNKNOWN_LOCATION;
}
+/* Return true if G has a location that is not any from reserved. */
+
+static inline bool
+gimple_has_not_reserved_location (const gimple *g)
+{
+ return !RESERVED_LOCATION_P (gimple_location (g));
+}
+
/* Return the file name of the location of STMT. */
@@ -61,6 +61,8 @@ extern location_t input_location;
#define LOCATION_BLOCK(LOC) \
((tree) ((IS_ADHOC_LOC (LOC)) ? get_data_from_adhoc_loc (line_table, (LOC)) \
: NULL))
+#define RESERVED_LOCATION_P(LOC) \
+ (LOCATION_LOCUS (LOC) < RESERVED_LOCATION_COUNT)
/* Return a positive value if LOCATION is the locus of a token that is
located in a system header, O otherwise. It returns 1 if LOCATION
@@ -1042,7 +1042,7 @@ branch_prob (void)
gsi_prev_nondebug (&gsi))
{
last = gsi_stmt (gsi);
- if (gimple_has_location (last))
+ if (gimple_has_not_reserved_location (last))
break;
}
@@ -1053,7 +1053,7 @@ branch_prob (void)
is not computed twice. */
if (last
&& gimple_has_location (last)
- && LOCATION_LOCUS (e->goto_locus) != UNKNOWN_LOCATION
+ && !RESERVED_LOCATION_P (e->goto_locus)
&& !single_succ_p (bb)
&& (LOCATION_FILE (e->goto_locus)
!= LOCATION_FILE (gimple_location (last))
@@ -1262,15 +1262,14 @@ branch_prob (void)
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
{
gimple *stmt = gsi_stmt (gsi);
- if (gimple_has_location (stmt))
+ if (gimple_has_not_reserved_location (stmt))
output_location (gimple_filename (stmt), gimple_lineno (stmt),
&offset, bb);
}
/* Notice GOTO expressions eliminated while constructing the CFG. */
if (single_succ_p (bb)
- && LOCATION_LOCUS (single_succ_edge (bb)->goto_locus)
- != UNKNOWN_LOCATION)
+ && !RESERVED_LOCATION_P (single_succ_edge (bb)->goto_locus))
{
expanded_location curr_location
= expand_location (single_succ_edge (bb)->goto_locus);
--
2.9.2