Repository: compiler-explorer/compiler-explorer
Pull request #6514 (2024-05-21 14:52:05)

Support Android API stubs
Updates the d8 and dex2oat compiler implementations so that android.jar is included in the classpath for javac/kotlinc.

<!-- THIS COMMENT IS INVISIBLE IN THE FINAL PR, BUT FEEL FREE TO REMOVE IT
Thanks for taking the time to improve CE. We really appreciate it.
  Before opening the PR, please make sure that the tests & linter pass their checks,
  by running `make check`.
  In the best case scenario, you are also adding tests to back up your changes,
  but don't sweat it if you don't. We can discuss them at a later date.
Feel free to append your name to the CONTRIBUTORS.md file
Thanks again, we really appreciate this!
-->


kevinjeon-g: This will rely on https://github.com/compiler-explorer/infra/pull/1309.

Patch:
diff --git a/etc/config/ada.amazon.properties b/etc/config/ada.amazon.properties
index a0d42681a..56529bdc5 100644
--- a/etc/config/ada.amazon.properties
+++ b/etc/config/ada.amazon.properties
@@ -85,7 +85,7 @@ compiler.gnatloongarch641410.demangler=/opt/compiler-explorer/loongarch64/gcc-14
 
 ################################
 # GNAT for sparc-leon
-group.gnatsparcleons.compilers=gnatsparcleon1310:gnatsparcleon1320:gnatsparcleon1330
+group.gnatsparcleons.compilers=gnatsparcleon1310:gnatsparcleon1320:gnatsparcleon1330:gnatsparcleon1410
 group.gnatsparcleons.groupName=SPARC LEON GNAT
 group.gnatsparcleons.baseName=sparc leon gnat
 
@@ -104,6 +104,11 @@ compiler.gnatsparcleon1330.semver=13.3.0
 compiler.gnatsparcleon1330.objdumper=/opt/compiler-explorer/sparc-leon/gcc-13.3.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
 compiler.gnatsparcleon1330.demangler=/opt/compiler-explorer/sparc-leon/gcc-13.3.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-c++filt
 
+compiler.gnatsparcleon1410.exe=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-gnatmake
+compiler.gnatsparcleon1410.semver=14.1.0
+compiler.gnatsparcleon1410.objdumper=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
+compiler.gnatsparcleon1410.demangler=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-c++filt
+
 ################################
 # GNAT for sparc
 group.gnatsparcs.compilers=gnatsparc1220:gnatsparc1230:gnatsparc1310:gnatsparc1320:gnatsparc1330:gnatsparc1410
diff --git a/etc/config/android-java.amazon.properties b/etc/config/android-java.amazon.properties
index 683744636..25b7aea62 100644
--- a/etc/config/android-java.amazon.properties
+++ b/etc/config/android-java.amazon.properties
@@ -40,3 +40,9 @@ compiler.java-dex2oat-3411.d8Id=java-d8-8242
 compiler.java-dex2oat-3411.profmanPath=/opt/compiler-explorer/dex2oat-34.11/x86_64/bin/profman
 
 defaultCompiler=java-dex2oat-latest
+
+libs=android-api-stubs
+libs.android-api-stubs.name=Android API stubs
+libs.android-api-stubs.versions=11662386
+libs.android-api-stubs.versions.11662386.version=11662386
+libs.android-api-stubs.versions.11662386.path=/opt/compiler-explorer/android-api-stubs-11662386/android.jar
diff --git a/etc/config/android-kotlin.amazon.properties b/etc/config/android-kotlin.amazon.properties
index f097b3273..8389912f2 100644
--- a/etc/config/android-kotlin.amazon.properties
+++ b/etc/config/android-kotlin.amazon.properties
@@ -40,3 +40,9 @@ compiler.kotlin-dex2oat-3411.d8Id=kotlin-d8-8242
 compiler.kotlin-dex2oat-3411.profmanPath=/opt/compiler-explorer/dex2oat-34.11/x86_64/bin/profman
 
 defaultCompiler=kotlin-dex2oat-latest
+
+libs=android-api-stubs
+libs.android-api-stubs.name=Android API stubs
+libs.android-api-stubs.versions=11662386
+libs.android-api-stubs.versions.11662386.version=11662386
+libs.android-api-stubs.versions.11662386.path=/opt/compiler-explorer/android-api-stubs-11662386/android.jar
diff --git a/etc/config/c++.amazon.properties b/etc/config/c++.amazon.properties
index 40e99776c..5545270f9 100644
--- a/etc/config/c++.amazon.properties
+++ b/etc/config/c++.amazon.properties
@@ -1500,7 +1500,7 @@ compiler.sparc64g1410.demangler=/opt/compiler-explorer/sparc64/gcc-14.1.0/sparc6
 group.sparcleon.compilers=&gccsparcleon
 
 # GCC for SPARC-LEON
-group.gccsparcleon.compilers=sparcleong1220:sparcleong1220-1:sparcleong1230:sparcleong1310:sparcleong1320:sparcleong1330
+group.gccsparcleon.compilers=sparcleong1220:sparcleong1220-1:sparcleong1230:sparcleong1310:sparcleong1320:sparcleong1330:sparcleong1410
 group.gccsparcleon.baseName=SPARC LEON gcc
 group.gccsparcleon.groupName=SPARC LEON GCC
 group.gccsparcleon.isSemVer=true
@@ -1532,6 +1532,11 @@ compiler.sparcleong1330.semver=13.3.0
 compiler.sparcleong1330.objdumper=/opt/compiler-explorer/sparc-leon/gcc-13.3.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
 compiler.sparcleong1330.demangler=/opt/compiler-explorer/sparc-leon/gcc-13.3.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-c++filt
 
+compiler.sparcleong1410.exe=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-g++
+compiler.sparcleong1410.semver=14.1.0
+compiler.sparcleong1410.objdumper=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
+compiler.sparcleong1410.demangler=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-c++filt
+
 compiler.sparcleong1220-1.exe=/opt/compiler-explorer/sparc-leon/gcc-12.2.0-1/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-g++
 compiler.sparcleong1220-1.semver=12.2.0
 compiler.sparcleong1220-1.objdumper=/opt/compiler-explorer/sparc-leon/gcc-12.2.0-1/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
@@ -3241,7 +3246,7 @@ compiler.gcc6502_1110.notification=This uses AVR-GCC 11.1.0 to compile C++ and u
 #################################
 # NVHPC nvc++
 
