mirror of git://gcc.gnu.org/git/gcc.git
Move make_location from tree.h/c to input.h/c
For some reason I added make_location and some related functions to tree.h/c, rather than to input.h/c. Move them there, so we can use them without requiring tree, and add some selftest coverage. gcc/ChangeLog: * input.c (get_pure_location): Move here from tree.c. (make_location): Likewise. Add header comment. (selftest::test_accessing_ordinary_linemaps): Verify pure_location_p, make_location, get_location_from_adhoc_loc and get_range_from_loc. * input.h (get_pure_location): Move declaration here from tree.h. (get_finish): Likewise for inline function. (make_location): Likewise for declaration. * tree.c (get_pure_location): Move to input.c. (make_location): Likewise. * tree.h (get_pure_location): Move declaration to tree.h. (get_finish): Likewise for inline function. (make_location): Likewise for declaration. libcpp/ChangeLog: * include/line-map.h (source_location): Fix line numbers in comment. From-SVN: r238792
This commit is contained in:
parent
182f2f648a
commit
a01fc54920
|
|
@ -1,3 +1,19 @@
|
||||||
|
2016-07-27 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
* input.c (get_pure_location): Move here from tree.c.
|
||||||
|
(make_location): Likewise. Add header comment.
|
||||||
|
(selftest::test_accessing_ordinary_linemaps): Verify
|
||||||
|
pure_location_p, make_location, get_location_from_adhoc_loc and
|
||||||
|
get_range_from_loc.
|
||||||
|
* input.h (get_pure_location): Move declaration here from tree.h.
|
||||||
|
(get_finish): Likewise for inline function.
|
||||||
|
(make_location): Likewise for declaration.
|
||||||
|
* tree.c (get_pure_location): Move to input.c.
|
||||||
|
(make_location): Likewise.
|
||||||
|
* tree.h (get_pure_location): Move declaration to tree.h.
|
||||||
|
(get_finish): Likewise for inline function.
|
||||||
|
(make_location): Likewise for declaration.
|
||||||
|
|
||||||
2016-07-27 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
|
2016-07-27 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
|
||||||
|
|
||||||
PR middle-end/71078
|
PR middle-end/71078
|
||||||
|
|
|
||||||
60
gcc/input.c
60
gcc/input.c
|
|
@ -801,6 +801,56 @@ expansion_point_location (source_location location)
|
||||||
LRK_MACRO_EXPANSION_POINT, NULL);
|
LRK_MACRO_EXPANSION_POINT, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Given location LOC, strip away any packed range information
|
||||||
|
or ad-hoc information. */
|
||||||
|
|
||||||
|
location_t
|
||||||
|
get_pure_location (location_t loc)
|
||||||
|
{
|
||||||
|
if (IS_ADHOC_LOC (loc))
|
||||||
|
loc
|
||||||
|
= line_table->location_adhoc_data_map.data[loc & MAX_SOURCE_LOCATION].locus;
|
||||||
|
|
||||||
|
if (loc >= LINEMAPS_MACRO_LOWEST_LOCATION (line_table))
|
||||||
|
return loc;
|
||||||
|
|
||||||
|
if (loc < RESERVED_LOCATION_COUNT)
|
||||||
|
return loc;
|
||||||
|
|
||||||
|
const line_map *map = linemap_lookup (line_table, loc);
|
||||||
|
const line_map_ordinary *ordmap = linemap_check_ordinary (map);
|
||||||
|
|
||||||
|
return loc & ~((1 << ordmap->m_range_bits) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Construct a location with caret at CARET, ranging from START to
|
||||||
|
finish e.g.
|
||||||
|
|
||||||
|
11111111112
|
||||||
|
12345678901234567890
|
||||||
|
522
|
||||||
|
523 return foo + bar;
|
||||||
|
~~~~^~~~~
|
||||||
|
524
|
||||||
|
|
||||||
|
The location's caret is at the "+", line 523 column 15, but starts
|
||||||
|
earlier, at the "f" of "foo" at column 11. The finish is at the "r"
|
||||||
|
of "bar" at column 19. */
|
||||||
|
|
||||||
|
location_t
|
||||||
|
make_location (location_t caret, location_t start, location_t finish)
|
||||||
|
{
|
||||||
|
location_t pure_loc = get_pure_location (caret);
|
||||||
|
source_range src_range;
|
||||||
|
src_range.m_start = start;
|
||||||
|
src_range.m_finish = finish;
|
||||||
|
location_t combined_loc = COMBINE_LOCATION_DATA (line_table,
|
||||||
|
pure_loc,
|
||||||
|
src_range,
|
||||||
|
NULL);
|
||||||
|
return combined_loc;
|
||||||
|
}
|
||||||
|
|
||||||
#define ONE_K 1024
|
#define ONE_K 1024
|
||||||
#define ONE_M (ONE_K * ONE_K)
|
#define ONE_M (ONE_K * ONE_K)
|
||||||
|
|
||||||
|
|
@ -1335,6 +1385,16 @@ test_accessing_ordinary_linemaps (const line_table_case &case_)
|
||||||
assert_loceq ("bar.c", 1, 150, loc_f);
|
assert_loceq ("bar.c", 1, 150, loc_f);
|
||||||
|
|
||||||
ASSERT_FALSE (is_location_from_builtin_token (loc_a));
|
ASSERT_FALSE (is_location_from_builtin_token (loc_a));
|
||||||
|
ASSERT_TRUE (pure_location_p (line_table, loc_a));
|
||||||
|
|
||||||
|
/* Verify using make_location to build a range, and extracting data
|
||||||
|
back from it. */
|
||||||
|
location_t range_c_b_d = make_location (loc_c, loc_b, loc_d);
|
||||||
|
ASSERT_FALSE (pure_location_p (line_table, range_c_b_d));
|
||||||
|
ASSERT_EQ (loc_c, get_location_from_adhoc_loc (line_table, range_c_b_d));
|
||||||
|
source_range src_range = get_range_from_loc (line_table, range_c_b_d);
|
||||||
|
ASSERT_EQ (loc_b, src_range.m_start);
|
||||||
|
ASSERT_EQ (loc_d, src_range.m_finish);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Verify various properties of UNKNOWN_LOCATION. */
|
/* Verify various properties of UNKNOWN_LOCATION. */
|
||||||
|
|
|
||||||
13
gcc/input.h
13
gcc/input.h
|
|
@ -76,6 +76,19 @@ extern location_t input_location;
|
||||||
#define from_macro_expansion_at(LOC) \
|
#define from_macro_expansion_at(LOC) \
|
||||||
((linemap_location_from_macro_expansion_p (line_table, LOC)))
|
((linemap_location_from_macro_expansion_p (line_table, LOC)))
|
||||||
|
|
||||||
|
extern location_t get_pure_location (location_t loc);
|
||||||
|
|
||||||
|
/* Get the endpoint of any range encoded within location LOC. */
|
||||||
|
|
||||||
|
static inline location_t
|
||||||
|
get_finish (location_t loc)
|
||||||
|
{
|
||||||
|
return get_range_from_loc (line_table, loc).m_finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern location_t make_location (location_t caret,
|
||||||
|
location_t start, location_t finish);
|
||||||
|
|
||||||
void dump_line_table_statistics (void);
|
void dump_line_table_statistics (void);
|
||||||
|
|
||||||
void dump_location_info (FILE *stream);
|
void dump_location_info (FILE *stream);
|
||||||
|
|
|
||||||
36
gcc/tree.c
36
gcc/tree.c
|
|
@ -14112,28 +14112,6 @@ nonnull_arg_p (const_tree arg)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given location LOC, strip away any packed range information
|
|
||||||
or ad-hoc information. */
|
|
||||||
|
|
||||||
location_t
|
|
||||||
get_pure_location (location_t loc)
|
|
||||||
{
|
|
||||||
if (IS_ADHOC_LOC (loc))
|
|
||||||
loc
|
|
||||||
= line_table->location_adhoc_data_map.data[loc & MAX_SOURCE_LOCATION].locus;
|
|
||||||
|
|
||||||
if (loc >= LINEMAPS_MACRO_LOWEST_LOCATION (line_table))
|
|
||||||
return loc;
|
|
||||||
|
|
||||||
if (loc < RESERVED_LOCATION_COUNT)
|
|
||||||
return loc;
|
|
||||||
|
|
||||||
const line_map *map = linemap_lookup (line_table, loc);
|
|
||||||
const line_map_ordinary *ordmap = linemap_check_ordinary (map);
|
|
||||||
|
|
||||||
return loc & ~((1 << ordmap->m_range_bits) - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Combine LOC and BLOCK to a combined adhoc loc, retaining any range
|
/* Combine LOC and BLOCK to a combined adhoc loc, retaining any range
|
||||||
information. */
|
information. */
|
||||||
|
|
||||||
|
|
@ -14169,20 +14147,6 @@ set_source_range (tree expr, source_range src_range)
|
||||||
return adhoc;
|
return adhoc;
|
||||||
}
|
}
|
||||||
|
|
||||||
location_t
|
|
||||||
make_location (location_t caret, location_t start, location_t finish)
|
|
||||||
{
|
|
||||||
location_t pure_loc = get_pure_location (caret);
|
|
||||||
source_range src_range;
|
|
||||||
src_range.m_start = start;
|
|
||||||
src_range.m_finish = finish;
|
|
||||||
location_t combined_loc = COMBINE_LOCATION_DATA (line_table,
|
|
||||||
pure_loc,
|
|
||||||
src_range,
|
|
||||||
NULL);
|
|
||||||
return combined_loc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return the name of combined function FN, for debugging purposes. */
|
/* Return the name of combined function FN, for debugging purposes. */
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
|
|
|
||||||
13
gcc/tree.h
13
gcc/tree.h
|
|
@ -5425,16 +5425,6 @@ type_with_alias_set_p (const_tree t)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern location_t get_pure_location (location_t loc);
|
|
||||||
|
|
||||||
/* Get the endpoint of any range encoded within location LOC. */
|
|
||||||
|
|
||||||
static inline location_t
|
|
||||||
get_finish (location_t loc)
|
|
||||||
{
|
|
||||||
return get_range_from_loc (line_table, loc).m_finish;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern location_t set_block (location_t loc, tree block);
|
extern location_t set_block (location_t loc, tree block);
|
||||||
|
|
||||||
extern void gt_ggc_mx (tree &);
|
extern void gt_ggc_mx (tree &);
|
||||||
|
|
@ -5457,9 +5447,6 @@ get_decl_source_range (tree decl)
|
||||||
return get_range_from_loc (line_table, loc);
|
return get_range_from_loc (line_table, loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern location_t
|
|
||||||
make_location (location_t caret, location_t start, location_t finish);
|
|
||||||
|
|
||||||
/* Return true if it makes sense to promote/demote from_type to to_type. */
|
/* Return true if it makes sense to promote/demote from_type to to_type. */
|
||||||
inline bool
|
inline bool
|
||||||
desired_pro_or_demotion_p (const_tree to_type, const_tree from_type)
|
desired_pro_or_demotion_p (const_tree to_type, const_tree from_type)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-07-27 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
|
* include/line-map.h (source_location): Fix line numbers in
|
||||||
|
comment.
|
||||||
|
|
||||||
2016-07-11 David Malcolm <dmalcolm@redhat.com>
|
2016-07-11 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
* include/line-map.h (LINE_MAP_MAX_LOCATION_WITH_PACKED_RANGES):
|
* include/line-map.h (LINE_MAP_MAX_LOCATION_WITH_PACKED_RANGES):
|
||||||
|
|
|
||||||
|
|
@ -227,10 +227,10 @@ typedef unsigned int linenum_type;
|
||||||
|
|
||||||
11111111112
|
11111111112
|
||||||
12345678901234567890
|
12345678901234567890
|
||||||
521
|
522
|
||||||
523 return foo + bar;
|
523 return foo + bar;
|
||||||
~~~~^~~~~
|
~~~~^~~~~
|
||||||
523
|
524
|
||||||
|
|
||||||
The location's caret is at the "+", line 523 column 15, but starts
|
The location's caret is at the "+", line 523 column 15, but starts
|
||||||
earlier, at the "f" of "foo" at column 11. The finish is at the "r"
|
earlier, at the "f" of "foo" at column 11. The finish is at the "r"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue