Use copy of apex_available in AvailableToSameApexes
Modifying the list in-place causes some non-determinism.
Test: go test ./cc -run TestStubsForLibraryInMultipleApexes -count 1000
Bug: 275313114
Change-Id: Ia2519e146d97667ad5900cf68ab9935fcbaf08a4
diff --git a/android/apex.go b/android/apex.go
index 5bbc02e..5cc0584 100644
--- a/android/apex.go
+++ b/android/apex.go
@@ -502,8 +502,9 @@
// exactly the same set of APEXes (and platform), i.e. if their apex_available
// properties have the same elements.
func AvailableToSameApexes(mod1, mod2 ApexModule) bool {
- mod1ApexAvail := SortedUniqueStrings(mod1.apexModuleBase().ApexProperties.Apex_available)
- mod2ApexAvail := SortedUniqueStrings(mod2.apexModuleBase().ApexProperties.Apex_available)
+ // Use CopyOf to prevent non-determinism (b/275313114#comment1)
+ mod1ApexAvail := SortedUniqueStrings(CopyOf(mod1.apexModuleBase().ApexProperties.Apex_available))
+ mod2ApexAvail := SortedUniqueStrings(CopyOf(mod2.apexModuleBase().ApexProperties.Apex_available))
if len(mod1ApexAvail) != len(mod2ApexAvail) {
return false
}
diff --git a/cc/cc_test.go b/cc/cc_test.go
index b986511..417ea9c 100644
--- a/cc/cc_test.go
+++ b/cc/cc_test.go
@@ -3573,9 +3573,6 @@
}
func TestStubsForLibraryInMultipleApexes(t *testing.T) {
- // TODO(b/275313114): Test exposes non-determinism which should be corrected and the test
- // reenabled.
- t.Skip()
t.Parallel()
ctx := testCc(t, `
cc_library_shared {