-group.nvcxx_x86_cxx.compilers=nvcxx_x86_cxx22_7:nvcxx_x86_cxx22_9:nvcxx_x86_cxx22_11:nvcxx_x86_cxx23_1:nvcxx_x86_cxx23_3:nvcxx_x86_cxx23_5:nvcxx_x86_cxx23_7:nvcxx_x86_cxx23_9:nvcxx_x86_cxx23_11:nvcxx_x86_cxx24_1:nvcxx_x86_cxx24_3
+group.nvcxx_x86_cxx.compilers=nvcxx_x86_cxx22_7:nvcxx_x86_cxx22_9:nvcxx_x86_cxx22_11:nvcxx_x86_cxx23_1:nvcxx_x86_cxx23_3:nvcxx_x86_cxx23_5:nvcxx_x86_cxx23_7:nvcxx_x86_cxx23_9:nvcxx_x86_cxx23_11:nvcxx_x86_cxx24_1:nvcxx_x86_cxx24_3:nvcxx_x86_cxx24_5
 group.nvcxx_x86_cxx.options=
 group.nvcxx_x86_cxx.binaryHideFuncRe=^(__.*|_(init|start|fini)|(de)?register_tm_clones|call_gmon_start|frame_dummy|\.plt.*|_dl_relocate_static_pie)$
 group.nvcxx_x86_cxx.needsMulti=false
@@ -3322,7 +3327,13 @@ compiler.nvcxx_x86_cxx24_3.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/
 compiler.nvcxx_x86_cxx24_3.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.3/compilers/bin/nvc++
 compiler.nvcxx_x86_cxx24_3.semver=24.3
 
-group.nvcxx_arm_cxx.compilers=nvcxx_arm_cxx22_7:nvcxx_arm_cxx22_9:nvcxx_arm_cxx22_11:nvcxx_arm_cxx23_1:nvcxx_arm_cxx23_3:nvcxx_arm_cxx23_5:nvcxx_arm_cxx23_7:nvcxx_arm_cxx23_9:nvcxx_arm_cxx23_11:nvcxx_arm_cxx24_1:nvcxx_arm_cxx24_3
+compiler.nvcxx_x86_cxx24_5.demangler=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.5/compilers/bin/nvdecode
+compiler.nvcxx_x86_cxx24_5.cuobjdump=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.5/cuda/12.4/bin/cuobjdump
+compiler.nvcxx_x86_cxx24_5.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.5/cuda/12.4/bin/nvdisasm
+compiler.nvcxx_x86_cxx24_5.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.5/compilers/bin/nvc++
+compiler.nvcxx_x86_cxx24_5.semver=24.5
+
+group.nvcxx_arm_cxx.compilers=nvcxx_arm_cxx22_7:nvcxx_arm_cxx22_9:nvcxx_arm_cxx22_11:nvcxx_arm_cxx23_1:nvcxx_arm_cxx23_3:nvcxx_arm_cxx23_5:nvcxx_arm_cxx23_7:nvcxx_arm_cxx23_9:nvcxx_arm_cxx23_11:nvcxx_arm_cxx24_1:nvcxx_arm_cxx24_3:nvcxx_arm_cxx24_5
 group.nvcxx_arm_cxx.options=
 group.nvcxx_arm_cxx.supportsBinary=true
 group.nvcxx_arm_cxx.binaryHideFuncRe=^(__.*|_(init|start|fini)|(de)?register_tm_clones|call_gmon_start|frame_dummy|\.plt.*|_dl_relocate_static_pie)$
@@ -3382,6 +3393,10 @@ compiler.nvcxx_arm_cxx24_3.demangler=/opt/compiler-explorer/hpc_sdk/Linux_aarch6
 compiler.nvcxx_arm_cxx24_3.exe=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/24.3/compilers/bin/nvc++
 compiler.nvcxx_arm_cxx24_3.semver=24.3
 
+compiler.nvcxx_arm_cxx24_5.demangler=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/24.5/compilers/bin/nvdecode
+compiler.nvcxx_arm_cxx24_5.exe=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/24.5/compilers/bin/nvc++
+compiler.nvcxx_arm_cxx24_5.semver=24.5
+
 #################################
 # EDG compiler
 group.edg.compilers=&edg-gnu:&edg-default
diff --git a/etc/config/c.amazon.properties b/etc/config/c.amazon.properties
index d42a42d7c..a76c59816 100644
--- a/etc/config/c.amazon.properties
+++ b/etc/config/c.amazon.properties
@@ -1192,7 +1192,7 @@ compiler.csparc64g1410.demangler=/opt/compiler-explorer/sparc64/gcc-14.1.0/sparc
 group.csparcleon.compilers=&cgccsparcleon
 
 # GCC for SPARC-LEON
-group.cgccsparcleon.compilers=csparcleong1220:csparcleong1220-1:csparcleong1230:csparcleong1310:csparcleong1320:csparcleong1330
+group.cgccsparcleon.compilers=csparcleong1220:csparcleong1220-1:csparcleong1230:csparcleong1310:csparcleong1320:csparcleong1330:csparcleong1410
 group.cgccsparcleon.baseName=SPARC LEON gcc
 group.cgccsparcleon.groupName=SPARC LEON GCC
 group.cgccsparcleon.isSemVer=true
@@ -1224,6 +1224,11 @@ compiler.csparcleong1330.semver=13.3.0
 compiler.csparcleong1330.objdumper=/opt/compiler-explorer/sparc-leon/gcc-13.3.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
 compiler.csparcleong1330.demangler=/opt/compiler-explorer/sparc-leon/gcc-13.3.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-c++filt
 
+compiler.csparcleong1410.exe=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-gcc
+compiler.csparcleong1410.semver=14.1.0
+compiler.csparcleong1410.objdumper=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
+compiler.csparcleong1410.demangler=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-c++filt
+
 compiler.csparcleong1220-1.exe=/opt/compiler-explorer/sparc-leon/gcc-12.2.0-1/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-gcc
 compiler.csparcleong1220-1.semver=12.2.0
 compiler.csparcleong1220-1.objdumper=/opt/compiler-explorer/sparc-leon/gcc-12.2.0-1/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
