proguard icon indicating copy to clipboard operation
proguard copied to clipboard

JVM crash due to inconsistent stackmap frames

Open mipastgt opened this issue 1 year ago • 4 comments

I am currently suffering from a JVM crash in production code. In general my Compose desktop app works fine until I perform a specific action. Then I get the following error:

Inconsistent stackmap frames at branch target 1938
Exception Details:
  Location:
    net/sf/geographiclib/Geodesic.InverseInt(DDDDI)Lnet/sf/geographiclib/Geodesic$InverseData; @1938: iconst_0
  Reason:
    Type top (current frame, locals[67]) is not assignable to double (stack map, locals[67])
...

The problem only occurs when I create a release build of the app where ProGuards gets activated and not when I just run it in the IDE. It happens on both Mac and Windows (haven’t tested Linux). The relevant code where the crash happens is from a numerical Java library which I have converted to Kotlin but I doubt that anything is wrong with the code because it works perfectly from the IDE. It’s just pure Kotlin number-crunshing.

I tried to create a simple reproducer for this problem but that did not work. So, I can only provide the crash.log as an attachement.

I am wondering why this happens although I have switched off ProGuard optimizations.

buildTypes.release {
    proguard {
        version.set("7.6.0")
        isEnabled.set(true)
        optimize.set(false)
        obfuscate.set(false)
        configurationFiles.from(project.file("compose-desktop.pro"))
    }
}

See also: https://kotlinlang.slack.com/archives/C01D6HTPATV/p1728663588032589

crash.log.zip Geodesic.kt.zip

mipastgt avatar Oct 18 '24 07:10 mipastgt

Hi @mipastgt !

Could you provide the net/sf/geographiclib/Geodesic.class file before and after ProGuard?

As a workaround, you can try adding a keep rule for the specific method / class e.g. it looks like this is the problem method from the stacktrace:

-keep class net.sf.geographiclib.Geodesic {
    net.sf.geographiclib.Geodesic$InverseData InverseInt(double,double,double,double,int);
}

mrjameshamilton avatar Oct 18 '24 07:10 mrjameshamilton

Hi @mrjameshamilton

I have created two builds. One with PG disabled (No-PG) and one with PG enabled but optimizations switched off (PG-keep). For that build I also added the keep rule which I generalized to all classes because due to some refactorings in that code I wasn't sure whether just one class would catch it all. See details in the attached ZIP file. The first build works without error and the second one crashes as before. See AIPBrowserDE.log. The ZIP file also contains the processed JAR file of the geographic library. I hope that helps.

ReportAttachements.zip

mipastgt avatar Oct 18 '24 09:10 mipastgt

The error still persists with 7.6.1.

mipastgt avatar Jan 04 '25 10:01 mipastgt

This is a blocker for me as well! (Didn't try 7.7.0 yet)

Lonzak avatar Oct 28 '25 12:10 Lonzak