Commit 3fa176b7 by Ian Lance Taylor

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
parent ad7d66ab
a69f7c05f1880bb90544fb0c3577109cb1d7f3ab 8822487ed776d55eafed44de7d89ee54bbfbab47
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -509,7 +509,24 @@ Export::set_type_index(Type* type) ...@@ -509,7 +509,24 @@ Export::set_type_index(Type* type)
static bool static bool
packages_compare(const Package* a, const Package* b) 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 // Write out all the known packages whose pkgpath symbol is not a
......
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