diff --git a/etc/config/cuda.amazon.properties b/etc/config/cuda.amazon.properties
index 9a6d7b63d..8107be71c 100644
--- a/etc/config/cuda.amazon.properties
+++ b/etc/config/cuda.amazon.properties
@@ -2,14 +2,14 @@ compilers=godbolt.org@443/gpu:&nvrtc:&cuclang:&hipclang
 # Disabled: nvcc
 # The disabled group(s) are actually used in the cuda.gpu.properties (along with libs etc). One day these might exist on
 # both servers, so I want to keep them in the same place.
-defaultCompiler=nvcc123u1
+defaultCompiler=nvcc124u1
 supportsBinary=true
 supportsExecute=false
 
 # Details of GPUs/features supported by CUDA compilers can be found here:
 # gist.github.com/ax3l/9489132#clang--x-cuda
 
-group.nvcc.compilers=nvcc123u1:nvcc122u1:nvcc121:nvcc120u1:nvcc120:nvcc118:nvcc117u1:nvcc117:nvcc116u2:nvcc116u1:nvcc116:nvcc115u2:nvcc115u1:nvcc115:nvcc114u4:nvcc114u3:nvcc114u2:nvcc114u1:nvcc114:nvcc113u1:nvcc113:nvcc112u2:nvcc112u1:nvcc112:nvcc111u1:nvcc111:nvcc11u1:nvcc11:nvcc102:nvcc101u2:nvcc101u1:nvcc101:nvcc100:nvcc92:nvcc91
+group.nvcc.compilers=nvcc124u1:nvcc123u1:nvcc122u1:nvcc121:nvcc120u1:nvcc120:nvcc118:nvcc117u1:nvcc117:nvcc116u2:nvcc116u1:nvcc116:nvcc115u2:nvcc115u1:nvcc115:nvcc114u4:nvcc114u3:nvcc114u2:nvcc114u1:nvcc114:nvcc113u1:nvcc113:nvcc112u2:nvcc112u1:nvcc112:nvcc111u1:nvcc111:nvcc11u1:nvcc11:nvcc102:nvcc101u2:nvcc101u1:nvcc101:nvcc100:nvcc92:nvcc91
 group.nvcc.versionRe=^Cuda.*
 group.nvcc.compilerType=nvcc
 group.nvcc.isSemVer=true
@@ -228,6 +228,12 @@ compiler.nvcc123u1.options=--compiler-bindir /opt/compiler-explorer/gcc-10.2.0/b
 compiler.nvcc123u1.nvdisasm=/opt/compiler-explorer/cuda/12.3.1/bin/nvdisasm
 compiler.nvcc123u1.demangler=/opt/compiler-explorer/gcc-10.2.0/bin/c++filt
 compiler.nvcc123u1.objdumper=/opt/compiler-explorer/gcc-10.2.0/bin/objdump
+compiler.nvcc124u1.semver=12.4.1
+compiler.nvcc124u1.exe=/opt/compiler-explorer/cuda/12.4.1/bin/nvcc
+compiler.nvcc124u1.options=--compiler-bindir /opt/compiler-explorer/gcc-10.2.0/bin
+compiler.nvcc124u1.nvdisasm=/opt/compiler-explorer/cuda/12.4.1/bin/nvdisasm
+compiler.nvcc124u1.demangler=/opt/compiler-explorer/gcc-10.2.0/bin/c++filt
+compiler.nvcc124u1.objdumper=/opt/compiler-explorer/gcc-10.2.0/bin/objdump
 group.cuclang.compilers=cuclang700:cuclang800:cuclang900:cuclang1000:cuclang1001:cuclang1100:cltrunk
 group.cuclang.isSemVer=true
 group.cuclang.baseName=clang
diff --git a/etc/config/fortran.amazon.properties b/etc/config/fortran.amazon.properties
index 6190f70af..7b78bbae8 100644
--- a/etc/config/fortran.amazon.properties
+++ b/etc/config/fortran.amazon.properties
@@ -335,7 +335,7 @@ compiler.fsparc64g1410.demangler=/opt/compiler-explorer/sparc64/gcc-14.1.0/sparc
 
 ###############################
 # GCC for SPARC LEON
-group.gccsparcleon.compilers=fsparcleong1220:fsparcleong1220-1:fsparcleong1230:fsparcleong1310:fsparcleong1320:fsparcleong1330
+group.gccsparcleon.compilers=fsparcleong1220:fsparcleong1220-1:fsparcleong1230:fsparcleong1310:fsparcleong1320:fsparcleong1330:fsparcleong1410
 group.gccsparcleon.groupName=SPARC LEON gfortran
 group.gccsparcleon.baseName=SPARC LEON gfortran
 
@@ -371,6 +371,11 @@ compiler.fsparcleong1330.semver=13.3.0
 compiler.fsparcleong1330.objdumper=/opt/compiler-explorer/sparc-leon/gcc-13.3.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
 compiler.fsparcleong1330.demangler=/opt/compiler-explorer/sparc-leon/gcc-13.3.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-c++filt
 
+compiler.fsparcleong1410.exe=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-gfortran
+compiler.fsparcleong1410.semver=14.1.0
+compiler.fsparcleong1410.objdumper=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
+compiler.fsparcleong1410.demangler=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-c++filt
+
 ###############################
 # GCC for LOONGARCH64
 group.gccloongarch64.compilers=floongarch64g1220:floongarch64g1230:floongarch64g1310:floongarch64g1320:floongarch64g1410:floongarch64g1330
diff --git a/etc/config/hlsl.amazon.properties b/etc/config/hlsl.amazon.properties
index 0b2eeff11..1a4055750 100644
--- a/etc/config/hlsl.amazon.properties
+++ b/etc/config/hlsl.amazon.properties
@@ -1,6 +1,6 @@
 compilers=&dxc:&rga:&clang
 
-group.dxc.compilers=dxc_trunk:dxc_1_6_2112:dxc_1_7_2207:dxc_1_7_2212:dxc_1_7_2308:dxc_1_8_2306:dxc_1_8_2403:dxc_1_8_2403_1:dxc_1_8_2403_2
+group.dxc.compilers=dxc_trunk:dxc_1_6_2112:dxc_1_7_2207:dxc_1_7_2212:dxc_1_7_2308:dxc_1_8_2306:dxc_1_8_2403:dxc_1_8_2403_1:dxc_1_8_2403_2:dxc_1_8_2405
 group.dxc.groupName=DXC
 group.dxc.isSemVer=true
 group.dxc.baseName=DXC
