Commit af597536 by Martin Liska Committed by Martin Liska

Make Wodr warnings stable.

2018-04-18  Martin Liska  <mliska@suse.cz>

	PR ipa/83983
	PR ipa/85391
	* lto.c (cmp_type_location): New function.
	(lto_read_decls): First collect all types, then
	sort them according by location before register_odr_type
	is called.
2018-04-18  Martin Liska  <mliska@suse.cz>

	PR ipa/83983
	PR ipa/85391
	* g++.dg/lto/pr83121_1.C (struct Environment): Adjust expected
	output.

From-SVN: r259479
parent 3c674e3e
2018-04-18 Martin Liska <mliska@suse.cz>
PR ipa/83983
PR ipa/85391
* lto.c (cmp_type_location): New function.
(lto_read_decls): First collect all types, then
sort them according by location before register_odr_type
is called.
2018-04-18 Jan Hubicka <jh@suse.cz> 2018-04-18 Jan Hubicka <jh@suse.cz>
Martin Liska <mliska@suse.cz> Martin Liska <mliska@suse.cz>
......
...@@ -1695,6 +1695,40 @@ unify_scc (struct data_in *data_in, unsigned from, ...@@ -1695,6 +1695,40 @@ unify_scc (struct data_in *data_in, unsigned from,
} }
/* Compare types based on source file location. */
static int
cmp_type_location (const void *p1_, const void *p2_)
{
tree *p1 = (tree*)(const_cast<void *>(p1_));
tree *p2 = (tree*)(const_cast<void *>(p2_));
if (*p1 == *p2)
return 0;
tree tname1 = TYPE_NAME (*p1);
tree tname2 = TYPE_NAME (*p2);
const char *f1 = DECL_SOURCE_FILE (tname1);
const char *f2 = DECL_SOURCE_FILE (tname2);
int r = strcmp (f1, f2);
if (r == 0)
{
int l1 = DECL_SOURCE_LINE (tname1);
int l2 = DECL_SOURCE_LINE (tname2);
if (l1 == l2)
{
int l1 = DECL_SOURCE_COLUMN (tname1);
int l2 = DECL_SOURCE_COLUMN (tname2);
return l1 - l2;
}
else
return l1 - l2;
}
else
return r;
}
/* Read all the symbols from buffer DATA, using descriptors in DECL_DATA. /* Read all the symbols from buffer DATA, using descriptors in DECL_DATA.
RESOLUTIONS is the set of symbols picked by the linker (read from the RESOLUTIONS is the set of symbols picked by the linker (read from the
resolution file when the linker plugin is being used). */ resolution file when the linker plugin is being used). */
...@@ -1711,6 +1745,7 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data, ...@@ -1711,6 +1745,7 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data,
unsigned int i; unsigned int i;
const uint32_t *data_ptr, *data_end; const uint32_t *data_ptr, *data_end;
uint32_t num_decl_states; uint32_t num_decl_states;
auto_vec<tree> odr_types;
lto_input_block ib_main ((const char *) data + main_offset, lto_input_block ib_main ((const char *) data + main_offset,
header->main_size, decl_data->mode_table); header->main_size, decl_data->mode_table);
...@@ -1780,7 +1815,7 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data, ...@@ -1780,7 +1815,7 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data,
if (!TYPE_CANONICAL (t)) if (!TYPE_CANONICAL (t))
gimple_register_canonical_type (t); gimple_register_canonical_type (t);
if (odr_type_p (t)) if (odr_type_p (t))
register_odr_type (t); odr_types.safe_push (t);
} }
/* Link shared INTEGER_CSTs into TYPE_CACHED_VALUEs of its /* Link shared INTEGER_CSTs into TYPE_CACHED_VALUEs of its
type which is also member of this SCC. */ type which is also member of this SCC. */
...@@ -1842,6 +1877,15 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data, ...@@ -1842,6 +1877,15 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data,
*slot = state; *slot = state;
} }
/* Sort types for the file before registering in ODR machinery. */
if (lto_location_cache::current_cache)
lto_location_cache::current_cache->apply_location_cache ();
odr_types.qsort (cmp_type_location);
/* Register ODR types. */
for (unsigned i = 0; i < odr_types.length (); i++)
register_odr_type (odr_types[i]);
if (data_ptr != data_end) if (data_ptr != data_end)
internal_error ("bytecode stream: garbage at the end of symbols section"); internal_error ("bytecode stream: garbage at the end of symbols section");
......
2018-04-18 Martin Liska <mliska@suse.cz>
PR ipa/83983
PR ipa/85391
* g++.dg/lto/pr83121_1.C (struct Environment): Adjust expected
output.
2018-04-18 H.J. Lu <hongjiu.lu@intel.com> 2018-04-18 H.J. Lu <hongjiu.lu@intel.com>
PR target/85388 PR target/85388
......
...@@ -2,7 +2,7 @@ struct Environment { ...@@ -2,7 +2,7 @@ struct Environment {
struct AsyncHooks { struct AsyncHooks {
int providers_[1]; int providers_[1];
}; };
AsyncHooks async_hooks_; // { dg-lto-message "a field of same name but different type is defined in another translation unit" } AsyncHooks async_hooks_;
}; };
void fn1() { Environment a; } void fn1() { Environment a; }
int main () int main ()
......
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