Skip to content

Commit 0e65d9a

Browse files
authored
Merge branch 'ak/fixpointv2' into ak/fixpointv2-unreachableeog
2 parents e4bfb50 + 9e5a85a commit 0e65d9a

File tree

3 files changed

+39
-24
lines changed

3 files changed

+39
-24
lines changed

cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/helpers/functional/BasicLattices.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,21 @@ open class MapLattice<K, V>(elements: Map<K, LatticeElement<V>>) :
9898
override fun lub(
9999
other: LatticeElement<Map<K, LatticeElement<V>>>
100100
): LatticeElement<Map<K, LatticeElement<V>>> {
101-
return MapLattice(
102-
this.elements.entries.fold(other.elements) { current, (thisKey, thisValue) ->
103-
val mutableMap = current.toMutableMap()
104-
mutableMap.compute(thisKey) { k, v ->
105-
if (v == null) thisValue else thisValue.lub(v)
106-
}
107-
mutableMap
101+
val allKeys = other.elements.keys.union(this.elements.keys)
102+
val newMap =
103+
allKeys.fold(mutableMapOf<K, LatticeElement<V>>()) { current, key ->
104+
val otherValue = other.elements[key]
105+
val thisValue = this.elements[key]
106+
val newValue =
107+
if (thisValue != null && otherValue != null) {
108+
thisValue.lub(otherValue)
109+
} else if (thisValue != null) {
110+
thisValue
111+
} else otherValue
112+
newValue?.let { current[key] = it }
113+
current
108114
}
109-
)
115+
return MapLattice(newMap)
110116
}
111117

112118
override fun duplicate(): LatticeElement<Map<K, LatticeElement<V>>> {

cpg-core/src/test/kotlin/de/fraunhofer/aisec/cpg/helpers/BasicLatticesTest.kt

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import kotlin.test.assertIs
4040
import kotlin.test.assertNotEquals
4141
import kotlin.test.assertNotSame
4242
import kotlin.test.assertSame
43+
import kotlin.test.assertTrue
4344

4445
class BasicLatticesTest {
4546
@Test
@@ -124,11 +125,11 @@ class BasicLatticesTest {
124125

125126
val aBlaLattice1 =
126127
MapLattice<String, Set<String>>(mapOf("a" to PowersetLattice(setOf("bla"))))
127-
val bBlaLattice2 =
128+
val aBlaLattice2 =
128129
MapLattice<String, Set<String>>(mapOf("a" to PowersetLattice(setOf("bla"))))
129-
assertEquals(0, aBlaLattice1.compareTo(bBlaLattice2))
130-
assertEquals(aBlaLattice1, bBlaLattice2)
131-
assertNotSame(aBlaLattice1, bBlaLattice2)
130+
assertEquals(0, aBlaLattice1.compareTo(aBlaLattice2))
131+
assertEquals(aBlaLattice1, aBlaLattice2)
132+
assertNotSame(aBlaLattice1, aBlaLattice2)
132133

133134
val aBlaFooLattice =
134135
MapLattice<String, Set<String>>(mapOf("a" to PowersetLattice(setOf("bla", "foo"))))
@@ -214,6 +215,8 @@ class BasicLatticesTest {
214215
assertEquals(setOf("bla"), aBlaFooBBla.elements["b"]?.elements)
215216

216217
assertFalse(aBlaFooBBla == emptyLattice1) // Wrong elements
218+
assertTrue(emptyLattice1 == emptyLattice2) // This is equal
219+
assertTrue(aBlaLattice1 == aBlaLattice2) // This is equal
217220
assertFalse(aBlaFooBBla == aBlaFooBBla.elements["a"]) // Wrong types
218221
assertFalse(aBlaFooBBla.elements["a"] == aBlaFooBBla) // Wrong types
219222
}
@@ -262,6 +265,8 @@ class BasicLatticesTest {
262265

263266
// We explicitly want to call equals here
264267
assertFalse(blaBla == emptyBla) // Wrong elements
268+
assertFalse(blaBla == blaEmpty) // Wrong elements
269+
assertTrue(emptyBla2 == emptyBla) // Wrong elements
265270
assertFalse(blaBla == emptyBlaFirst) // Wrong types
266271
assertFalse(emptyBlaFirst == blaBla) // Wrong types
267272
}
@@ -300,21 +305,21 @@ class BasicLatticesTest {
300305
emptyPowersetLattice<String>()
301306
)
302307
)
303-
val emptyBla2 = emptyEmptyBla.duplicate()
304-
assertEquals(0, emptyEmptyBla.compareTo(emptyBla2))
305-
assertEquals(emptyEmptyBla, emptyBla2)
306-
assertNotSame(emptyEmptyBla, emptyBla2)
307-
assertNotSame(emptyEmptyBla.hashCode(), emptyBla2.hashCode())
308+
val emptyEmptyBla2 = emptyEmptyBla.duplicate()
309+
assertEquals(0, emptyEmptyBla.compareTo(emptyEmptyBla2))
310+
assertEquals(emptyEmptyBla, emptyEmptyBla2)
311+
assertNotSame(emptyEmptyBla, emptyEmptyBla2)
312+
assertNotSame(emptyEmptyBla.hashCode(), emptyEmptyBla2.hashCode())
308313
val (emptyBlaFirst, emptyBlaSecond, emptyBlaThird) = emptyEmptyBla
309314
assertSame(emptyBlaFirst, emptyEmptyBla.elements.first)
310315
assertSame(emptyBlaSecond, emptyEmptyBla.elements.second)
311316
assertSame(emptyBlaThird, emptyEmptyBla.elements.third)
312-
assertNotSame(emptyBlaFirst, emptyBla2.elements.first)
313-
assertEquals(emptyBlaFirst, emptyBla2.elements.first)
314-
assertNotSame(emptyBlaSecond, emptyBla2.elements.second)
315-
assertEquals(emptyBlaSecond, emptyBla2.elements.second)
316-
assertNotSame(emptyBlaThird, emptyBla2.elements.third)
317-
assertEquals(emptyBlaThird, emptyBla2.elements.third)
317+
assertNotSame(emptyBlaFirst, emptyEmptyBla2.elements.first)
318+
assertEquals(emptyBlaFirst, emptyEmptyBla2.elements.first)
319+
assertNotSame(emptyBlaSecond, emptyEmptyBla2.elements.second)
320+
assertEquals(emptyBlaSecond, emptyEmptyBla2.elements.second)
321+
assertNotSame(emptyBlaThird, emptyEmptyBla2.elements.third)
322+
assertEquals(emptyBlaThird, emptyEmptyBla2.elements.third)
318323

319324
assertEquals(-1, emptyEmptyEmpty.compareTo(emptyEmptyBla))
320325
assertEquals(-1, emptyEmptyEmpty.compareTo(emptyBlaEmpty))
@@ -337,6 +342,10 @@ class BasicLatticesTest {
337342

338343
// We explicitly want to call equals here
339344
assertFalse(blaEmptyBla == emptyEmptyBla) // Wrong elements
345+
assertFalse(emptyEmptyEmpty == emptyEmptyBla) // Wrong elements
346+
assertFalse(emptyEmptyEmpty == emptyBlaEmpty) // Wrong elements
347+
assertFalse(emptyEmptyEmpty == blaEmptyEmpty) // Wrong elements
348+
assertTrue(emptyEmptyBla2 == emptyEmptyBla) // Same type and same elements
340349
assertFalse(blaEmptyBla == emptyBlaFirst) // Wrong types
341350
assertFalse(emptyBlaFirst == blaEmptyBla) // Wrong types
342351
}

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

0 commit comments

Comments
 (0)