@@ -24,6 +24,8 @@ compiler.dxc_1_8_2403_1.exe=/opt/compiler-explorer/dxc-1.8.2403.1/bin/dxc
 compiler.dxc_1_8_2403_1.semver=1.8.2403.1
 compiler.dxc_1_8_2403_2.exe=/opt/compiler-explorer/dxc-1.8.2403.2/bin/dxc
 compiler.dxc_1_8_2403_2.semver=1.8.2403.2
+compiler.dxc_1_8_2405.exe=/opt/compiler-explorer/dxc-1.8.2405/bin/dxc
+compiler.dxc_1_8_2405.semver=1.8.2405
 
 group.rga.compilers=rga262_dxctrunk:rga262_dxc172207:rga262_dxc162112:rga261_dxc172207:rga261_dxc162112:rga290_dxctrunk
 group.rga.groupName=RGA
diff --git a/etc/config/ispc.amazon.properties b/etc/config/ispc.amazon.properties
index b8e78a10d..df571fe95 100644
--- a/etc/config/ispc.amazon.properties
+++ b/etc/config/ispc.amazon.properties
@@ -1,9 +1,11 @@
 compilers=&ispc
-defaultCompiler=ispc1230
+defaultCompiler=ispc1240
 
-group.ispc.compilers=ispc1230:ispc1220:ispc1210:ispc1200:ispc1190:ispc1180:ispc1170:ispc1161:ispc1160:ispc1150:ispc1141:ispc1140:ispc1130:ispc1120:ispc1110:ispc1100:ispc192:ispc191:ispc-trunk:ispc-templates_new-trunk
+group.ispc.compilers=ispc1240:ispc1230:ispc1220:ispc1210:ispc1200:ispc1190:ispc1180:ispc1170:ispc1161:ispc1160:ispc1150:ispc1141:ispc1140:ispc1130:ispc1120:ispc1110:ispc1100:ispc192:ispc191:ispc-trunk:ispc-templates_new-trunk
 group.ispc.isSemVer=true
 group.ispc.baseName=ispc
+compiler.ispc1240.exe=/opt/compiler-explorer/ispc-1.24.0/bin/ispc
+compiler.ispc1240.semver=1.24.0
 compiler.ispc1230.exe=/opt/compiler-explorer/ispc-1.23.0/bin/ispc
 compiler.ispc1230.semver=1.23.0
 compiler.ispc1220.exe=/opt/compiler-explorer/ispc-1.22.0/bin/ispc
diff --git a/etc/config/objc.amazon.properties b/etc/config/objc.amazon.properties
index 46db5a770..75cd63f12 100644
--- a/etc/config/objc.amazon.properties
+++ b/etc/config/objc.amazon.properties
@@ -157,7 +157,7 @@ compiler.objcsparc64g1410.demangler=/opt/compiler-explorer/sparc64/gcc-14.1.0/sp
 group.objcsparcleon.compilers=&objcgccsparcleon
 
 # GCC for SPARC-LEON
-group.objcgccsparcleon.compilers=objcsparcleong1220:objcsparcleong1220-1:objcsparcleong1230:objcsparcleong1310:objcsparcleong1320:objcsparcleong1330
+group.objcgccsparcleon.compilers=objcsparcleong1220:objcsparcleong1220-1:objcsparcleong1230:objcsparcleong1310:objcsparcleong1320:objcsparcleong1330:objcsparcleong1410
 group.objcgccsparcleon.supportsBinary=true
 group.objcgccsparcleon.supportsExecute=false
 group.objcgccsparcleon.baseName=SPARC LEON gcc
@@ -191,6 +191,11 @@ compiler.objcsparcleong1330.semver=13.3.0
 compiler.objcsparcleong1330.objdumper=/opt/compiler-explorer/sparc-leon/gcc-13.3.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
 compiler.objcsparcleong1330.demangler=/opt/compiler-explorer/sparc-leon/gcc-13.3.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-c++filt
 
+compiler.objcsparcleong1410.exe=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-gcc
+compiler.objcsparcleong1410.semver=14.1.0
+compiler.objcsparcleong1410.objdumper=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
+compiler.objcsparcleong1410.demangler=/opt/compiler-explorer/sparc-leon/gcc-14.1.0/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-c++filt
+
 compiler.objcsparcleong1220-1.exe=/opt/compiler-explorer/sparc-leon/gcc-12.2.0-1/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-gcc
 compiler.objcsparcleong1220-1.semver=12.2.0
 compiler.objcsparcleong1220-1.objdumper=/opt/compiler-explorer/sparc-leon/gcc-12.2.0-1/sparc-leon-linux-uclibc/bin/sparc-leon-linux-uclibc-objdump
diff --git a/etc/config/spice.amazon.properties b/etc/config/spice.amazon.properties
index 411ec55bc..ffadaa536 100644
--- a/etc/config/spice.amazon.properties
+++ b/etc/config/spice.amazon.properties
@@ -1,9 +1,9 @@
 compilers=&spice
-defaultCompiler=spice01906
+defaultCompiler=spice02000
 
-group.spice.compilers=spice01902:spice01903:spice01904:spice01905:spice01906
-group.spice.demangler=/opt/compiler-explorer/gcc-13.2.0/bin/c++filt
-group.spice.objdumper=/opt/compiler-explorer/gcc-13.2.0/bin/objdump
+group.spice.compilers=spice01902:spice01903:spice01904:spice01905:spice01906:spice02000
+group.spice.demangler=/opt/compiler-explorer/gcc-14.1.0/bin/c++filt
+group.spice.objdumper=/opt/compiler-explorer/gcc-14.1.0/bin/objdump
 group.spice.isSemVer=true
 group.spice.baseName=spice
 group.spice.compilerType=spice
@@ -13,7 +13,7 @@ group.spice.licenseName=The MIT License
 group.spice.licensePreamble=Copyright (c) 2021-2024 Marc Auberer
 
 # spice needs to be able to find clang for linking
-group.spice.extraPath=/opt/compiler-explorer/clang-17.0.1/bin
+group.spice.extraPath=/opt/compiler-explorer/clang-18.1.0/bin
 
 compiler.spice01902.exe=/opt/compiler-explorer/spice-0.19.2/spice
 compiler.spice01902.semver=0.19.2
@@ -25,6 +25,8 @@ compiler.spice01905.exe=/opt/compiler-explorer/spice-0.19.5/spice
 compiler.spice01905.semver=0.19.5
 compiler.spice01906.exe=/opt/compiler-explorer/spice-0.19.6/spice
 compiler.spice01906.semver=0.19.6
