Closed lochana-chathura closed 1 month ago
Narrowed down to
// J1<:J2
// J2<:J1
type J1 record {|J1 x; J1 y;|}|();
type J2 record {|J2 x; J1 y;|}|();
However,
// J1<:J2
// J2<:J1
type J1 [J1,J1]|();
type J2 [J2,J1]|();
works.
One unnecessary cell creation was found.
Now that we handle CellSemType
instance creation within the createComplexSemType()
itself, at L101 we get a CellSemType
instance. Therefore we don't need to create another cell with L103.
https://github.com/ballerina-platform/ballerina-lang/blob/23f1db2da42b4d1a7121c721daa1c73825605922/semtypes/src/main/java/io/ballerina/types/typeops/MappingOps.java#L101-L103
However, the above is not a bug. Just a redundant cell creation. Still the sample is falling with a SO.
Bug found to be in this line, https://github.com/ballerina-platform/ballerina-lang/blob/23f1db2da42b4d1a7121c721daa1c73825605922/semtypes/src/main/java/io/ballerina/types/Common.java#L191
we are using listMemo
for mappings and functions.
Fixed in #42679
This issue is NOT closed with a proper Reason/ label. Make sure to add proper reason label before closing. Please add or leave a comment with the proper reason label now.
- Reason/EngineeringMistake - The issue occurred due to a mistake made in the past.
- Reason/Regression - The issue has introduced a regression.
- Reason/MultipleComponentInteraction - Issue occured due to interactions in multiple components.
- Reason/Complex - Issue occurred due to complex scenario.
- Reason/Invalid - Issue is invalid.
- Reason/Other - None of the above cases.
Description
$subject.
Related TODO: https://github.com/ballerina-platform/ballerina-lang/blob/23f1db2da42b4d1a7121c721daa1c73825605922/semtypes/src/main/java/io/ballerina/types/typeops/MappingOps.java#L158-L160 data/error1.bal
stacktrace (click to expand)
``` java.lang.StackOverflowError at io.ballerina.types.subtypedata.BddNode.equals(BddNode.java:32) at java.base/java.util.Objects.equals(Objects.java:64) at io.ballerina.types.subtypedata.BddNode.equals(BddNode.java:32) at java.base/java.util.HashMap.putVal(HashMap.java:633) at java.base/java.util.HashMap.put(HashMap.java:610) at io.ballerina.types.Common.memoSubtypeIsEmpty(Common.java:200) at io.ballerina.types.typeops.ErrorOps.errorSubtypeIsEmpty(ErrorOps.java:50) at io.ballerina.types.typeops.ErrorOps.isEmpty(ErrorOps.java:64) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.CellOps.cellMutNoneInhabited(CellOps.java:88) at io.ballerina.types.typeops.CellOps.cellInhabited(CellOps.java:78) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:69) at io.ballerina.types.Common.bddEvery(Common.java:55) at io.ballerina.types.Common.bddEvery(Common.java:58) at io.ballerina.types.Common.bddEvery(Common.java:60) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:54) at io.ballerina.types.typeops.CellOps.isEmpty(CellOps.java:202) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.MappingOps.mappingInhabited(MappingOps.java:104) at io.ballerina.types.typeops.MappingOps.mappingFormulaIsEmpty(MappingOps.java:87) at io.ballerina.types.Common.bddEveryPositive(Common.java:67) at io.ballerina.types.Common.bddEveryPositive(Common.java:72) at io.ballerina.types.Common.bddEveryPositive(Common.java:70) at io.ballerina.types.Common.bddEveryPositive(Common.java:70) at io.ballerina.types.typeops.ErrorOps.errorBddIsEmpty(ErrorOps.java:54) at io.ballerina.types.Common.memoSubtypeIsEmpty(Common.java:205) at io.ballerina.types.typeops.ErrorOps.errorSubtypeIsEmpty(ErrorOps.java:50) at io.ballerina.types.typeops.ErrorOps.isEmpty(ErrorOps.java:64) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.CellOps.cellMutNoneInhabited(CellOps.java:88) at io.ballerina.types.typeops.CellOps.cellInhabited(CellOps.java:78) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:69) at io.ballerina.types.Common.bddEvery(Common.java:55) at io.ballerina.types.Common.bddEvery(Common.java:58) at io.ballerina.types.Common.bddEvery(Common.java:60) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:54) at io.ballerina.types.typeops.CellOps.isEmpty(CellOps.java:202) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.MappingOps.mappingInhabited(MappingOps.java:104) at io.ballerina.types.typeops.MappingOps.mappingFormulaIsEmpty(MappingOps.java:87) at io.ballerina.types.Common.bddEveryPositive(Common.java:67) at io.ballerina.types.Common.bddEveryPositive(Common.java:72) at io.ballerina.types.Common.bddEveryPositive(Common.java:70) at io.ballerina.types.Common.bddEveryPositive(Common.java:70) at io.ballerina.types.typeops.ErrorOps.errorBddIsEmpty(ErrorOps.java:54) at io.ballerina.types.Common.memoSubtypeIsEmpty(Common.java:205) at io.ballerina.types.typeops.ErrorOps.errorSubtypeIsEmpty(ErrorOps.java:50) at io.ballerina.types.typeops.ErrorOps.isEmpty(ErrorOps.java:64) ```data/hard.bal
stacktrace (click to expand)
``` java.lang.StackOverflowError at io.ballerina.types.Core.diff(Core.java:108) at io.ballerina.types.typeops.CellOps.cellMutLimitedInhabited(CellOps.java:107) at io.ballerina.types.typeops.CellOps.cellInhabited(CellOps.java:79) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:69) at io.ballerina.types.Common.bddEvery(Common.java:55) at io.ballerina.types.Common.bddEvery(Common.java:58) at io.ballerina.types.Common.bddEvery(Common.java:60) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:54) at io.ballerina.types.typeops.CellOps.isEmpty(CellOps.java:202) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.MappingOps.mappingInhabited(MappingOps.java:104) at io.ballerina.types.typeops.MappingOps.mappingFormulaIsEmpty(MappingOps.java:87) at io.ballerina.types.Common.bddEvery(Common.java:55) at io.ballerina.types.Common.bddEvery(Common.java:60) at io.ballerina.types.Common.bddEvery(Common.java:58) at io.ballerina.types.typeops.MappingOps.lambda$mappingSubtypeIsEmpty$0(MappingOps.java:161) at io.ballerina.types.Common.memoSubtypeIsEmpty(Common.java:205) at io.ballerina.types.typeops.MappingOps.mappingSubtypeIsEmpty(MappingOps.java:160) at io.ballerina.types.typeops.MappingOps.isEmpty(MappingOps.java:237) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.CellOps.cellMutLimitedInhabited(CellOps.java:107) at io.ballerina.types.typeops.CellOps.cellInhabited(CellOps.java:79) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:69) at io.ballerina.types.Common.bddEvery(Common.java:55) at io.ballerina.types.Common.bddEvery(Common.java:58) at io.ballerina.types.Common.bddEvery(Common.java:60) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:54) at io.ballerina.types.typeops.CellOps.isEmpty(CellOps.java:202) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.MappingOps.mappingInhabited(MappingOps.java:104) at io.ballerina.types.typeops.MappingOps.mappingFormulaIsEmpty(MappingOps.java:87) at io.ballerina.types.Common.bddEvery(Common.java:55) at io.ballerina.types.Common.bddEvery(Common.java:60) at io.ballerina.types.Common.bddEvery(Common.java:58) at io.ballerina.types.typeops.MappingOps.lambda$mappingSubtypeIsEmpty$0(MappingOps.java:161) at io.ballerina.types.Common.memoSubtypeIsEmpty(Common.java:205) at io.ballerina.types.typeops.MappingOps.mappingSubtypeIsEmpty(MappingOps.java:160) at io.ballerina.types.typeops.MappingOps.isEmpty(MappingOps.java:237) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.CellOps.cellMutLimitedInhabited(CellOps.java:107) at io.ballerina.types.typeops.CellOps.cellInhabited(CellOps.java:79) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:69) at io.ballerina.types.Common.bddEvery(Common.java:55) at io.ballerina.types.Common.bddEvery(Common.java:58) at io.ballerina.types.Common.bddEvery(Common.java:60) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:54) at io.ballerina.types.typeops.CellOps.isEmpty(CellOps.java:202) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.MappingOps.mappingInhabited(MappingOps.java:104) at io.ballerina.types.typeops.MappingOps.mappingFormulaIsEmpty(MappingOps.java:87) at io.ballerina.types.Common.bddEvery(Common.java:55) at io.ballerina.types.Common.bddEvery(Common.java:60) at io.ballerina.types.Common.bddEvery(Common.java:58) at io.ballerina.types.typeops.MappingOps.lambda$mappingSubtypeIsEmpty$0(MappingOps.java:161) at io.ballerina.types.Common.memoSubtypeIsEmpty(Common.java:205) at io.ballerina.types.typeops.MappingOps.mappingSubtypeIsEmpty(MappingOps.java:160) at io.ballerina.types.typeops.MappingOps.isEmpty(MappingOps.java:237) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.CellOps.cellMutLimitedInhabited(CellOps.java:107) at io.ballerina.types.typeops.CellOps.cellInhabited(CellOps.java:79) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:69) at io.ballerina.types.Common.bddEvery(Common.java:55) at io.ballerina.types.Common.bddEvery(Common.java:58) at io.ballerina.types.Common.bddEvery(Common.java:60) at io.ballerina.types.typeops.CellOps.cellFormulaIsEmpty(CellOps.java:54) at io.ballerina.types.typeops.CellOps.isEmpty(CellOps.java:202) at io.ballerina.types.Core.isEmpty(Core.java:337) at io.ballerina.types.typeops.MappingOps.mappingInhabited(MappingOps.java:104) at io.ballerina.types.typeops.MappingOps.mappingFormulaIsEmpty(MappingOps.java:87) at io.ballerina.types.Common.bddEvery(Common.java:55) at io.ballerina.types.Common.bddEvery(Common.java:60) at io.ballerina.types.Common.bddEvery(Common.java:58) at io.ballerina.types.typeops.MappingOps.lambda$mappingSubtypeIsEmpty$0(MappingOps.java:161) at io.ballerina.types.Common.memoSubtypeIsEmpty(Common.java:205) at io.ballerina.types.typeops.MappingOps.mappingSubtypeIsEmpty(MappingOps.java:160) at io.ballerina.types.typeops.MappingOps.isEmpty(MappingOps.java:237) ```