[Solved] Kotlin compilation StackOverflow Failure

Hi all,

We are using Kotlin + Spring to develop a web application. Recently, we observed the compilation is not stable and sometimes the build failed with StackOverflow exception.

The kotlin version is 1.4.21-2 (the latest one) and we are using maven to build. The followings are the error messages.

[ERROR] java.lang.StackOverflowError
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.mark(ControlFlowProcessor.kt:174)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.visitQualifiedExpression(ControlFlowProcessor.kt:1089)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitQualifiedExpression(KtVisitorVoid.java:815)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitQualifiedExpression(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtVisitor.visitDotQualifiedExpression(KtVisitor.java:302)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDotQualifiedExpression(KtVisitorVoid.java:289)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDotQualifiedExpression(KtVisitorVoid.java:839)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDotQualifiedExpression(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtDotQualifiedExpression.accept(KtDotQualifiedExpression.kt:32)
at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:60)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateInstructions(ControlFlowProcessor.kt:179)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.getReceiverValues(ControlFlowProcessor.kt:1621)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.getReceiverValues(ControlFlowProcessor.kt:1591)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateCall(ControlFlowProcessor.kt:1537)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.checkAndGenerateCall(ControlFlowProcessor.kt:1530)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateCall(ControlFlowProcessor.kt:1525)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.visitCallExpression(ControlFlowProcessor.kt:1112)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitCallExpression(KtVisitorVoid.java:803)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitCallExpression(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtCallExpression.accept(KtCallExpression.java:35)
at org.jetbrains.kotlin.psi.KtElementImpl.accept(KtElementImpl.java:51)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateInstructions(ControlFlowProcessor.kt:179)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.visitQualifiedExpression(ControlFlowProcessor.kt:1097)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitQualifiedExpression(KtVisitorVoid.java:815)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitQualifiedExpression(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtVisitor.visitDotQualifiedExpression(KtVisitor.java:302)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDotQualifiedExpression(KtVisitorVoid.java:289)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDotQualifiedExpression(KtVisitorVoid.java:839)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDotQualifiedExpression(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtDotQualifiedExpression.accept(KtDotQualifiedExpression.kt:32)
at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:60)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateInstructions(ControlFlowProcessor.kt:179)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.getReceiverValues(ControlFlowProcessor.kt:1621)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.getReceiverValues(ControlFlowProcessor.kt:1591)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateCall(ControlFlowProcessor.kt:1537)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.checkAndGenerateCall(ControlFlowProcessor.kt:1530)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateCall(ControlFlowProcessor.kt:1525)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.visitCallExpression(ControlFlowProcessor.kt:1112)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitCallExpression(KtVisitorVoid.java:803)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitCallExpression(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtCallExpression.accept(KtCallExpression.java:35)
at org.jetbrains.kotlin.psi.KtElementImpl.accept(KtElementImpl.java:51)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateInstructions(ControlFlowProcessor.kt:179)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.visitQualifiedExpression(ControlFlowProcessor.kt:1097)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitQualifiedExpression(KtVisitorVoid.java:815)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitQualifiedExpression(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtVisitor.visitDotQualifiedExpression(KtVisitor.java:302)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDotQualifiedExpression(KtVisitorVoid.java:289)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDotQualifiedExpression(KtVisitorVoid.java:839)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDotQualifiedExpression(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtDotQualifiedExpression.accept(KtDotQualifiedExpression.kt:32)
at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:60)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateInstructions(ControlFlowProcessor.kt:179)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.getReceiverValues(ControlFlowProcessor.kt:1621)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.getReceiverValues(ControlFlowProcessor.kt:1591)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateCall(ControlFlowProcessor.kt:1537)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.checkAndGenerateCall(ControlFlowProcessor.kt:1530)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.generateCall(ControlFlowProcessor.kt:1525)
at org.jetbrains.kotlin.cfg.ControlFlowProcessor$CFPVisitor.visitCallExpression(ControlFlowProcessor.kt:1112)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitCallExpression(KtVisitorVoid.java:803)
at org.jetbrains.kotlin.psi.KtVisitorVoid.visitCallExpression(KtVisitorVoid.java:21)
at org.jetbrains.kotlin.psi.KtCallExpression.accept(KtCallExpression.java:35)
at org.jetbrains.kotlin.psi.KtElementImpl.accept(KtElementImpl.java:51)

Any idea? Do I need to increase the stack size during compilation? If yes, how to do it in Maven?

Thanks in advance.

Regards,
Yongqiang

I have figured out the solution by giving bigger stack size in MAVEN_OPTS

export MAVEN_OPTS="-Xms256m -Xmx1024m -Xss4m" 

If you meet the same issue, hope it helps.

1 Like

One more finding - If you have this issue in IDEA, you can use the environment variable of _JAVA_OPTIONS.

export _JAVA_OPTIONS=-Xss4m

I didn’t find how to configure in IDEA preference panel.