+compiler.spice02000.exe=/opt/compiler-explorer/spice-0.20.0/spice
+compiler.spice02000.semver=0.20.0
 
 #################################
 #################################
diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts
index ed2d9d5da..41019e2f4 100644
--- a/lib/base-compiler.ts
+++ b/lib/base-compiler.ts
@@ -2663,10 +2663,10 @@ export class BaseCompiler implements ICompiler {
     }
 
     async compile(
-        source,
-        options,
-        backendOptions,
-        filters,
+        source: string,
+        options: string[],
+        backendOptions: Record<string, any>,
+        filters: ParseFiltersAndOutputOptions,
         bypassCache: BypassCache,
         tools,
         executeParameters,
diff --git a/lib/cfg/cfg-parsers/llvm-ir.ts b/lib/cfg/cfg-parsers/llvm-ir.ts
index e8e22e0c8..b34d82024 100644
--- a/lib/cfg/cfg-parsers/llvm-ir.ts
+++ b/lib/cfg/cfg-parsers/llvm-ir.ts
@@ -177,13 +177,28 @@ export class LlvmIrCfgParser extends BaseCFGParser {
                     // %0 = landingpad { ptr, i32 }
                     //         catch ptr null
                     return this.concatInstructions(asmArr, lastInst - 1, lastInst + 1);
+                } else if (
+                    lastInst >= 1 &&
+                    asmArr[lastInst - 1].text.includes('callbr') &&
+                    asmArr[lastInst].text.trim().startsWith('to label')
+                ) {
+                    // Handle multi-line `callbr` like:
+                    // %2 = callbr i32 asm "mov ${1:l}, $0", "=r,!i,~{dirflag},~{fpsr},~{flags}"() #2
+                    //      to label %asm.fallthrough1 [label %err.split2]
+                    return this.concatInstructions(asmArr, lastInst - 1, lastInst + 1);
                 } else {
                     return asmArr[lastInst].text;
                 }
             })();
