compiler: sort packages in export data more deterministically
We can have multiple packages with the same name, so also sort by pkgpath. To avoid an inconsistent sort, sort by symbol and pointer address if we somehow get two different packages with the same name and pkgpath. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/171032 From-SVN: r270220
This commit is contained in:
parent
ad7d66abe9
commit
3fa176b767
@ -1,4 +1,4 @@
|
||||
a69f7c05f1880bb90544fb0c3577109cb1d7f3ab
|
||||
8822487ed776d55eafed44de7d89ee54bbfbab47
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
@ -509,7 +509,24 @@ Export::set_type_index(Type* type)
|
||||
static bool
|
||||
packages_compare(const Package* a, const Package* b)
|
||||
{
|
||||
return a->package_name() < b->package_name();
|
||||
if (a->package_name() < b->package_name())
|
||||
return true;
|
||||
else if (a->package_name() > b->package_name())
|
||||
return false;
|
||||
|
||||
if (a->pkgpath() < b->pkgpath())
|
||||
return true;
|
||||
else if (a->pkgpath() > b->pkgpath())
|
||||
return false;
|
||||
|
||||
// In principle if we get here then a == b. Try to do something sensible
|
||||
// even if the import information is inconsistent.
|
||||
if (a->pkgpath_symbol() < b->pkgpath_symbol())
|
||||
return true;
|
||||
else if (a->pkgpath_symbol() > b->pkgpath_symbol())
|
||||
return false;
|
||||
|
||||
return a < b;
|
||||
}
|
||||
|
||||
// Write out all the known packages whose pkgpath symbol is not a
|
||||
|
Loading…
Reference in New Issue
Block a user