-            const terminator = terminatingInstruction.includes('invoke ')
-                ? 'invoke'
-                : terminatingInstruction.trim().split(' ')[0].replaceAll(',', '');
+            let terminator;
+            if (terminatingInstruction.includes('invoke ')) {
+                terminator = 'invoke';
+            } else if (terminatingInstruction.includes('callbr')) {
+                terminator = 'callbr';
+            } else {
+                terminator = terminatingInstruction.trim().split(' ')[0].replaceAll(',', '');
+            }
+
             const labels = [...terminatingInstruction.matchAll(this.labelReference)].map(m => m[1]);
             switch (terminator) {
                 case 'ret':
diff --git a/lib/compilers/d8.ts b/lib/compilers/d8.ts
index d15881ff2..1e4ba9d49 100644
--- a/lib/compilers/d8.ts
+++ b/lib/compilers/d8.ts
@@ -31,6 +31,7 @@ import type {ParsedAsmResult, ParsedAsmResultLine} from '../../types/asmresult/a
 import {CompilationResult, ExecutionOptions} from '../../types/compilation/compilation.interfaces.js';
 import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js';
 import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
+import type {SelectedLibraryVersion} from '../../types/libraries/libraries.interfaces.js';
 import {unwrap} from '../assert.js';
 import {BaseCompiler, SimpleOutputFilenameCompiler} from '../base-compiler.js';
 import {logger} from '../logger.js';
@@ -49,6 +50,8 @@ export class D8Compiler extends BaseCompiler implements SimpleOutputFilenameComp
     javaId: string;
     kotlinId: string;
 
+    libPaths: string[];
+
     constructor(compilerInfo: PreliminaryCompilerInfo, env) {
         super({...compilerInfo}, env);
 
@@ -57,6 +60,8 @@ export class D8Compiler extends BaseCompiler implements SimpleOutputFilenameComp
 
         this.javaId = this.compilerProps<string>(`group.${this.compiler.group}.javaId`);
         this.kotlinId = this.compilerProps<string>(`group.${this.compiler.group}.kotlinId`);
+
+        this.libPaths = [];
     }
 
     override getOutputFilename(dirPath: string) {
@@ -83,7 +88,7 @@ export class D8Compiler extends BaseCompiler implements SimpleOutputFilenameComp
             outputFilename = javaCompiler.getOutputFilename(preliminaryCompilePath);
             const javaOptions = _.compact(
                 javaCompiler.prepareArguments(
-                    [''], // options
+                    this.getClasspathArgument(),
                     javaCompiler.getDefaultFilters(),
                     {}, // backendOptions
                     inputFilename,
@@ -105,7 +110,7 @@ export class D8Compiler extends BaseCompiler implements SimpleOutputFilenameComp
             outputFilename = kotlinCompiler.getOutputFilename(preliminaryCompilePath);
             const kotlinOptions = _.compact(
                 kotlinCompiler.prepareArguments(
-                    [''], // options
+                    this.getClasspathArgument(),
                     kotlinCompiler.getDefaultFilters(),
                     {}, // backendOptions
                     inputFilename,
@@ -225,4 +230,18 @@ export class D8Compiler extends BaseCompiler implements SimpleOutputFilenameComp
         }
         return {asm: segments};
     }
+
+    getClasspathArgument(): string[] {
+        const libString = this.libPaths.join(':');
+        return libString ? ['-cp', libString] : [''];
+    }
+
+    override getIncludeArguments(libraries: SelectedLibraryVersion[], dirPath: string): string[] {
+        this.libPaths = libraries.flatMap(selectedLib => {
+            const foundVersion = this.findLibVersion(selectedLib);
+            if (!foundVersion) return [];
+            return foundVersion.path;
+        });
+        return this.libPaths;
+    }
 }
diff --git a/lib/compilers/dex2oat.ts b/lib/compilers/dex2oat.ts
index e80fb21fa..58512c1f2 100644
--- a/lib/compilers/dex2oat.ts
+++ b/lib/compilers/dex2oat.ts
@@ -36,6 +36,7 @@ import type {
 import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js';
 import type {UnprocessedExecResult} from '../../types/execution/execution.interfaces.js';
 import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
+import type {SelectedLibraryVersion} from '../../types/libraries/libraries.interfaces.js';
 import {unwrap} from '../assert.js';
 import {BaseCompiler, SimpleOutputFilenameCompiler} from '../base-compiler.js';
 import {Dex2OatPassDumpParser} from '../parsers/dex2oat-pass-dump-parser.js';
@@ -68,6 +69,8 @@ export class Dex2OatCompiler extends BaseCompiler {
     artArtifactDir: string;
     profmanPath: string;
 
+    libs: SelectedLibraryVersion[];
+
     constructor(compilerInfo: PreliminaryCompilerInfo, env) {
         super({...compilerInfo}, env);
         this.compiler.optPipeline = {
@@ -108,6 +111,9 @@ export class Dex2OatCompiler extends BaseCompiler {
 
         // The path to the `profman` binary.
         this.profmanPath = this.compilerProps<string>(`compiler.${this.compiler.id}.profmanPath`);
+
+        // Libraries that will flow to D8Compiler and Java/KotlinCompiler.
+        this.libs = [];
     }
 
     override async runCompiler(
@@ -143,7 +149,7 @@ export class Dex2OatCompiler extends BaseCompiler {
                 {}, // backendOptions
                 inputFilename,
                 d8OutputFilename,
-                [], // libraries
+                this.libs,
                 [], // overrides
             ),
         );
@@ -255,6 +261,11 @@ export class Dex2OatCompiler extends BaseCompiler {
         };
     }
 
+    override getIncludeArguments(libraries: SelectedLibraryVersion[], dirPath: string): string[] {
+        this.libs = libraries;
+        return super.getIncludeArguments(libraries, dirPath);
+    }
+
     private async generateProfile(
         inputFilename: string,
         d8DirPath: string,
diff --git a/lib/compilers/java.ts b/lib/compilers/java.ts
index fc7691b8a..286d625e3 100644
--- a/lib/compilers/java.ts
+++ b/lib/compilers/java.ts
@@ -28,7 +28,7 @@ import fs from 'fs-extra';
 import Semver from 'semver';
 
 import type {ParsedAsmResult, ParsedAsmResultLine} from '../../types/asmresult/asmresult.interfaces.js';
-import {BypassCache} from '../../types/compilation/compilation.interfaces.js';
+import {BypassCache, CompilationResult} from '../../types/compilation/compilation.interfaces.js';
 import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js';
 import {ExecutableExecutionOptions} from '../../types/execution/execution.interfaces.js';
 import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
@@ -130,7 +130,7 @@ export class JavaCompiler extends BaseCompiler implements SimpleOutputFilenameCo
         return ['-Xlint:all', '-encoding', 'utf8'];
     }
 
-    override async handleInterpreting(key, executeParameters: ExecutableExecutionOptions) {
+    override async handleInterpreting(key, executeParameters: ExecutableExecutionOptions): Promise<CompilationResult> {
         const compileResult = await this.getOrBuildExecutable(key, BypassCache.None);
         if (compileResult.code === 0) {
             const extraXXFlags: string[] = [];
diff --git a/lib/compilers/kotlin.ts b/lib/compilers/kotlin.ts
index 351552610..51d7c9f1b 100644
--- a/lib/compilers/kotlin.ts
+++ b/lib/compilers/kotlin.ts
@@ -22,7 +22,7 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 
-import {BypassCache} from '../../types/compilation/compilation.interfaces.js';
+import {BypassCache, CompilationResult} from '../../types/compilation/compilation.interfaces.js';
 import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js';
 import {ExecutableExecutionOptions} from '../../types/execution/execution.interfaces.js';
 import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
@@ -96,12 +96,23 @@ export class KotlinCompiler extends JavaCompiler implements SimpleOutputFilename
      *
      * TODO(supergrecko): Find a better fix than this bandaid for execution
      */
-    override async handleInterpreting(key, executeParameters: ExecutableExecutionOptions) {
+    override async handleInterpreting(key, executeParameters: ExecutableExecutionOptions): Promise<CompilationResult> {
         const alteredKey = {
             ...key,
             options: ['-include-runtime', '-d', 'example.jar'],
         };
         const compileResult = await this.getOrBuildExecutable(alteredKey, BypassCache.None);
+        if (compileResult.code !== 0) {
+            return {
+                stdout: compileResult.stdout,
+                stderr: compileResult.stderr,
+                code: compileResult.code,
+                didExecute: false,
+                buildResult: compileResult,
+                timedOut: false,
+            };
+        }
+
         executeParameters.args = [
             '-Xss136K', // Reduce thread stack size
             '-XX:CICompilerCount=2', // Reduce JIT compilation threads. 2 is minimum
@@ -116,6 +127,7 @@ export class KotlinCompiler extends JavaCompiler implements SimpleOutputFilename
             // our java parameters as program parameters
             ...executeParameters.args,
         ];
+
         const result = await this.runExecutable(this.javaRuntime, executeParameters, compileResult.dirPath);
         return {
             ...result,
diff --git a/lib/parsers/asm-parser.ts b/lib/parsers/asm-parser.ts
index bcf2f9fb0..e18f7baf1 100644
--- a/lib/parsers/asm-parser.ts
+++ b/lib/parsers/asm-parser.ts
@@ -110,7 +110,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
         this.definesGlobal = /^\s*\.(?:globa?l|GLB|export)\s*([.A-Z_a-z][\w$.]*)/;
         this.definesWeak = /^\s*\.(?:weakext|weak)\s*([.A-Z_a-z][\w$.]*)/;
         this.indentedLabelDef = /^\s*([$.A-Z_a-z][\w$.]*):/;
-        this.assignmentDef = /^\s*([$.A-Z_a-z][\w$.]*)\s*=/;
+        this.assignmentDef = /^\s*([$.A-Z_a-z][\w$.]*)\s*=\s*(.*)/;
         this.directive = /^\s*\..*$/;
         // These four regexes when phrased as /\s*#APP.*/ etc exhibit costly polynomial backtracking
         // Instead use ^$ and test with regex.test(line.trim()), more robust anyway
@@ -619,7 +619,12 @@ export class AsmParser extends AsmRegex implements IAsmParser {
 
                 // g-as shows local labels as eg: "1:  call  mcount". We characterize such a label as
                 // "the label-matching part doesn't equal the whole line" and treat it as used.
-                if (labelsUsed[match[1]] === undefined && match[0] === line) {
+                // As a special case, consider assignments of the form "symbol = ." to be labels.
+                if (
+                    labelsUsed[match[1]] === undefined &&
+                    match[0] === line &&
+                    (match[2] === undefined || match[2].trim() === '.')
+                ) {
                     // It's an unused label.
                     if (filters.labels) {
                         continue;
diff --git a/static/event-map.ts b/static/event-map.ts
index aea53d43e..a1f8b5a6e 100644
--- a/static/event-map.ts
+++ b/static/event-map.ts
@@ -23,7 +23,6 @@
 // POSSIBILITY OF SUCH DAMAGE.
 
 import {Language} from '../types/languages.interfaces.js';
-import {CompilerOutputOptions} from '../types/features/filters.interfaces.js';
 import {MessageWithLocation} from '../types/resultline/resultline.interfaces.js';
 import {SiteSettings} from './settings.js';
 import {Theme} from './themes.js';
@@ -88,7 +87,6 @@ export type EventMap = {
     ) => void;
     executorClose: (executorId: number) => void;
     executorOpen: (executorId: number, editorId: boolean | number) => void;
-    filtersChange: (compilerId: number, filters: Partial<CompilerOutputOptions>) => void;
     findCompilers: () => void;
     findEditors: () => void;
     findExecutors: () => void;
@@ -144,7 +142,6 @@ export type EventMap = {
     requestTheme: () => void;
     resendCompilation: (compilerId: number) => void;
     requestCompiler: (compilerId: number) => void;
-    requestFilters: (compilerId: number) => void;
     resendExecution: (executorId: number) => void;
     resize: () => void;
     rustHirViewClosed: (compilerId: number) => void;
diff --git a/static/panes/compiler.ts b/static/panes/compiler.ts
index ac8df72f7..b89f88884 100644
--- a/static/panes/compiler.ts
+++ b/static/panes/compiler.ts
@@ -2996,11 +2996,6 @@ export class Compiler extends MonacoPane<monaco.editor.IStandaloneCodeEditor, Co
 
         this.eventHub.on('cfgViewOpened', this.onCfgViewOpened, this);
         this.eventHub.on('cfgViewClosed', this.onCfgViewClosed, this);
-        this.eventHub.on('requestFilters', id => {
-            if (id === this.id) {
-                this.eventHub.emit('filtersChange', this.id, this.getEffectiveFilters());
-            }
-        });
         this.eventHub.on('requestCompiler', id => {
             if (id === this.id) {
                 this.sendCompiler();
@@ -3216,8 +3211,6 @@ export class Compiler extends MonacoPane<monaco.editor.IStandaloneCodeEditor, Co
     }
 
     onFilterChange(): void {
-        const filters = this.getEffectiveFilters();
-        this.eventHub.emit('filtersChange', this.id, filters);
         this.updateState();
         this.compile();
         this.updateButtons();
diff --git a/static/widgets/timing-info-widget.ts b/static/widgets/timing-info-widget.ts
index c760aee53..e739b8d6d 100644
--- a/static/widgets/timing-info-widget.ts
+++ b/static/widgets/timing-info-widget.ts
@@ -81,7 +81,9 @@ function initializeChartDataFromResult(compileResult: CompilationResult, totalTi
     };
 
     if (compileResult.retreivedFromCache) {
-        pushTimingInfo(data, 'Retrieve result from cache', unwrap(compileResult.retreivedFromCacheTime));
+        if (compileResult.retreivedFromCacheTime) {
+            pushTimingInfo(data, 'Retrieve result from cache', unwrap(compileResult.retreivedFromCacheTime));
+        }
 
         if (compileResult.packageDownloadAndUnzipTime) {
             pushTimingInfo(data, 'Download binary from cache', unwrap(compileResult.execTime));


Test patch:
diff --git a/test/filters-cases/bug-660.asm.directives.comments.json b/test/filters-cases/bug-660.asm.directives.comments.json
index 7f4ca4c29..0c4e371f9 100644
--- a/test/filters-cases/bug-660.asm.directives.comments.json
+++ b/test/filters-cases/bug-660.asm.directives.comments.json
@@ -457,8 +457,6 @@
   ],
   "labelDefinitions": {
     "$LC0": 2,
-    "$LFB12": 4,
-    "$LVL0": 13,
     "main": 5
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-660.asm.directives.json b/test/filters-cases/bug-660.asm.directives.json
index 7f4ca4c29..0c4e371f9 100644
--- a/test/filters-cases/bug-660.asm.directives.json
+++ b/test/filters-cases/bug-660.asm.directives.json
@@ -457,8 +457,6 @@
   ],
   "labelDefinitions": {
     "$LC0": 2,
-    "$LFB12": 4,
-    "$LVL0": 13,
     "main": 5
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-660.asm.directives.labels.comments.json b/test/filters-cases/bug-660.asm.directives.labels.comments.json
index a11f664d7..a82388a4b 100644
--- a/test/filters-cases/bug-660.asm.directives.labels.comments.json
+++ b/test/filters-cases/bug-660.asm.directives.labels.comments.json
@@ -10,11 +10,6 @@
       "source": null,
       "text": "  .ascii \"hello world\\000\""
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LFB12 = ."
-    },
     {
       "labels": [],
       "source": null,
@@ -89,11 +84,6 @@
       "source": null,
       "text": ""
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LVL0 = ."
-    },
     {
       "labels": [],
       "source": {
@@ -142,8 +132,6 @@
   ],
   "labelDefinitions": {
     "$LC0": 1,
-    "$LFB12": 3,
-    "$LVL0": 12,
-    "main": 4
+    "main": 3
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-660.asm.directives.labels.comments.library.dontMaskFilenames.json b/test/filters-cases/bug-660.asm.directives.labels.comments.library.dontMaskFilenames.json
index 20d0f2c4c..32c34bb22 100644
--- a/test/filters-cases/bug-660.asm.directives.labels.comments.library.dontMaskFilenames.json
+++ b/test/filters-cases/bug-660.asm.directives.labels.comments.library.dontMaskFilenames.json
@@ -10,11 +10,6 @@
       "source": null,
       "text": "  .ascii \"hello world\\000\""
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LFB12 = ."
-    },
     {
       "labels": [],
       "source": null,
@@ -95,11 +90,6 @@
       "source": null,
       "text": ""
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LVL0 = ."
-    },
     {
       "labels": [],
       "source": {
@@ -153,8 +143,6 @@
   ],
   "labelDefinitions": {
     "$LC0": 1,
-    "$LFB12": 3,
-    "$LVL0": 12,
-    "main": 4
+    "main": 3
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-660.asm.directives.labels.comments.library.json b/test/filters-cases/bug-660.asm.directives.labels.comments.library.json
index a11f664d7..a82388a4b 100644
--- a/test/filters-cases/bug-660.asm.directives.labels.comments.library.json
+++ b/test/filters-cases/bug-660.asm.directives.labels.comments.library.json
@@ -10,11 +10,6 @@
       "source": null,
       "text": "  .ascii \"hello world\\000\""
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LFB12 = ."
-    },
     {
       "labels": [],
       "source": null,
@@ -89,11 +84,6 @@
       "source": null,
       "text": ""
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LVL0 = ."
-    },
     {
       "labels": [],
       "source": {
@@ -142,8 +132,6 @@
   ],
   "labelDefinitions": {
     "$LC0": 1,
-    "$LFB12": 3,
-    "$LVL0": 12,
-    "main": 4
+    "main": 3
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-660.asm.directives.labels.json b/test/filters-cases/bug-660.asm.directives.labels.json
index a11f664d7..a82388a4b 100644
--- a/test/filters-cases/bug-660.asm.directives.labels.json
+++ b/test/filters-cases/bug-660.asm.directives.labels.json
@@ -10,11 +10,6 @@
       "source": null,
       "text": "  .ascii \"hello world\\000\""
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LFB12 = ."
-    },
     {
       "labels": [],
       "source": null,
@@ -89,11 +84,6 @@
       "source": null,
       "text": ""
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LVL0 = ."
-    },
     {
       "labels": [],
       "source": {
@@ -142,8 +132,6 @@
   ],
   "labelDefinitions": {
     "$LC0": 1,
-    "$LFB12": 3,
-    "$LVL0": 12,
-    "main": 4
+    "main": 3
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-660.asm.directives.library.json b/test/filters-cases/bug-660.asm.directives.library.json
index 7f4ca4c29..0c4e371f9 100644
--- a/test/filters-cases/bug-660.asm.directives.library.json
+++ b/test/filters-cases/bug-660.asm.directives.library.json
@@ -457,8 +457,6 @@
   ],
   "labelDefinitions": {
     "$LC0": 2,
-    "$LFB12": 4,
-    "$LVL0": 13,
     "main": 5
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/mips5-square.asm.directives.comments.json b/test/filters-cases/mips5-square.asm.directives.comments.json
index 06d7765f1..cfb2cbee7 100644
--- a/test/filters-cases/mips5-square.asm.directives.comments.json
+++ b/test/filters-cases/mips5-square.asm.directives.comments.json
@@ -163,7 +163,6 @@
     }
   ],
   "labelDefinitions": {
-    "$LFB0": 2,
     "_Z6squarei": 3
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/mips5-square.asm.directives.json b/test/filters-cases/mips5-square.asm.directives.json
index 06d7765f1..cfb2cbee7 100644
--- a/test/filters-cases/mips5-square.asm.directives.json
+++ b/test/filters-cases/mips5-square.asm.directives.json
@@ -163,7 +163,6 @@
     }
   ],
   "labelDefinitions": {
-    "$LFB0": 2,
     "_Z6squarei": 3
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/mips5-square.asm.directives.labels.comments.json b/test/filters-cases/mips5-square.asm.directives.labels.comments.json
index b15810dc9..813ce47bf 100644
--- a/test/filters-cases/mips5-square.asm.directives.labels.comments.json
+++ b/test/filters-cases/mips5-square.asm.directives.labels.comments.json
@@ -1,10 +1,5 @@
 {
   "asm": [
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LFB0 = ."
-    },
     {
       "labels": [],
       "source": null,
@@ -113,7 +108,6 @@
     }
   ],
   "labelDefinitions": {
-    "$LFB0": 1,
-    "_Z6squarei": 2
+    "_Z6squarei": 1
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/mips5-square.asm.directives.labels.comments.library.dontMaskFilenames.json b/test/filters-cases/mips5-square.asm.directives.labels.comments.library.dontMaskFilenames.json
index d8833c9d8..26867d069 100644
--- a/test/filters-cases/mips5-square.asm.directives.labels.comments.library.dontMaskFilenames.json
+++ b/test/filters-cases/mips5-square.asm.directives.labels.comments.library.dontMaskFilenames.json
@@ -1,10 +1,5 @@
 {
   "asm": [
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LFB0 = ."
-    },
     {
       "labels": [],
       "source": null,
@@ -125,7 +120,6 @@
     }
   ],
   "labelDefinitions": {
-    "$LFB0": 1,
-    "_Z6squarei": 2
+    "_Z6squarei": 1
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/mips5-square.asm.directives.labels.comments.library.json b/test/filters-cases/mips5-square.asm.directives.labels.comments.library.json
index b15810dc9..813ce47bf 100644
--- a/test/filters-cases/mips5-square.asm.directives.labels.comments.library.json
+++ b/test/filters-cases/mips5-square.asm.directives.labels.comments.library.json
@@ -1,10 +1,5 @@
 {
   "asm": [
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LFB0 = ."
-    },
     {
       "labels": [],
       "source": null,
@@ -113,7 +108,6 @@
     }
   ],
   "labelDefinitions": {
-    "$LFB0": 1,
-    "_Z6squarei": 2
+    "_Z6squarei": 1
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/mips5-square.asm.directives.labels.json b/test/filters-cases/mips5-square.asm.directives.labels.json
index b15810dc9..813ce47bf 100644
--- a/test/filters-cases/mips5-square.asm.directives.labels.json
+++ b/test/filters-cases/mips5-square.asm.directives.labels.json
@@ -1,10 +1,5 @@
 {
   "asm": [
-    {
-      "labels": [],
-      "source": null,
-      "text": "$LFB0 = ."
-    },
     {
       "labels": [],
       "source": null,
@@ -113,7 +108,6 @@
     }
   ],
   "labelDefinitions": {
-    "$LFB0": 1,
-    "_Z6squarei": 2
+    "_Z6squarei": 1
   }
-}
+}
\ No newline at end of file
diff --git a/test/filters-cases/mips5-square.asm.directives.library.json b/test/filters-cases/mips5-square.asm.directives.library.json
index 06d7765f1..cfb2cbee7 100644
--- a/test/filters-cases/mips5-square.asm.directives.library.json
+++ b/test/filters-cases/mips5-square.asm.directives.library.json
@@ -163,7 +163,6 @@
     }
   ],
   "labelDefinitions": {
-    "$LFB0": 2,
     "_Z6squarei": 3
   }
-}
+}
\ No newline at end of file