Repository: compiler-explorer/compiler-explorer
Pull request #7276 (2025-01-16 05:08:28)

[swift]: add swift development snapshot compiler [6.1]
- [x] TODO: merge corresponding infra change https://github.com/compiler-explorer/infra/pull/1497


Patch:
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index e0435cb79..4673f7838 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -2,6 +2,7 @@ name: Bug Report
 description: Create a report to help us improve
 title: '[BUG]: '
 labels: ['bug']
+type: Bug
 body:
   - type: textarea
     id: description
diff --git a/.github/ISSUE_TEMPLATE/compiler_request.yml b/.github/ISSUE_TEMPLATE/compiler_request.yml
index b3ce90f20..6aabc24ec 100644
--- a/.github/ISSUE_TEMPLATE/compiler_request.yml
+++ b/.github/ISSUE_TEMPLATE/compiler_request.yml
@@ -2,6 +2,7 @@ name: Compiler request
 description: Request a new compiler
 title: '[COMPILER REQUEST]: '
 labels: ['request', 'new-compilers']
+type: Request
 body:
   - type: markdown
     attributes:
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
index 36da8b78d..aabc62b19 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -2,6 +2,7 @@ name: Feature request
 description: Suggest an idea for the project
 title: '[REQUEST]: '
 labels: ['request']
+type: Feature
 body:
   - type: textarea
     id: introduction
diff --git a/.github/ISSUE_TEMPLATE/language_request.yml b/.github/ISSUE_TEMPLATE/language_request.yml
index 52dfccb51..6d344ed50 100644
--- a/.github/ISSUE_TEMPLATE/language_request.yml
+++ b/.github/ISSUE_TEMPLATE/language_request.yml
@@ -2,6 +2,7 @@ name: Language request
 description: Request a new language
 title: '[LANGUAGE REQUEST]: '
 labels: ['request', 'new-language']
+type: Request
 body:
   - type: markdown
     attributes:
diff --git a/.github/ISSUE_TEMPLATE/library_request.yml b/.github/ISSUE_TEMPLATE/library_request.yml
index 46e410bf9..384438429 100644
--- a/.github/ISSUE_TEMPLATE/library_request.yml
+++ b/.github/ISSUE_TEMPLATE/library_request.yml
@@ -2,6 +2,7 @@ name: Library request
 description: Request a new library
 title: '[LIB REQUEST]: '
 labels: ['request', 'new-libs']
+type: Request
 body:
   - type: markdown
     attributes:
diff --git a/app.ts b/app.ts
index 73aea33ab..b0fd6a3e3 100755
--- a/app.ts
+++ b/app.ts
@@ -546,7 +546,7 @@ async function main() {
     const compileHandler = new CompileHandler(compilationEnvironment, awsProps);
     const storageType = getStorageTypeByKey(storageSolution);
     const storageHandler = new storageType(httpRoot, compilerProps, awsProps);
-    const compilerFinder = new CompilerFinder(compileHandler, compilerProps, awsProps, defArgs, clientOptionsHandler);
+    const compilerFinder = new CompilerFinder(compileHandler, compilerProps, defArgs, clientOptionsHandler);
 
     const isExecutionWorker = ceProps<boolean>('execqueue.is_worker', false);
     const healthCheckFilePath = ceProps('healthCheckFilePath', null) as string | null;
diff --git a/etc/config/android-java.amazon.properties b/etc/config/android-java.amazon.properties
index a29ead7d5..ccd796c05 100644
--- a/etc/config/android-java.amazon.properties
+++ b/etc/config/android-java.amazon.properties
@@ -1,6 +1,6 @@
 compilers=&android-d8:&android-r8:&dex2oat:&android-openjdk
 
-group.android-d8.compilers=java-d8-8156:java-d8-8172:java-d8-8233:java-d8-8242:java-d8-8247:java-d8-8336:java-d8-8337:java-d8-8510:java-d8-8527:java-d8-8535
+group.android-d8.compilers=java-d8-8156:java-d8-8172:java-d8-8233:java-d8-8242:java-d8-8247:java-d8-8336:java-d8-8337:java-d8-8510:java-d8-8527:java-d8-8535:java-d8-8617:java-d8-8627:java-d8-8714:java-d8-8718
 group.android-d8.compilerType=android-d8
 group.android-d8.isSemVer=true
 group.android-d8.objdumper=/opt/compiler-explorer/baksmali-3.0.3/baksmali-3.0.3-fat.jar
@@ -8,6 +8,18 @@ group.android-d8.javaId=java1601
 group.android-d8.kotlinId=kotlinc1920
 group.android-d8.instructionSet=dex
 
+compiler.java-d8-8718.name=d8 8.7.18
+compiler.java-d8-8718.exe=/opt/compiler-explorer/r8-8.7.18/r8-8.7.18.jar
+
+compiler.java-d8-8714.name=d8 8.7.14
+compiler.java-d8-8714.exe=/opt/compiler-explorer/r8-8.7.14/r8-8.7.14.jar
+
+compiler.java-d8-8627.name=d8 8.6.27
+compiler.java-d8-8627.exe=/opt/compiler-explorer/r8-8.6.27/r8-8.6.27.jar
+
+compiler.java-d8-8617.name=d8 8.6.17
+compiler.java-d8-8617.exe=/opt/compiler-explorer/r8-8.6.17/r8-8.6.17.jar
+
 compiler.java-d8-8535.name=d8 8.5.35
 compiler.java-d8-8535.exe=/opt/compiler-explorer/r8-8.5.35/r8-8.5.35.jar
 
@@ -38,13 +50,25 @@ compiler.java-d8-8172.exe=/opt/compiler-explorer/r8-8.1.72/r8-8.1.72.jar
 compiler.java-d8-8156.name=d8 8.1.56
 compiler.java-d8-8156.exe=/opt/compiler-explorer/r8-8.1.56/r8-8.1.56.jar
 
-group.android-r8.compilers=java-r8-8233:java-r8-8242:java-r8-8247:java-r8-8336:java-r8-8337:java-r8-8510:java-r8-8527:java-r8-8535
+group.android-r8.compilers=java-r8-8233:java-r8-8242:java-r8-8247:java-r8-8336:java-r8-8337:java-r8-8510:java-r8-8527:java-r8-8535:java-r8-8617:java-r8-8627:java-r8-8714:java-r8-8718
 group.android-r8.compilerType=android-r8
 group.android-r8.isSemVer=true
 group.android-r8.objdumper=/opt/compiler-explorer/baksmali-3.0.3/baksmali-3.0.3-fat.jar
 group.android-r8.javaId=java1601
 group.android-r8.kotlinId=kotlinc1920
 
+compiler.java-r8-8718.name=r8 8.7.18
+compiler.java-r8-8718.exe=/opt/compiler-explorer/r8-8.7.18/r8-8.7.18.jar
+
+compiler.java-r8-8714.name=r8 8.7.14
+compiler.java-r8-8714.exe=/opt/compiler-explorer/r8-8.7.14/r8-8.7.14.jar
+
+compiler.java-r8-8627.name=r8 8.6.27
+compiler.java-r8-8627.exe=/opt/compiler-explorer/r8-8.6.27/r8-8.6.27.jar
+
+compiler.java-r8-8617.name=r8 8.6.17
+compiler.java-r8-8617.exe=/opt/compiler-explorer/r8-8.6.17/r8-8.6.17.jar
+
 compiler.java-r8-8535.name=r8 8.5.35
 compiler.java-r8-8535.exe=/opt/compiler-explorer/r8-8.5.35/r8-8.5.35.jar
 
@@ -69,7 +93,7 @@ compiler.java-r8-8242.exe=/opt/compiler-explorer/r8-8.2.42/r8-8.2.42.jar
 compiler.java-r8-8233.name=r8 8.2.33
 compiler.java-r8-8233.exe=/opt/compiler-explorer/r8-8.2.33/r8-8.2.33.jar
 
-group.dex2oat.compilers=java-dex2oat-latest:java-dex2oat-3310:java-dex2oat-3411:java-dex2oat-3413:java-dex2oat-3414:java-dex2oat-3415:java-dex2oat-3416:java-dex2oat-3417:java-dex2oat-3418
+group.dex2oat.compilers=java-dex2oat-latest:java-dex2oat-3310:java-dex2oat-3411:java-dex2oat-3413:java-dex2oat-3414:java-dex2oat-3415:java-dex2oat-3416:java-dex2oat-3417:java-dex2oat-3418:java-dex2oat-3508:java-dex2oat-3509:java-dex2oat-3510:java-dex2oat-3511
 group.dex2oat.groupName=ART
 group.dex2oat.compilerType=dex2oat
 group.dex2oat.isSemVer=true
@@ -79,10 +103,38 @@ compiler.java-dex2oat-latest.name=ART dex2oat latest
 compiler.java-dex2oat-latest.artArtifactDir=/opt/compiler-explorer/dex2oat-latest
 compiler.java-dex2oat-latest.exe=/opt/compiler-explorer/dex2oat-latest/x86_64/bin/dex2oat64
 compiler.java-dex2oat-latest.objdumper=/opt/compiler-explorer/dex2oat-latest/x86_64/bin/oatdump
-compiler.java-dex2oat-latest.d8Id=java-d8-8535
+compiler.java-dex2oat-latest.d8Id=java-d8-8718
 compiler.java-dex2oat-latest.isNightly=true
 compiler.java-dex2oat-latest.profmanPath=/opt/compiler-explorer/dex2oat-latest/x86_64/bin/profman
 
+compiler.java-dex2oat-3511.name=ART dex2oat aml_art_351110180 (Nov 2024)
+compiler.java-dex2oat-3511.artArtifactDir=/opt/compiler-explorer/dex2oat-35.11
+compiler.java-dex2oat-3511.exe=/opt/compiler-explorer/dex2oat-35.11/x86_64/bin/dex2oat64
+compiler.java-dex2oat-3511.objdumper=/opt/compiler-explorer/dex2oat-35.11/x86_64/bin/oatdump
+compiler.java-dex2oat-3511.d8Id=java-d8-8718
+compiler.java-dex2oat-3511.profmanPath=/opt/compiler-explorer/dex2oat-35.11/x86_64/bin/profman
+
+compiler.java-dex2oat-3510.name=ART dex2oat aml_art_351011240 (Oct 2024)
+compiler.java-dex2oat-3510.artArtifactDir=/opt/compiler-explorer/dex2oat-35.10
+compiler.java-dex2oat-3510.exe=/opt/compiler-explorer/dex2oat-35.10/x86_64/bin/dex2oat64
+compiler.java-dex2oat-3510.objdumper=/opt/compiler-explorer/dex2oat-35.10/x86_64/bin/oatdump
+compiler.java-dex2oat-3510.d8Id=java-d8-8718
+compiler.java-dex2oat-3510.profmanPath=/opt/compiler-explorer/dex2oat-35.10/x86_64/bin/profman
+
+compiler.java-dex2oat-3509.name=ART dex2oat aml_art_350913340 (Sep 2024)
+compiler.java-dex2oat-3509.artArtifactDir=/opt/compiler-explorer/dex2oat-35.9
+compiler.java-dex2oat-3509.exe=/opt/compiler-explorer/dex2oat-35.9/x86_64/bin/dex2oat64
+compiler.java-dex2oat-3509.objdumper=/opt/compiler-explorer/dex2oat-35.9/x86_64/bin/oatdump
+compiler.java-dex2oat-3509.d8Id=java-d8-8718
+compiler.java-dex2oat-3509.profmanPath=/opt/compiler-explorer/dex2oat-35.9/x86_64/bin/profman
+
+compiler.java-dex2oat-3508.name=ART dex2oat aml_art_350820960 (Aug 2024)
+compiler.java-dex2oat-3508.artArtifactDir=/opt/compiler-explorer/dex2oat-35.8
+compiler.java-dex2oat-3508.exe=/opt/compiler-explorer/dex2oat-35.8/x86_64/bin/dex2oat64
+compiler.java-dex2oat-3508.objdumper=/opt/compiler-explorer/dex2oat-35.8/x86_64/bin/oatdump
+compiler.java-dex2oat-3508.d8Id=java-d8-8718
+compiler.java-dex2oat-3508.profmanPath=/opt/compiler-explorer/dex2oat-35.8/x86_64/bin/profman
+
 compiler.java-dex2oat-3418.name=ART dex2oat aml_art_341810020 (Jun 2024)
 compiler.java-dex2oat-3418.artArtifactDir=/opt/compiler-explorer/dex2oat-34.18
 compiler.java-dex2oat-3418.exe=/opt/compiler-explorer/dex2oat-34.18/x86_64/bin/dex2oat64
@@ -248,9 +300,21 @@ libs.android-api-stubs.versions.11662386.version=11662386
 libs.android-api-stubs.versions.11662386.path=/opt/compiler-explorer/android-api-stubs-11662386/android.jar
 
 libs.r8-keepanno.name=R8 keep-annotations
-libs.r8-keepanno.versions=8233:8242:8247:8336:8337:8510:8527:8535
+libs.r8-keepanno.versions=8233:8242:8247:8336:8337:8510:8527:8535:8617:8627:8714:8718
 libs.r8-keepanno.url=https://r8.googlesource.com/r8/+/refs/heads/main/doc/keepanno-guide.md
 
+libs.r8-keepanno.versions.8718.version=8.7.18
+libs.r8-keepanno.versions.8718.path=/opt/compiler-explorer/r8-8.7.18-keepanno/keepanno-annotations.jar
+
+libs.r8-keepanno.versions.8714.version=8.7.14
+libs.r8-keepanno.versions.8714.path=/opt/compiler-explorer/r8-8.7.14-keepanno/keepanno-annotations.jar
+
+libs.r8-keepanno.versions.8627.version=8.6.27
+libs.r8-keepanno.versions.8627.path=/opt/compiler-explorer/r8-8.6.27-keepanno/keepanno-annotations.jar
+
+libs.r8-keepanno.versions.8617.version=8.6.17
+libs.r8-keepanno.versions.8617.path=/opt/compiler-explorer/r8-8.6.17-keepanno/keepanno-annotations.jar
+
 libs.r8-keepanno.versions.8535.version=8.5.35
 libs.r8-keepanno.versions.8535.path=/opt/compiler-explorer/r8-8.5.35-keepanno/keepanno-annotations.jar
 
@@ -304,4 +368,4 @@ libs.androidx-annotation.versions.191.version=1.9.1
 libs.androidx-annotation.versions.191.path=/opt/compiler-explorer/androidx-annotation-1.9.1/annotation-jvm.jar
 
 
-defaultLibs=android-api-stubs.11662386:r8-keepanno.8535:androidx-annotation.versions.191
+defaultLibs=android-api-stubs.11662386:r8-keepanno.8718:androidx-annotation.versions.191
diff --git a/etc/config/android-kotlin.amazon.properties b/etc/config/android-kotlin.amazon.properties
index 30abc8280..9eb16311a 100644
--- a/etc/config/android-kotlin.amazon.properties
+++ b/etc/config/android-kotlin.amazon.properties
@@ -1,6 +1,6 @@
 compilers=&android-d8:&android-r8:&dex2oat:&android-kotlinc
 
-group.android-d8.compilers=kotlin-d8-8156:kotlin-d8-8172:kotlin-d8-8233:kotlin-d8-8242:kotlin-d8-8247:kotlin-d8-8336:kotlin-d8-8337:kotlin-d8-8510:kotlin-d8-8527:kotlin-d8-8535
+group.android-d8.compilers=kotlin-d8-8156:kotlin-d8-8172:kotlin-d8-8233:kotlin-d8-8242:kotlin-d8-8247:kotlin-d8-8336:kotlin-d8-8337:kotlin-d8-8510:kotlin-d8-8527:kotlin-d8-8535:kotlin-d8-8617:kotlin-d8-8627:kotlin-d8-8714:kotlin-d8-8718
 group.android-d8.compilerType=android-d8
 group.android-d8.isSemVer=true
 group.android-d8.objdumper=/opt/compiler-explorer/baksmali-3.0.3/baksmali-3.0.3-fat.jar
@@ -8,6 +8,18 @@ group.android-d8.javaId=java1601
 group.android-d8.kotlinId=kotlinc1920
 group.android-d8.instructionSet=dex
 
+compiler.kotlin-d8-8718.name=d8 8.7.18
+compiler.kotlin-d8-8718.exe=/opt/compiler-explorer/r8-8.7.18/r8-8.7.18.jar
+
+compiler.kotlin-d8-8714.name=d8 8.7.14
+compiler.kotlin-d8-8714.exe=/opt/compiler-explorer/r8-8.7.14/r8-8.7.14.jar
+
+compiler.kotlin-d8-8627.name=d8 8.6.27
+compiler.kotlin-d8-8627.exe=/opt/compiler-explorer/r8-8.6.27/r8-8.6.27.jar
+
+compiler.kotlin-d8-8617.name=d8 8.6.17
+compiler.kotlin-d8-8617.exe=/opt/compiler-explorer/r8-8.6.17/r8-8.6.17.jar
+
 compiler.kotlin-d8-8535.name=d8 8.5.35
 compiler.kotlin-d8-8535.exe=/opt/compiler-explorer/r8-8.5.35/r8-8.5.35.jar
 
@@ -38,7 +50,7 @@ compiler.kotlin-d8-8172.exe=/opt/compiler-explorer/r8-8.1.72/r8-8.1.72.jar
 compiler.kotlin-d8-8156.name=d8 8.1.56
 compiler.kotlin-d8-8156.exe=/opt/compiler-explorer/r8-8.1.56/r8-8.1.56.jar
 
-group.android-r8.compilers=kotlin-r8-8233:kotlin-r8-8242:kotlin-r8-8247:kotlin-r8-8336:kotlin-r8-8337:kotlin-r8-8510:kotlin-r8-8527:kotlin-r8-8535
+group.android-r8.compilers=kotlin-r8-8233:kotlin-r8-8242:kotlin-r8-8247:kotlin-r8-8336:kotlin-r8-8337:kotlin-r8-8510:kotlin-r8-8527:kotlin-r8-8535:kotlin-r8-8617:kotlin-r8-8627:kotlin-r8-8714:kotlin-r8-8718
 group.android-r8.compilerType=android-r8
 group.android-r8.isSemVer=true
 group.android-r8.objdumper=/opt/compiler-explorer/baksmali-3.0.3/baksmali-3.0.3-fat.jar
@@ -46,6 +58,18 @@ group.android-r8.javaId=java1601
 group.android-r8.kotlinId=kotlinc1920
 group.android-r8.kotlinLibPath=/opt/compiler-explorer/kotlin-jvm-1.9.20/lib
 
+compiler.kotlin-r8-8718.name=r8 8.7.18
+compiler.kotlin-r8-8718.exe=/opt/compiler-explorer/r8-8.7.18/r8-8.7.18.jar
+
+compiler.kotlin-r8-8714.name=r8 8.7.14
+compiler.kotlin-r8-8714.exe=/opt/compiler-explorer/r8-8.7.14/r8-8.7.14.jar
+
+compiler.kotlin-r8-8627.name=r8 8.6.27
+compiler.kotlin-r8-8627.exe=/opt/compiler-explorer/r8-8.6.27/r8-8.6.27.jar
+
+compiler.kotlin-r8-8617.name=r8 8.6.17
+compiler.kotlin-r8-8617.exe=/opt/compiler-explorer/r8-8.6.17/r8-8.6.17.jar
+
 compiler.kotlin-r8-8535.name=r8 8.5.35
 compiler.kotlin-r8-8535.exe=/opt/compiler-explorer/r8-8.5.35/r8-8.5.35.jar
 
@@ -70,7 +94,7 @@ compiler.kotlin-r8-8242.exe=/opt/compiler-explorer/r8-8.2.42/r8-8.2.42.jar
 compiler.kotlin-r8-8233.name=r8 8.2.33
 compiler.kotlin-r8-8233.exe=/opt/compiler-explorer/r8-8.2.33/r8-8.2.33.jar
 
-group.dex2oat.compilers=kotlin-dex2oat-latest:kotlin-dex2oat-3310:kotlin-dex2oat-3411:kotlin-dex2oat-3413:kotlin-dex2oat-3414:kotlin-dex2oat-3415:kotlin-dex2oat-3416:kotlin-dex2oat-3417:kotlin-dex2oat-3418
+group.dex2oat.compilers=kotlin-dex2oat-latest:kotlin-dex2oat-3310:kotlin-dex2oat-3411:kotlin-dex2oat-3413:kotlin-dex2oat-3414:kotlin-dex2oat-3415:kotlin-dex2oat-3416:kotlin-dex2oat-3417:kotlin-dex2oat-3418:kotlin-dex2oat-3508:kotlin-dex2oat-3509:kotlin-dex2oat-3510:kotlin-dex2oat-3511
 group.dex2oat.groupName=ART
 group.dex2oat.compilerType=dex2oat
 group.dex2oat.isSemVer=true
@@ -84,6 +108,34 @@ compiler.kotlin-dex2oat-latest.d8Id=kotlin-d8-8535
 compiler.kotlin-dex2oat-latest.isNightly=true
 compiler.kotlin-dex2oat-latest.profmanPath=/opt/compiler-explorer/dex2oat-latest/x86_64/bin/profman
 
+compiler.kotlin-dex2oat-3511.name=ART dex2oat aml_art_351110180 (Nov 2024)
+compiler.kotlin-dex2oat-3511.artArtifactDir=/opt/compiler-explorer/dex2oat-35.11
+compiler.kotlin-dex2oat-3511.exe=/opt/compiler-explorer/dex2oat-35.11/x86_64/bin/dex2oat64
+compiler.kotlin-dex2oat-3511.objdumper=/opt/compiler-explorer/dex2oat-35.11/x86_64/bin/oatdump
+compiler.kotlin-dex2oat-3511.d8Id=kotlin-d8-8718
+compiler.kotlin-dex2oat-3511.profmanPath=/opt/compiler-explorer/dex2oat-35.11/x86_64/bin/profman
+
+compiler.kotlin-dex2oat-3510.name=ART dex2oat aml_art_351011240 (Oct 2024)
+compiler.kotlin-dex2oat-3510.artArtifactDir=/opt/compiler-explorer/dex2oat-35.10
+compiler.kotlin-dex2oat-3510.exe=/opt/compiler-explorer/dex2oat-35.10/x86_64/bin/dex2oat64
+compiler.kotlin-dex2oat-3510.objdumper=/opt/compiler-explorer/dex2oat-35.10/x86_64/bin/oatdump
+compiler.kotlin-dex2oat-3510.d8Id=kotlin-d8-8718
+compiler.kotlin-dex2oat-3510.profmanPath=/opt/compiler-explorer/dex2oat-35.10/x86_64/bin/profman
+
+compiler.kotlin-dex2oat-3509.name=ART dex2oat aml_art_350913340 (Sep 2024)
+compiler.kotlin-dex2oat-3509.artArtifactDir=/opt/compiler-explorer/dex2oat-35.9
+compiler.kotlin-dex2oat-3509.exe=/opt/compiler-explorer/dex2oat-35.9/x86_64/bin/dex2oat64
+compiler.kotlin-dex2oat-3509.objdumper=/opt/compiler-explorer/dex2oat-35.9/x86_64/bin/oatdump
+compiler.kotlin-dex2oat-3509.d8Id=kotlin-d8-8718
+compiler.kotlin-dex2oat-3509.profmanPath=/opt/compiler-explorer/dex2oat-35.9/x86_64/bin/profman
+
+compiler.kotlin-dex2oat-3508.name=ART dex2oat aml_art_350820960 (Aug 2024)
+compiler.kotlin-dex2oat-3508.artArtifactDir=/opt/compiler-explorer/dex2oat-35.8
+compiler.kotlin-dex2oat-3508.exe=/opt/compiler-explorer/dex2oat-35.8/x86_64/bin/dex2oat64
+compiler.kotlin-dex2oat-3508.objdumper=/opt/compiler-explorer/dex2oat-35.8/x86_64/bin/oatdump
+compiler.kotlin-dex2oat-3508.d8Id=kotlin-d8-8718
+compiler.kotlin-dex2oat-3508.profmanPath=/opt/compiler-explorer/dex2oat-35.8/x86_64/bin/profman
+
 compiler.kotlin-dex2oat-3418.name=ART dex2oat aml_art_341810020 (Jun 2024)
 compiler.kotlin-dex2oat-3418.artArtifactDir=/opt/compiler-explorer/dex2oat-34.18
 compiler.kotlin-dex2oat-3418.exe=/opt/compiler-explorer/dex2oat-34.18/x86_64/bin/dex2oat64
@@ -306,9 +358,21 @@ libs.android-api-stubs.versions.11662386.version=11662386
 libs.android-api-stubs.versions.11662386.path=/opt/compiler-explorer/android-api-stubs-11662386/android.jar
 
 libs.r8-keepanno.name=R8 keep-annotations
-libs.r8-keepanno.versions=8233:8242:8247:8336:8337:8510:8527:8535
+libs.r8-keepanno.versions=8233:8242:8247:8336:8337:8510:8527:8535:8617:8627:8714:8718
 libs.r8-keepanno.url=https://r8.googlesource.com/r8/+/refs/heads/main/doc/keepanno-guide.md
 
+libs.r8-keepanno.versions.8718.version=8.7.18
+libs.r8-keepanno.versions.8718.path=/opt/compiler-explorer/r8-8.7.18-keepanno/keepanno-annotations.jar
+
+libs.r8-keepanno.versions.8714.version=8.7.14
+libs.r8-keepanno.versions.8714.path=/opt/compiler-explorer/r8-8.7.14-keepanno/keepanno-annotations.jar
+
+libs.r8-keepanno.versions.8627.version=8.6.27
+libs.r8-keepanno.versions.8627.path=/opt/compiler-explorer/r8-8.6.27-keepanno/keepanno-annotations.jar
+
+libs.r8-keepanno.versions.8617.version=8.6.17
+libs.r8-keepanno.versions.8617.path=/opt/compiler-explorer/r8-8.6.17-keepanno/keepanno-annotations.jar
+
 libs.r8-keepanno.versions.8535.version=8.5.35
 libs.r8-keepanno.versions.8535.path=/opt/compiler-explorer/r8-8.5.35-keepanno/keepanno-annotations.jar
 
@@ -362,4 +426,4 @@ libs.androidx-annotation.versions.191.version=1.9.1
 libs.androidx-annotation.versions.191.path=/opt/compiler-explorer/androidx-annotation-1.9.1/annotation-jvm.jar
 
 
-defaultLibs=android-api-stubs.11662386:r8-keepanno.8535:androidx-annotation.versions.191
+defaultLibs=android-api-stubs.11662386:r8-keepanno.8718:androidx-annotation.versions.191
diff --git a/etc/config/c++.amazon.properties b/etc/config/c++.amazon.properties
index a075a6a65..dfe116499 100644
--- a/etc/config/c++.amazon.properties
+++ b/etc/config/c++.amazon.properties
@@ -1,4 +1,4 @@
-compilers=&gcc86:&icc:&icx:&clang:&clangx86trunk:&clang-rocm:&mosclang-trunk:&rvclang:&wasmclang:&loongarch-clang:&cl:&cross:&ellcc:&zapcc:&djggp:&armclang32:&armclang64:&zigcxx:&cxx6502:&nvcxx_arm_cxx:godbolt.org@443/gpu:godbolt.org@443/winprod:&hexagon-clang:&edg:&vast:&qnx
+compilers=&gcc86:&icc:&icx:&clang:&clangx86trunk:&clang-rocm:&mosclang-trunk:&rvclang:&wasmclang:&loongarch-clang:&cl:&cross:&ellcc:&zapcc:&djggp:&armclang32:&armclang64:&zigcxx:&cxx6502:&nvcxx_arm_cxx:godbolt.org@443/gpu:godbolt.org@443/winprod:&hexagon-clang:&edg:&vast:&qnx:&clad-clang
 # Disabled: nvcxx_x86_cxx
 # The disabled groups are actually used in the c++.gpu.properties. One day these might exist on both servers, so I want
 # to keep them in the same place.
@@ -277,7 +277,7 @@ compiler.g142assert.semver=14.2 (assertions)
 
 ################################
 # Clang for x86
-group.clang.compilers=&clangx86assert:clang30:clang31:clang32:clang33:clang341:clang350:clang351:clang352:clang37x:clang36x:clang371:clang380:clang381:clang390:clang391:clang400:clang401:clang500:clang501:clang502:clang600:clang601:clang700:clang701:clang710:clang800:clang801:clang900:clang901:clang1000:clang1001:clang1100:clang1101:clang1200:clang1201:clang1300:clang1301:clang1400:clang1500:clang1600:clang1701:clang1810:clang1810_clad180:clang1910
+group.clang.compilers=&clangx86assert:clang30:clang31:clang32:clang33:clang341:clang350:clang351:clang352:clang37x:clang36x:clang371:clang380:clang381:clang390:clang391:clang400:clang401:clang500:clang501:clang502:clang600:clang601:clang700:clang701:clang710:clang800:clang801:clang900:clang901:clang1000:clang1001:clang1100:clang1101:clang1200:clang1201:clang1300:clang1301:clang1400:clang1500:clang1600:clang1701:clang1810:clang1910
 group.clang.intelAsm=-mllvm --x86-asm-syntax=intel
 group.clang.options=--gcc-toolchain=/opt/compiler-explorer/gcc-7.2.0
 group.clang.groupName=Clang x86-64
@@ -453,11 +453,6 @@ compiler.clang1810.semver=18.1.0
 compiler.clang1810.options=--gcc-toolchain=/opt/compiler-explorer/gcc-13.2.0
 compiler.clang1810.ldPath=${exePath}/../lib|${exePath}/../lib/x86_64-unknown-linux-gnu
 compiler.clang1810.debugPatched=true
-compiler.clang1810_clad180.exe=/opt/compiler-explorer/clang-18.1.0/bin/clang++
-compiler.clang1810_clad180.semver=18.1.0 (clad 1.8)
-compiler.clang1810_clad180.options=--gcc-toolchain=/opt/compiler-explorer/gcc-13.2.0 -fplugin=/opt/compiler-explorer/clang-plugins/clad-1.8-clang-18.1.0/lib/clad.so -I/opt/compiler-explorer/clang-plugins/clad-1.8-clang-18.1.0/include
-compiler.clang1810_clad180.ldPath=${exePath}/../lib|${exePath}/../lib/x86_64-unknown-linux-gnu
-compiler.clang1810_clad180.debugPatched=true
 compiler.clang1910.exe=/opt/compiler-explorer/clang-19.1.0/bin/clang++
 compiler.clang1910.semver=19.1.0
 compiler.clang1910.options=--gcc-toolchain=/opt/compiler-explorer/gcc-14.2.0
@@ -1183,6 +1178,31 @@ compiler.hexagonclang1605.exe=/opt/compiler-explorer/clang+llvm-16.0.5-cross-hex
 compiler.hexagonclang1605.compilerType=clang-hexagon
 compiler.hexagonclang1605.compilerCategories=clang-hexagon
 
+################################
+# Clang for clad
+group.clad-clang.compilers=clang1810_clad180:clang1810_clad_trunk
+group.clad-clang.intelAsm=-mllvm --x86-asm-syntax=intel
+group.clad-clang.groupName=Clad Clang
+group.clad-clang.instructionSet=amd64
+group.clad-clang.baseName=clad-clang
+group.clad-clang.unwiseOptions=-march=native
+group.clad-clang.supportsPVS-Studio=true
+group.clad-clang.supportsSonar=true
+group.clad-clang.supportsLlvmCov=true
+group.clad-clang.supportsBinaryObject=true
+group.clad-clang.supportsExecute=true
+group.clad-clang.demangler=/opt/compiler-explorer/clang-trunk/bin/llvm-cxxfilt
+compiler.clang1810_clad180.exe=/opt/compiler-explorer/clang-18.1.0/bin/clang++
+compiler.clang1810_clad180.name=clad v1.8 (clang 18.1.0)
+compiler.clang1810_clad180.options=--gcc-toolchain=/opt/compiler-explorer/gcc-13.2.0 -fplugin=/opt/compiler-explorer/clang-plugins/clad-1.8-clang-18.1.0/lib/clad.so -I/opt/compiler-explorer/clang-plugins/clad-1.8-clang-18.1.0/include
+compiler.clang1810_clad180.ldPath=${exePath}/../lib|${exePath}/../lib/x86_64-unknown-linux-gnu
+compiler.clang1810_clad180.debugPatched=true
+compiler.clang1810_clad_trunk.exe=/opt/compiler-explorer/clang-18.1.0/bin/clang++
+compiler.clang1810_clad_trunk.name=clad trunk (clang 18.1.0)
+compiler.clang1810_clad_trunk.options=--gcc-toolchain=/opt/compiler-explorer/gcc-13.2.0 -fplugin=/opt/compiler-explorer/clang-plugins/clad-trunk-clang-18.1.0/lib/clad.so -I/opt/compiler-explorer/clang-plugins/clad-trunk-clang-18.1.0/include
+compiler.clang1810_clad_trunk.ldPath=${exePath}/../lib|${exePath}/../lib/x86_64-unknown-linux-gnu
+compiler.clang1810_clad_trunk.debugPatched=true
+
 ################################
 # Clang for Loongarch
 group.loongarch-clang.compilers=&loongarch64clang
@@ -2685,6 +2705,7 @@ group.msp.groupName=MSP GCC
 group.msp.baseName=MSP430 gcc
 group.msp.isSemVer=true
 group.msp.supportsBinary=false
+group.msp.compilerType=msp430
 
 compiler.msp430g453.exe=/opt/compiler-explorer/msp430/gcc-4.5.3/bin/msp430-g++
 compiler.msp430g453.alias=/usr/bin/msp430-g++
@@ -3430,7 +3451,7 @@ compiler.rv32-gcctrunk.demangler=/opt/compiler-explorer/riscv32/gcc-trunk/riscv3
 
 ################################
 # GCC for Xtensa ESP32
-group.xtensaesp32.compilers=esp32g2019r2:esp32g2020r1:esp32g2020r2:esp32g2020r3:esp32g2021r1:esp32g2021r2:esp32g2022r1:esp32g20230208
+group.xtensaesp32.compilers=esp32g2019r2:esp32g2020r1:esp32g2020r2:esp32g2020r3:esp32g2021r1:esp32g2021r2:esp32g2022r1:esp32g20230208:esp32g20241119
 group.xtensaesp32.groupName=Xtensa ESP32 GCC
 group.xtensaesp32.supportsBinary=false
 group.xtensaesp32.instructionSet=xtensa
@@ -3452,10 +3473,12 @@ compiler.esp32g2022r1.exe=/opt/compiler-explorer/xtensa/xtensa-esp32-elf-gcc11_2
 compiler.esp32g2022r1.name=Xtensa ESP32 gcc 11.2.0 (2022r1)
 compiler.esp32g20230208.exe=/opt/compiler-explorer/xtensa/xtensa-esp32-elf-12.2.0_20230208/bin/xtensa-esp32-elf-g++
 compiler.esp32g20230208.name=Xtensa ESP32 gcc 12.2.0 (20230208)
+compiler.esp32g20241119.exe=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32-elf-g++
+compiler.esp32g20241119.name=Xtensa ESP32 gcc 14.2.0 (20241119)
 
 ################################
 # GCC for Xtensa ESP32-S2
-group.xtensaesp32s2.compilers=esp32s2g2019r2:esp32s2g2020r1:esp32s2g2020r2:esp32s2g2020r3:esp32s2g2021r1:esp32s2g2021r2:esp32s2g2022r1:esp32s2g20230208
+group.xtensaesp32s2.compilers=esp32s2g2019r2:esp32s2g2020r1:esp32s2g2020r2:esp32s2g2020r3:esp32s2g2021r1:esp32s2g2021r2:esp32s2g2022r1:esp32s2g20230208:esp32s2g20241119
 group.xtensaesp32s2.groupName=Xtensa ESP32-S2 GCC
 group.xtensaesp32s2.supportsBinary=false
 group.xtensaesp32s2.instructionSet=xtensa
@@ -3477,10 +3500,12 @@ compiler.esp32s2g2022r1.exe=/opt/compiler-explorer/xtensa/xtensa-esp32s2-elf-gcc
 compiler.esp32s2g2022r1.name=Xtensa ESP32-S2 gcc 11.2.0 (2022r1)
 compiler.esp32s2g20230208.exe=/opt/compiler-explorer/xtensa/xtensa-esp32s2-elf-12.2.0_20230208/bin/xtensa-esp32s2-elf-g++
 compiler.esp32s2g20230208.name=Xtensa ESP32-S2 gcc 12.2.0 (20230208)
+compiler.esp32s2g20241119.exe=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32s2-elf-g++
+compiler.esp32s2g20241119.name=Xtensa ESP32-S2 gcc 14.2.0 (20241119)
 
 ################################
 # GCC for Xtensa ESP32-S3
-group.xtensaesp32s3.compilers=esp32s3g2020r3:esp32s3g2021r1:esp32s3g2021r2:esp32s3g2022r1:esp32s3g20230208
+group.xtensaesp32s3.compilers=esp32s3g2020r3:esp32s3g2021r1:esp32s3g2021r2:esp32s3g2022r1:esp32s3g20230208:esp32s3g20241119
 group.xtensaesp32s3.groupName=Xtensa ESP32-S3 GCC
 group.xtensaesp32s3.supportsBinary=false
 group.xtensaesp32s3.instructionSet=xtensa
@@ -3496,6 +3521,8 @@ compiler.esp32s3g2022r1.exe=/opt/compiler-explorer/xtensa/xtensa-esp32s3-elf-gcc
 compiler.esp32s3g2022r1.name=Xtensa ESP32-S3 gcc 11.2.0 (2022r1)
 compiler.esp32s3g20230208.exe=/opt/compiler-explorer/xtensa/xtensa-esp32s3-elf-12.2.0_20230208/bin/xtensa-esp32s3-elf-g++
 compiler.esp32s3g20230208.name=Xtensa ESP32-S3 gcc 12.2.0 (20230208)
+compiler.esp32s3g20241119.exe=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32s3-elf-g++
+compiler.esp32s3g20241119.name=Xtensa ESP32-S3 gcc 14.2.0 (20241119)
 
 ################################
 # Windows Compilers
@@ -3671,7 +3698,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:nvcxx_x86_cxx24_5:nvcxx_x86_cxx24_7:nvcxx_x86_cxx24_9:nvcxx_x86_cxx24_11
+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:nvcxx_x86_cxx24_7:nvcxx_x86_cxx24_9:nvcxx_x86_cxx24_11:nvcxx_x86_cxx25_1
 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
@@ -3776,7 +3803,13 @@ compiler.nvcxx_x86_cxx24_11.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64
 compiler.nvcxx_x86_cxx24_11.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvc++
 compiler.nvcxx_x86_cxx24_11.semver=24.11
 
-group.nvcxx_arm_cxx.compilers=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:nvcxx_arm_cxx24_7:nvcxx_arm_cxx24_9:nvcxx_arm_cxx24_11
+compiler.nvcxx_x86_cxx25_1.demangler=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/compilers/bin/nvdecode
+compiler.nvcxx_x86_cxx25_1.cuobjdump=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/cuda/12.6/bin/cuobjdump
+compiler.nvcxx_x86_cxx25_1.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/cuda/12.6/bin/nvdisasm
+compiler.nvcxx_x86_cxx25_1.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/compilers/bin/nvc++
+compiler.nvcxx_x86_cxx25_1.semver=25.1
+
+group.nvcxx_arm_cxx.compilers=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:nvcxx_arm_cxx24_7:nvcxx_arm_cxx24_9:nvcxx_arm_cxx24_11:nvcxx_arm_cxx25_1
 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)$
@@ -3844,6 +3877,10 @@ compiler.nvcxx_arm_cxx24_11.demangler=/opt/compiler-explorer/hpc_sdk/Linux_aarch
 compiler.nvcxx_arm_cxx24_11.exe=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/24.11/compilers/bin/nvc++
 compiler.nvcxx_arm_cxx24_11.semver=24.11
 
+compiler.nvcxx_arm_cxx25_1.demangler=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/25.1/compilers/bin/nvdecode
+compiler.nvcxx_arm_cxx25_1.exe=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/25.1/compilers/bin/nvc++
+compiler.nvcxx_arm_cxx25_1.semver=25.1
+
 #################################
 # EDG compiler
 group.edg.compilers=&edg-gnu:&edg-default
@@ -4141,24 +4178,26 @@ libs.catch2.versions.301.version=3.0.1
 libs.catch2.versions.301.path=/opt/compiler-explorer/libs/catch2/v3.0.1/src
 libs.catch2.versions.301.staticliblink=Catch2d
 
-libs.cccl.name=CUDA Core Compute Libraries
+libs.cccl.name=CUDA Core Compute Libraries (CCCL)
 libs.cccl.description=Fundamental CUDA Compute libraries: Thrust, CUB, libcudacxx
-libs.cccl.versions=trunk:261:260:250:240:230:220
+libs.cccl.versions=trunk:270:261:260:250:240:230:220
 libs.cccl.url=http://www.github.com/NVIDIA/cccl
 libs.cccl.versions.trunk.version=trunk
 libs.cccl.versions.trunk.path=/opt/compiler-explorer/libs/cccl/trunk/thrust:/opt/compiler-explorer/libs/cccl/trunk/cub:/opt/compiler-explorer/libs/cccl/trunk/libcudacxx/include:/opt/compiler-explorer/libs/cccl/trunk/cudax/include
+libs.cccl.versions.270.version=2.7.0
+libs.cccl.versions.270.path=/opt/compiler-explorer/libs/cccl/v2.7.0/thrust:/opt/compiler-explorer/libs/cccl/v2.7.0/cub:/opt/compiler-explorer/libs/cccl/v2.7.0/libcudacxx/include:/opt/compiler-explorer/libs/cccl/v2.7.0/cudax/include
 libs.cccl.versions.261.version=2.6.1
-libs.cccl.versions.261.path=/opt/compiler-explorer/libs/cccl/2.6.1/thrust:/opt/compiler-explorer/libs/cccl/2.6.1/cub:/opt/compiler-explorer/libs/cccl/2.6.1/libcudacxx/include:/opt/compiler-explorer/libs/cccl/2.6.1/cudax/include
+libs.cccl.versions.261.path=/opt/compiler-explorer/libs/cccl/v2.6.1/thrust:/opt/compiler-explorer/libs/cccl/v2.6.1/cub:/opt/compiler-explorer/libs/cccl/v2.6.1/libcudacxx/include:/opt/compiler-explorer/libs/cccl/v2.6.1/cudax/include
 libs.cccl.versions.260.version=2.6.0
-libs.cccl.versions.260.path=/opt/compiler-explorer/libs/cccl/2.6.0/thrust:/opt/compiler-explorer/libs/cccl/2.6.0/cub:/opt/compiler-explorer/libs/cccl/2.6.0/libcudacxx/include:/opt/compiler-explorer/libs/cccl/2.6.0/cudax/include
+libs.cccl.versions.260.path=/opt/compiler-explorer/libs/cccl/v2.6.0/thrust:/opt/compiler-explorer/libs/cccl/v2.6.0/cub:/opt/compiler-explorer/libs/cccl/v2.6.0/libcudacxx/include:/opt/compiler-explorer/libs/cccl/v2.6.0/cudax/include
 libs.cccl.versions.250.version=2.5.0
-libs.cccl.versions.250.path=/opt/compiler-explorer/libs/cccl/2.5.0/thrust:/opt/compiler-explorer/libs/cccl/2.5.0/cub:/opt/compiler-explorer/libs/cccl/2.5.0/libcudacxx/include:/opt/compiler-explorer/libs/cccl/2.5.0/cudax/include
+libs.cccl.versions.250.path=/opt/compiler-explorer/libs/cccl/v2.5.0/thrust:/opt/compiler-explorer/libs/cccl/v2.5.0/cub:/opt/compiler-explorer/libs/cccl/v2.5.0/libcudacxx/include:/opt/compiler-explorer/libs/cccl/v2.5.0/cudax/include
 libs.cccl.versions.240.version=2.4.0
-libs.cccl.versions.240.path=/opt/compiler-explorer/libs/cccl/2.4.0/thrust:/opt/compiler-explorer/libs/cccl/2.4.0/cub:/opt/compiler-explorer/libs/cccl/2.4.0/libcudacxx/include
+libs.cccl.versions.240.path=/opt/compiler-explorer/libs/cccl/v2.4.0/thrust:/opt/compiler-explorer/libs/cccl/v2.4.0/cub:/opt/compiler-explorer/libs/cccl/v2.4.0/libcudacxx/include
 libs.cccl.versions.230.version=2.3.0
-libs.cccl.versions.230.path=/opt/compiler-explorer/libs/cccl/2.3.0/thrust:/opt/compiler-explorer/libs/cccl/2.3.0/cub:/opt/compiler-explorer/libs/cccl/2.3.0/libcudacxx/include
+libs.cccl.versions.230.path=/opt/compiler-explorer/libs/cccl/v2.3.0/thrust:/opt/compiler-explorer/libs/cccl/v2.3.0/cub:/opt/compiler-explorer/libs/cccl/v2.3.0/libcudacxx/include
 libs.cccl.versions.220.version=2.2.0
-libs.cccl.versions.220.path=/opt/compiler-explorer/libs/cccl/2.2.0/thrust:/opt/compiler-explorer/libs/cccl/2.2.0/cub:/opt/compiler-explorer/libs/cccl/2.2.0/libcudacxx/include
+libs.cccl.versions.220.path=/opt/compiler-explorer/libs/cccl/v2.2.0/thrust:/opt/compiler-explorer/libs/cccl/v2.2.0/cub:/opt/compiler-explorer/libs/cccl/v2.2.0/libcudacxx/include
 
 libs.cctz.name=CCTZ
 libs.cctz.url=https://github.com/google/cctz
@@ -4991,7 +5030,7 @@ libs.mfem.versions.47.packagedheaders=true
 
 libs.mimicpp.name=mimic++
 libs.mimicpp.description=A modern and (mostly) macro free mocking framework.
-libs.mimicpp.versions=trunk:1:2:3
+libs.mimicpp.versions=trunk:1:2:3:4:5:6
 libs.mimicpp.url=https://github.com/DNKpp/mimicpp
 libs.mimicpp.versions.trunk.version=trunk
 libs.mimicpp.versions.trunk.path=/opt/compiler-explorer/libs/mimicpp/trunk/include
@@ -5001,6 +5040,12 @@ libs.mimicpp.versions.2.version=v2
 libs.mimicpp.versions.2.path=/opt/compiler-explorer/libs/mimicpp/v2/include
 libs.mimicpp.versions.3.version=v3
 libs.mimicpp.versions.3.path=/opt/compiler-explorer/libs/mimicpp/v3/include
+libs.mimicpp.versions.4.version=v4
+libs.mimicpp.versions.4.path=/opt/compiler-explorer/libs/mimicpp/v4/include
+libs.mimicpp.versions.5.version=v5
+libs.mimicpp.versions.5.path=/opt/compiler-explorer/libs/mimicpp/v5/include
+libs.mimicpp.versions.6.version=v6
+libs.mimicpp.versions.6.path=/opt/compiler-explorer/libs/mimicpp/v6/include
 
 libs.mlir.name=MLIR
 libs.mlir.description=MLIR
@@ -5223,7 +5268,7 @@ libs.qt.versions.680.path=/app/qt/include/QtCore
 
 libs.quill.name=Quill
 libs.quill.description=C++ Low Latency Logging Library
-libs.quill.versions=611:700:721:730:750
+libs.quill.versions=611:700:721:730:750:810
 libs.quill.url=https://github.com/odygrd/quill
 libs.quill.versions.611.version=6.1.1
 libs.quill.versions.611.path=/opt/compiler-explorer/libs/quill/v6.1.1/quill/include
@@ -5235,6 +5280,8 @@ libs.quill.versions.730.version=7.3.0
 libs.quill.versions.730.path=/opt/compiler-explorer/libs/quill/v7.3.0/include
 libs.quill.versions.750.version=7.5.0
 libs.quill.versions.750.path=/opt/compiler-explorer/libs/quill/v7.5.0/include
+libs.quill.versions.810.version=8.1.0
+libs.quill.versions.810.path=/opt/compiler-explorer/libs/quill/v8.1.0/include
 
 libs.rangesv3.name=range-v3
 libs.rangesv3.versions=trunk:030:035:036:091:0100:0110:0120
@@ -5763,9 +5810,9 @@ libs.jwt-cpp.versions.052.path=/opt/compiler-explorer/libs/jwt-cpp/v0.5.2/includ
 
 libs.xieite.name=XIEITE
 libs.xieite.url=https://xieite.github.io
-libs.xieite.versions=header
-libs.xieite.versions.header.version=header-only
-libs.xieite.versions.header.path=/opt/compiler-explorer/libs/xieite/header/include
+libs.xieite.versions=main
+libs.xieite.versions.main.version=main
+libs.xieite.versions.main.path=/opt/compiler-explorer/libs/xieite/main/include
 
 libs.option.name=option
 libs.option.description=Replacement for std::optional with efficient memory usage and additional features
diff --git a/etc/config/c.amazon.properties b/etc/config/c.amazon.properties
index c1bf4e1f2..4b33421da 100644
--- a/etc/config/c.amazon.properties
+++ b/etc/config/c.amazon.properties
@@ -396,7 +396,7 @@ compiler.cclang_widberg.notification=Experimental Reverse Engineering Compiler;
 #################################
 # NVHPC nvc
 
-group.nvc_x86.compilers=nvc_x86_24_9:nvc_x86_24_11
+group.nvc_x86.compilers=nvc_x86_24_9:nvc_x86_24_11:nvc_x86_25_1
 group.nvc_x86.options=
 group.nvc_x86.binaryHideFuncRe=^(__.*|_(init|start|fini)|(de)?register_tm_clones|call_gmon_start|frame_dummy|\.plt.*|_dl_relocate_static_pie)$
 group.nvc_x86.needsMulti=false
@@ -423,6 +423,12 @@ compiler.nvc_x86_24_11.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.1
 compiler.nvc_x86_24_11.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvc
 compiler.nvc_x86_24_11.semver=24.11
 
+compiler.nvc_x86_25_1.demangler=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/compilers/bin/nvdecode
+compiler.nvc_x86_25_1.cuobjdump=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/cuda/12.6/bin/cuobjdump
+compiler.nvc_x86_25_1.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/cuda/12.6/bin/nvdisasm
+compiler.nvc_x86_25_1.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/compilers/bin/nvc
+compiler.nvc_x86_25_1.semver=25.1
+
 # Clang for Arm
 # Provides 32- and 64-bit menu items for clang-9 and trunk
 group.armcclang32.groupName=Arm 32-bit clang
@@ -3058,7 +3064,7 @@ compiler.rv32-cgcctrunk.demangler=/opt/compiler-explorer/riscv32/gcc-trunk/riscv
 
 ################################
 # GCC for Xtensa ESP32
-group.cxtensaesp32.compilers=cesp32g2019r2:cesp32g2020r1:cesp32g2020r2:cesp32g2020r3:cesp32g2021r1:cesp32g2021r2:cesp32g2022r1:cesp32g20230208
+group.cxtensaesp32.compilers=cesp32g2019r2:cesp32g2020r1:cesp32g2020r2:cesp32g2020r3:cesp32g2021r1:cesp32g2021r2:cesp32g2022r1:cesp32g20230208:cesp32g20241119
 group.cxtensaesp32.groupName=Xtensa ESP32 GCC
 group.cxtensaesp32.supportsBinary=false
 group.cxtensaesp32.instructionSet=xtensa
@@ -3089,10 +3095,13 @@ compiler.cesp32g2022r1.name=Xtensa ESP32 gcc 11.2.0 (2022r1)
 compiler.cesp32g20230208.exe=/opt/compiler-explorer/xtensa/xtensa-esp32-elf-12.2.0_20230208/bin/xtensa-esp32-elf-gcc
 compiler.cesp32g20230208.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp32-elf-12.2.0_20230208/bin/xtensa-esp32-elf-objdump
 compiler.cesp32g20230208.name=Xtensa ESP32 gcc 12.2.0 (20230208)
+compiler.cesp32g20241119.exe=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32-elf-gcc
+compiler.cesp32g20241119.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32-elf-objdump
+compiler.cesp32g20241119.name=Xtensa ESP32 gcc 14.2.0 (20241119)
 
 ################################
 # GCC for Xtensa ESP32-S2
-group.cxtensaesp32s2.compilers=cesp32s2g2019r2:cesp32s2g2020r1:cesp32s2g2020r2:cesp32s2g2020r3:cesp32s2g2021r1:cesp32s2g2021r2:cesp32s2g2022r1:cesp32s2g20230208
+group.cxtensaesp32s2.compilers=cesp32s2g2019r2:cesp32s2g2020r1:cesp32s2g2020r2:cesp32s2g2020r3:cesp32s2g2021r1:cesp32s2g2021r2:cesp32s2g2022r1:cesp32s2g20230208:cesp32s2g20241119
 group.cxtensaesp32s2.groupName=Xtensa ESP32-S2 GCC
 group.cxtensaesp32s2.supportsBinary=false
 group.cxtensaesp32s2.instructionSet=xtensa
@@ -3123,10 +3132,13 @@ compiler.cesp32s2g2022r1.name=Xtensa ESP32-S2 gcc 11.2.0 (2022r1)
 compiler.cesp32s2g20230208.exe=/opt/compiler-explorer/xtensa/xtensa-esp32s2-elf-12.2.0_20230208/bin/xtensa-esp32s2-elf-gcc
 compiler.cesp32s2g20230208.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp32s2-elf-12.2.0_20230208/bin/xtensa-esp32s2-elf-objdump
 compiler.cesp32s2g20230208.name=Xtensa ESP32-S2 gcc 12.2.0 (20230208)
+compiler.cesp32s2g20241119.exe=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32s2-elf-gcc
+compiler.cesp32s2g20241119.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32s2-elf-objdump
+compiler.cesp32s2g20241119.name=Xtensa ESP32-S2 gcc 14.2.0 (20241119)
 
 ################################
 # GCC for Xtensa ESP32-S3
-group.cxtensaesp32s3.compilers=cesp32s3g2020r3:cesp32s3g2021r1:cesp32s3g2021r2:cesp32s3g2022r1:cesp32s3g20230208
+group.cxtensaesp32s3.compilers=cesp32s3g2020r3:cesp32s3g2021r1:cesp32s3g2021r2:cesp32s3g2022r1:cesp32s3g20230208:cesp32s3g20241119
 group.cxtensaesp32s3.groupName=Xtensa ESP32-S3 GCC
 group.cxtensaesp32s3.supportsBinary=false
 group.cxtensaesp32s3.instructionSet=xtensa
@@ -3148,6 +3160,9 @@ compiler.cesp32s3g2022r1.name=Xtensa ESP32-S3 gcc 11.2.0 (2022r1)
 compiler.cesp32s3g20230208.exe=/opt/compiler-explorer/xtensa/xtensa-esp32s3-elf-12.2.0_20230208/bin/xtensa-esp32s3-elf-gcc
 compiler.cesp32s3g20230208.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp32s3-elf-12.2.0_20230208/bin/xtensa-esp32s3-elf-objdump
 compiler.cesp32s3g20230208.name=Xtensa ESP32-S3 gcc 12.2.0 (20230208)
+compiler.cesp32s3g20241119.exe=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32s3-elf-gcc
+compiler.cesp32s3g20241119.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32s3-elf-objdump
+compiler.cesp32s3g20241119.name=Xtensa ESP32-S3 gcc 14.2.0 (20241119)
 
 ################################
 # Windows Compilers
@@ -3244,7 +3259,7 @@ compiler.cc65_219.options=-I/opt/compiler-explorer/6502/cc65-2.19/share/cc65/inc
 
 #################################
 # sdcc compilers
-group.sdcc.compilers=sdcc400:sdcc410:sdcc420:sdcc430:sdcc440
+group.sdcc.compilers=sdcc400:sdcc410:sdcc420:sdcc430:sdcc440:sdcc450
 group.sdcc.compilerType=sdcc
 group.sdcc.groupName=SDCC
 group.sdcc.baseName=SDCC
@@ -3263,6 +3278,8 @@ compiler.sdcc430.exe=/opt/compiler-explorer/sdcc-4.3.0/bin/sdcc
 compiler.sdcc430.semver=4.3.0
 compiler.sdcc440.exe=/opt/compiler-explorer/sdcc-4.4.0/bin/sdcc
 compiler.sdcc440.semver=4.4.0
+compiler.sdcc450.exe=/opt/compiler-explorer/sdcc-4.5.0/bin/sdcc
+compiler.sdcc450.semver=4.5.0
 
 #################################
 # z88dk
diff --git a/etc/config/cobol.amazon.properties b/etc/config/cobol.amazon.properties
index 72d864fb8..751551c0c 100644
--- a/etc/config/cobol.amazon.properties
+++ b/etc/config/cobol.amazon.properties
@@ -3,7 +3,7 @@ defaultCompiler=gnucobol32
 objdumper=/opt/compiler-explorer/gcc-13.1.0/bin/objdump
 
 group.gnucobol.groupName=GnuCOBOL
-group.gnucobol.compilers=gnucobol32:gnucobol32rc2:gnucobol31:gnucobol22
+group.gnucobol.compilers=gnucobol32:gnucobol32rc2:gnucobol31:gnucobol22:gnucobol11
 group.gnucobol.isSemVer=true
 group.gnucobol.baseName=GnuCOBOL
 group.gnucobol.licenseName=GPLv3
@@ -20,6 +20,9 @@ compiler.gnucobol31.version=3.1
 compiler.gnucobol22.exe=/opt/compiler-explorer/cobol/gnucobol-2.2/bin/cobc
 compiler.gnucobol22.name=GnuCOBOL 2.2
 compiler.gnucobol22.version=2.2
+compiler.gnucobol11.exe=/opt/compiler-explorer/cobol/gnucobol-1.1/bin/cobc
+compiler.gnucobol11.name=GnuCOBOL 1.1
+compiler.gnucobol11.version=1.1
 
 group.gcccobol.compilerType=gcccobol
 group.gcccobol.groupName=GCC
diff --git a/etc/config/cuda.amazon.properties b/etc/config/cuda.amazon.properties
index 6d956f5b2..e5d2bbb12 100644
--- a/etc/config/cuda.amazon.properties
+++ b/etc/config/cuda.amazon.properties
@@ -512,22 +512,24 @@ libs.cueigen.versions.334.version=3.3.4
 libs.cueigen.versions.334.path=/opt/compiler-explorer/libs/eigen/v3.3.4
 libs.cccl.name=CUDA Core Compute Libraries (CCCL)
 libs.cccl.description=Fundamental CUDA Compute libraries: Thrust, CUB, libcudacxx
-libs.cccl.versions=trunk:261:260:250:240:230:220
+libs.cccl.versions=trunk:270:261:260:250:240:230:220
 libs.cccl.url=http://www.github.com/NVIDIA/cccl
 libs.cccl.versions.trunk.version=trunk
 libs.cccl.versions.trunk.path=/opt/compiler-explorer/libs/cccl/trunk/thrust:/opt/compiler-explorer/libs/cccl/trunk/cub:/opt/compiler-explorer/libs/cccl/trunk/libcudacxx/include:/opt/compiler-explorer/libs/cccl/trunk/cudax/include
+libs.cccl.versions.270.version=2.7.0
+libs.cccl.versions.270.path=/opt/compiler-explorer/libs/cccl/v2.7.0/thrust:/opt/compiler-explorer/libs/cccl/v2.7.0/cub:/opt/compiler-explorer/libs/cccl/v2.7.0/libcudacxx/include:/opt/compiler-explorer/libs/cccl/v2.7.0/cudax/include
 libs.cccl.versions.261.version=2.6.1
-libs.cccl.versions.261.path=/opt/compiler-explorer/libs/cccl/2.6.1/thrust:/opt/compiler-explorer/libs/cccl/2.6.1/cub:/opt/compiler-explorer/libs/cccl/2.6.1/libcudacxx/include:/opt/compiler-explorer/libs/cccl/2.6.1/cudax/include
+libs.cccl.versions.261.path=/opt/compiler-explorer/libs/cccl/v2.6.1/thrust:/opt/compiler-explorer/libs/cccl/v2.6.1/cub:/opt/compiler-explorer/libs/cccl/v2.6.1/libcudacxx/include:/opt/compiler-explorer/libs/cccl/v2.6.1/cudax/include
 libs.cccl.versions.260.version=2.6.0
-libs.cccl.versions.260.path=/opt/compiler-explorer/libs/cccl/2.6.0/thrust:/opt/compiler-explorer/libs/cccl/2.6.0/cub:/opt/compiler-explorer/libs/cccl/2.6.0/libcudacxx/include:/opt/compiler-explorer/libs/cccl/2.6.0/cudax/include
+libs.cccl.versions.260.path=/opt/compiler-explorer/libs/cccl/v2.6.0/thrust:/opt/compiler-explorer/libs/cccl/v2.6.0/cub:/opt/compiler-explorer/libs/cccl/v2.6.0/libcudacxx/include:/opt/compiler-explorer/libs/cccl/v2.6.0/cudax/include
 libs.cccl.versions.250.version=2.5.0
-libs.cccl.versions.250.path=/opt/compiler-explorer/libs/cccl/2.5.0/thrust:/opt/compiler-explorer/libs/cccl/2.5.0/cub:/opt/compiler-explorer/libs/cccl/2.5.0/libcudacxx/include:/opt/compiler-explorer/libs/cccl/2.5.0/cudax/include
+libs.cccl.versions.250.path=/opt/compiler-explorer/libs/cccl/v2.5.0/thrust:/opt/compiler-explorer/libs/cccl/v2.5.0/cub:/opt/compiler-explorer/libs/cccl/v2.5.0/libcudacxx/include:/opt/compiler-explorer/libs/cccl/v2.5.0/cudax/include
 libs.cccl.versions.240.version=2.4.0
-libs.cccl.versions.240.path=/opt/compiler-explorer/libs/cccl/2.4.0/thrust:/opt/compiler-explorer/libs/cccl/2.4.0/cub:/opt/compiler-explorer/libs/cccl/2.4.0/libcudacxx/include
+libs.cccl.versions.240.path=/opt/compiler-explorer/libs/cccl/v2.4.0/thrust:/opt/compiler-explorer/libs/cccl/v2.4.0/cub:/opt/compiler-explorer/libs/cccl/v2.4.0/libcudacxx/include
 libs.cccl.versions.230.version=2.3.0
-libs.cccl.versions.230.path=/opt/compiler-explorer/libs/cccl/2.3.0/thrust:/opt/compiler-explorer/libs/cccl/2.3.0/cub:/opt/compiler-explorer/libs/cccl/2.3.0/libcudacxx/include
+libs.cccl.versions.230.path=/opt/compiler-explorer/libs/cccl/v2.3.0/thrust:/opt/compiler-explorer/libs/cccl/v2.3.0/cub:/opt/compiler-explorer/libs/cccl/v2.3.0/libcudacxx/include
 libs.cccl.versions.220.version=2.2.0
-libs.cccl.versions.220.path=/opt/compiler-explorer/libs/cccl/2.2.0/thrust:/opt/compiler-explorer/libs/cccl/2.2.0/cub:/opt/compiler-explorer/libs/cccl/2.2.0/libcudacxx/include
+libs.cccl.versions.220.path=/opt/compiler-explorer/libs/cccl/v2.2.0/thrust:/opt/compiler-explorer/libs/cccl/v2.2.0/cub:/opt/compiler-explorer/libs/cccl/v2.2.0/libcudacxx/include
 libs.thrustcub.name=Thrust+CUB (Legacy)
 libs.thrustcub.description=Use CUDA C++ Core Libraries (CCCL) for newer versions
 libs.thrustcub.versions=trunk:109090:109100:109101:110000:111000:112000:112100:113000:113100:114000:115000:116000:117000
diff --git a/etc/config/elixir.defaults.properties b/etc/config/elixir.defaults.properties
index 6d585862c..5422b97d0 100644
--- a/etc/config/elixir.defaults.properties
+++ b/etc/config/elixir.defaults.properties
@@ -1,15 +1,23 @@
 # Default settings for Elixir
-compilers=&elixir
-compilerType=elixir
+compilers=&elixir:&elixirasm
+
 versionFlag=--short-version
 objdumper=
-instructionSet=beam
 
 group.elixir.compilers=elixirdefault
+group.elixir.compilerType=elixir
+group.elixir.instructionSet=beam
 compiler.elixirdefault.exe=/urs/bin/elixir
 compiler.elixirdefault.runtime=/urs/bin/elixir
 compiler.elixirdefault.name=elixirc default
 
+group.elixirasm.compilers=elixirasmdefault
+group.elixirasm.compilerType=elixirasm
+group.elixirasm.instructionSet=amd64
+compiler.elixirasmdefault.exe=/urs/bin/elixir
+compiler.elixirasmdefault.runtime=/urs/bin/elixir
+compiler.elixirasmdefault.name=elixirc default
+
 defaultCompiler=elixirdefault
 demangler=
 postProcess=
diff --git a/etc/config/fortran.amazon.properties b/etc/config/fortran.amazon.properties
index f14d673e0..19853e27d 100644
--- a/etc/config/fortran.amazon.properties
+++ b/etc/config/fortran.amazon.properties
@@ -296,7 +296,7 @@ compiler.ifxlatest.options=-gxx-name=/opt/compiler-explorer/gcc-13.2.0/bin/g++
 #################################
 # NVHPC nvfortran
 
-group.nvfortran_x86.compilers=nvfortran_x86_24_9:nvfortran_x86_24_11
+group.nvfortran_x86.compilers=nvfortran_x86_24_9:nvfortran_x86_24_11:nvfortran_x86_25_1
 group.nvfortran_x86.options=
 group.nvfortran_x86.needsMulti=false
 group.nvfortran_x86.supportsBinary=true
@@ -319,6 +319,12 @@ compiler.nvfortran_x86_24_11.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_6
 compiler.nvfortran_x86_24_11.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.11/compilers/bin/nvfortran
 compiler.nvfortran_x86_24_11.semver=24.11
 
+compiler.nvfortran_x86_25_1.demangler=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/compilers/bin/nvdecode
+compiler.nvfortran_x86_25_1.cuobjdump=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/cuda/12.6/bin/cuobjdump
+compiler.nvfortran_x86_25_1.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/cuda/12.6/bin/nvdisasm
+compiler.nvfortran_x86_25_1.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/25.1/compilers/bin/nvfortran
+compiler.nvfortran_x86_25_1.semver=25.1
+
 ###############################
 # GCC Cross-Compilers
 group.cross.compilers=&gccarm:&gccaarch64:&ppcs:&gccrvs:&gccmips:&gccmips64:&gccmipsel:&gccmips64el:&gccs390x:&gccriscv:&gccriscv64:&gccloongarch64:&gccsparc:&gccsparc64:&gccsparcleon:&gcchppa
diff --git a/etc/config/gimple.amazon.properties b/etc/config/gimple.amazon.properties
index 60b4410f4..1d1693443 100644
--- a/etc/config/gimple.amazon.properties
+++ b/etc/config/gimple.amazon.properties
@@ -184,7 +184,7 @@ compiler.gimpleavrg1420.demangler=/opt/compiler-explorer/avr/gcc-14.2.0/avr/bin/
 
 ################################
 # GCC for Xtensa ESP32
-group.gimplextensaesp32.compilers=gimpleesp32g2022r1:gimpleesp32g20230208
+group.gimplextensaesp32.compilers=gimpleesp32g2022r1:gimpleesp32g20230208:gimpleesp32g20241119
 group.gimplextensaesp32.groupName=Xtensa ESP32 GCC
 group.gimplextensaesp32.supportsBinary=false
 group.gimplextensaesp32.instructionSet=xtensa
@@ -197,10 +197,13 @@ compiler.gimpleesp32g2022r1.name=Xtensa ESP32 gcc 11.2.0 (2022r1)
 compiler.gimpleesp32g20230208.exe=/opt/compiler-explorer/xtensa/xtensa-esp32-elf-12.2.0_20230208/bin/xtensa-esp32-elf-gcc
 compiler.gimpleesp32g20230208.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp32-elf-12.2.0_20230208/bin/xtensa-esp32-elf-objdump
 compiler.gimpleesp32g20230208.name=Xtensa ESP32 gcc 12.2.0 (20230208)
+compiler.gimpleesp32g20241119.exe=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32-elf-gcc
+compiler.gimpleesp32g20241119.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32-elf-objdump
+compiler.gimpleesp32g20241119.name=Xtensa ESP32 gcc 14.2.0 (20241119)
 
 ################################
 # GCC for Xtensa ESP32-S2
-group.gimplextensaesp32s2.compilers=gimpleesp32s2g2022r1:gimpleesp32s2g20230208
+group.gimplextensaesp32s2.compilers=gimpleesp32s2g2022r1:gimpleesp32s2g20230208:gimpleesp32s2g20241119
 group.gimplextensaesp32s2.groupName=Xtensa ESP32-S2 GCC
 group.gimplextensaesp32s2.supportsBinary=false
 group.gimplextensaesp32s2.instructionSet=xtensa
@@ -213,10 +216,13 @@ compiler.gimpleesp32s2g2022r1.name=Xtensa ESP32-S2 gcc 11.2.0 (2022r1)
 compiler.gimpleesp32s2g20230208.exe=/opt/compiler-explorer/xtensa/xtensa-esp32s2-elf-12.2.0_20230208/bin/xtensa-esp32s2-elf-gcc
 compiler.gimpleesp32s2g20230208.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp32s2-elf-12.2.0_20230208/bin/xtensa-esp32s2-elf-objdump
 compiler.gimpleesp32s2g20230208.name=Xtensa ESP32-S2 gcc 12.2.0 (20230208)
+compiler.gimpleesp32s2g20241119.exe=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32s2-elf-gcc
+compiler.gimpleesp32s2g20241119.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32s2-elf-objdump
+compiler.gimpleesp32s2g20241119.name=Xtensa ESP32-S2 gcc 14.2.0 (20241119)
 
 ################################
 # GCC for Xtensa ESP32-S3
-group.gimplextensaesp32s3.compilers=gimpleesp32s3g2022r1:gimpleesp32s3g20230208
+group.gimplextensaesp32s3.compilers=gimpleesp32s3g2022r1:gimpleesp32s3g20230208:gimpleesp32s3g20241119
 group.gimplextensaesp32s3.groupName=Xtensa ESP32-S3 GCC
 group.gimplextensaesp32s3.supportsBinary=false
 group.gimplextensaesp32s3.instructionSet=xtensa
@@ -229,6 +235,9 @@ compiler.gimpleesp32s3g2022r1.name=Xtensa ESP32-S3 gcc 11.2.0 (2022r1)
 compiler.gimpleesp32s3g20230208.exe=/opt/compiler-explorer/xtensa/xtensa-esp32s3-elf-12.2.0_20230208/bin/xtensa-esp32s3-elf-gcc
 compiler.gimpleesp32s3g20230208.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp32s3-elf-12.2.0_20230208/bin/xtensa-esp32s3-elf-objdump
 compiler.gimpleesp32s3g20230208.name=Xtensa ESP32-S3 gcc 12.2.0 (20230208)
+compiler.gimpleesp32s3g20241119.exe=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32s3-elf-gcc
+compiler.gimpleesp32s3g20241119.objdumper=/opt/compiler-explorer/xtensa/xtensa-esp-elf-14.2.0_20241119/bin/xtensa-esp32s3-elf-objdump
+compiler.gimpleesp32s3g20241119.name=Xtensa ESP32-S3 gcc 14.2.0 (20241119)
 
 ###############################
 # GCC for Kalray
diff --git a/etc/config/ispc.amazon.properties b/etc/config/ispc.amazon.properties
index 475213481..639085c5a 100644
--- a/etc/config/ispc.amazon.properties
+++ b/etc/config/ispc.amazon.properties
@@ -1,54 +1,77 @@
 compilers=&ispc
 defaultCompiler=ispc1253
+objdumper=/opt/compiler-explorer/gcc-14.2.0/bin/objdump
 
 group.ispc.compilers=ispc1253:ispc1250:ispc1240:ispc1230:ispc1220:ispc1210:ispc1200:ispc1190:ispc1180:ispc1170:ispc1161:ispc1160:ispc1150:ispc1141:ispc1140:ispc1130:ispc1120:ispc1110:ispc1100:ispc192:ispc191:ispc-trunk
 group.ispc.isSemVer=true
 group.ispc.baseName=ispc
 compiler.ispc1253.exe=/opt/compiler-explorer/ispc-1.25.3/bin/ispc
 compiler.ispc1253.semver=1.25.3
+compiler.ispc1253.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1250.exe=/opt/compiler-explorer/ispc-1.25.0/bin/ispc
 compiler.ispc1250.semver=1.25.0
+compiler.ispc1250.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1240.exe=/opt/compiler-explorer/ispc-1.24.0/bin/ispc
 compiler.ispc1240.semver=1.24.0
+compiler.ispc1240.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1230.exe=/opt/compiler-explorer/ispc-1.23.0/bin/ispc
 compiler.ispc1230.semver=1.23.0
+compiler.ispc1230.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1220.exe=/opt/compiler-explorer/ispc-1.22.0/bin/ispc
 compiler.ispc1220.semver=1.22.0
+compiler.ispc1220.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1210.exe=/opt/compiler-explorer/ispc-1.21.0/bin/ispc
 compiler.ispc1210.semver=1.21.0
+compiler.ispc1210.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1200.exe=/opt/compiler-explorer/ispc-1.20.0/bin/ispc
 compiler.ispc1200.semver=1.20.0
+compiler.ispc1200.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1190.exe=/opt/compiler-explorer/ispc-1.19.0/bin/ispc
 compiler.ispc1190.semver=1.19.0
+compiler.ispc1190.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1180.exe=/opt/compiler-explorer/ispc-1.18.0/bin/ispc
 compiler.ispc1180.semver=1.18.0
+compiler.ispc1180.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1170.exe=/opt/compiler-explorer/ispc-1.17.0/bin/ispc
 compiler.ispc1170.semver=1.17.0
+compiler.ispc1170.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1161.exe=/opt/compiler-explorer/ispc-1.16.1/bin/ispc
 compiler.ispc1161.semver=1.16.1
+compiler.ispc1161.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1160.exe=/opt/compiler-explorer/ispc-1.16.0/bin/ispc
 compiler.ispc1160.semver=1.16.0
+compiler.ispc1160.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1150.exe=/opt/compiler-explorer/ispc-1.15.0/bin/ispc
 compiler.ispc1150.semver=1.15.0
+compiler.ispc1150.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1141.exe=/opt/compiler-explorer/ispc-1.14.1/bin/ispc
 compiler.ispc1141.semver=1.14.1
+compiler.ispc1141.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1140.exe=/opt/compiler-explorer/ispc-1.14.0/bin/ispc
 compiler.ispc1140.semver=1.14.0
+compiler.ispc1140.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1130.exe=/opt/compiler-explorer/ispc-1.13.0/bin/ispc
 compiler.ispc1130.semver=1.13.0
+compiler.ispc1130.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1120.exe=/opt/compiler-explorer/ispc-1.12.0/bin/ispc
 compiler.ispc1120.semver=1.12.0
+compiler.ispc1120.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1110.exe=/opt/compiler-explorer/ispc-1.11.0/bin/ispc
 compiler.ispc1110.semver=1.11.0
+compiler.ispc1110.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1100.exe=/opt/compiler-explorer/ispc-1.10.0/bin/ispc
 compiler.ispc1100.semver=1.10.0
+compiler.ispc1100.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc192.exe=/opt/compiler-explorer/ispc-1.9.2/ispc
 compiler.ispc192.semver=1.9.2
+compiler.ispc192.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc191.exe=/opt/compiler-explorer/ispc-1.9.1/ispc
 compiler.ispc191.semver=1.9.1
+compiler.ispc191.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc-trunk.exe=/opt/compiler-explorer/ispc-trunk/bin/ispc
 compiler.ispc-trunk.semver=(trunk)
 compiler.ispc-trunk.isNightly=true
+compiler.ispc-trunk.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 
 #################################
 #################################
diff --git a/etc/config/ispc.defaults.properties b/etc/config/ispc.defaults.properties
index c8e124747..cc2c9dc29 100644
--- a/etc/config/ispc.defaults.properties
+++ b/etc/config/ispc.defaults.properties
@@ -1,6 +1,10 @@
-supportsBinary=false
+supportsBinary=true
+supportsBinaryObject=true
+supportsExecute=true
 compilerType=ispc
-
+objdumper=objdump
+stubRe=\bmain\b
+stubText=extern "C" uniform int main() { return 0; }
 
 #################################
 #################################
diff --git a/etc/config/llvm.amazon.properties b/etc/config/llvm.amazon.properties
index c75f54cf6..8cec56218 100644
--- a/etc/config/llvm.amazon.properties
+++ b/etc/config/llvm.amazon.properties
@@ -1,4 +1,4 @@
-compilers=&irclang:&llc:&opt
+compilers=&irclang:&irhexagon-clang:&llc:&opt
 defaultCompiler=llctrunk
 
 demangler=/opt/compiler-explorer/gcc-14.2.0/bin/c++filt
@@ -61,6 +61,18 @@ compiler.irclang-assertions-trunk.exe=/opt/compiler-explorer/clang-assertions-tr
 compiler.irclang-assertions-trunk.objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump
 compiler.irclang-assertions-trunk.semver=(assertions trunk)
 
+group.irhexagon-clang.groupName=Hexagon clang
+group.irhexagon-clang.baseName=hexagon-clang
+group.irhexagon-clang.compilers=irhexagonclang1605
+group.irhexagon-clang.demangler=/opt/compiler-explorer/clang-trunk/bin/llvm-cxxfilt
+group.irhexagon-clang.options=-x ir
+
+compiler.irhexagonclang1605.semver=16.0.5
+compiler.irhexagonclang1605.name=hexagon-clang 16.0.5
+compiler.irhexagonclang1605.exe=/opt/compiler-explorer/clang+llvm-16.0.5-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/clang++
+compiler.irhexagonclang1605.compilerType=clang-hexagon
+compiler.irhexagonclang1605.compilerCategories=clang-hexagon
+
 group.llc.compilers=llc32:llc33:llc391:llc400:llc401:llc500:llc600:llc700:llc800:llc900:llc1000:llc1001:llc1100:llc1101:llc1200:llc1201:llc1300:llc1400:llc1500:llc1600:llc1701:llc1810:llc1910:llctrunk:llc-assertions-trunk
 group.llc.compilerType=llc
 group.llc.supportsExecute=false
diff --git a/etc/config/odin.amazon.properties b/etc/config/odin.amazon.properties
index 81887838f..7dd307d20 100644
--- a/etc/config/odin.amazon.properties
+++ b/etc/config/odin.amazon.properties
@@ -1,15 +1,18 @@
 compilers=&odin
 compilerType=odin
-defaultCompiler=odin202411
+defaultCompiler=odin202501
 supportsBinary=true
 supportsExecute=true
 
 objdumper=/opt/compiler-explorer/gcc-14.2.0/bin/objdump
 clangPath=/opt/compiler-explorer/clang-19.1.0/bin/clang
 
-group.odin.compilers=odin202411
+group.odin.compilers=odin202411:odin202501
 group.odin.isSemVer=false
 group.odin.baseName=odin
 
 compiler.odin202411.exe=/opt/compiler-explorer/odin-dev-2024-11/odin
 compiler.odin202411.name=Odin (2024-11)
+
+compiler.odin202501.exe=/opt/compiler-explorer/odin-dev-2025-01/odin
+compiler.odin202501.name=Odin (2025-01)
diff --git a/etc/config/rust.amazon.properties b/etc/config/rust.amazon.properties
index 81cd8aea5..e9eaa0dbc 100644
--- a/etc/config/rust.amazon.properties
+++ b/etc/config/rust.amazon.properties
@@ -983,7 +983,13 @@ libs.zerocopy.versions.0732.path=libzerocopy.rlib
 #################################
 # Installed tools
 
-tools=llvm-mcatrunk:llvm-dwarfdumptrunk:osacatrunk:rustfmt1436:bloaty11
+tools=ldd:llvm-mcatrunk:llvm-dwarfdumptrunk:osacatrunk:pahole:readelf:nm:strings:rustfmt1436:bloaty11
+
+tools.ldd.name=ldd
+tools.ldd.exe=/usr/bin/ldd
+tools.ldd.type=postcompilation
+tools.ldd.class=readelf-tool
+tools.ldd.stdinHint=disabled
 
 tools.llvm-mcatrunk.name=llvm-mca (trunk)
 tools.llvm-mcatrunk.exe=/opt/compiler-explorer/clang-trunk/bin/llvm-mca
@@ -1003,6 +1009,31 @@ tools.osacatrunk.type=postcompilation
 tools.osacatrunk.class=osaca-tool
 tools.osacatrunk.stdinHint=disabled
 
+tools.pahole.name=pahole (trunk)
+tools.pahole.exe=/opt/compiler-explorer/pahole-trunk/bin/pahole
+tools.pahole.type=postcompilation
+tools.pahole.class=pahole-tool
+tools.pahole.stdinHint=disabled
+tools.pahole.languageId=cppp
+
+tools.readelf.name=readelf (trunk)
+tools.readelf.exe=/opt/compiler-explorer/gcc-snapshot/bin/readelf
+tools.readelf.type=postcompilation
+tools.readelf.class=readelf-tool
+tools.readelf.stdinHint=disabled
+
+tools.nm.name=nm (trunk)
+tools.nm.exe=/opt/compiler-explorer/gcc-snapshot/bin/nm
+tools.nm.type=postcompilation
+tools.nm.class=nm-tool
+tools.nm.stdinHint=disabled
+
+tools.strings.exe=/opt/compiler-explorer/gcc-snapshot/bin/strings
+tools.strings.name=strings
+tools.strings.type=postcompilation
+tools.strings.class=strings-tool
+tools.strings.stdinHint=disabled
+
 # This tool has the "rustfmmt1436" name for legacy reasons. It was initially introduced when Rustfmt was a separate
 # component, not distributed with the Rust compiler. The tool is still named "rustfmt1436" to avoid breaking existing
 # shortlinks.
diff --git a/etc/config/slang.amazon.properties b/etc/config/slang.amazon.properties
index 7a25d2d13..ac3102a94 100644
--- a/etc/config/slang.amazon.properties
+++ b/etc/config/slang.amazon.properties
@@ -1,13 +1,16 @@
 compilers=&defaultslangc
 
-defaultCompiler=slangc_2024_14_6
+defaultCompiler=slangc_2025_2_2
 supportsBinary=false
 compilerType=slang
 instructionSet=spirv
 
 disassemblerPath=/opt/compiler-explorer/SPIRV-Tools-master/build/tools/spirv-dis
 
-group.defaultslangc.compilers=slangc_2024_14_6
+group.defaultslangc.compilers=slangc_2024_14_6:slangc_2025_2_2
 group.defaultslangc.versionFlag=-version
+
 compiler.slangc_2024_14_6.exe=/opt/compiler-explorer/slang-2024.14.6/bin/slangc
 compiler.slangc_2024_14_6.name=slangc 2024.14.6
+compiler.slangc_2025_2_2.exe=/opt/compiler-explorer/slang-2025.2.2/bin/slangc
+compiler.slangc_2025_2_2.name=slangc 2025.2.2
diff --git a/etc/config/spice.amazon.properties b/etc/config/spice.amazon.properties
index 139a4f43b..d4ebad7a6 100644
--- a/etc/config/spice.amazon.properties
+++ b/etc/config/spice.amazon.properties
@@ -1,19 +1,19 @@
 compilers=&spice
-defaultCompiler=spice02006
+defaultCompiler=spice02100
 
-group.spice.compilers=spice01902:spice01903:spice01904:spice01905:spice01906:spice02000:spice02001:spice02002:spice02003:spice02004:spice02005:spice02006
-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.compilers=spice01902:spice01903:spice01904:spice01905:spice01906:spice02000:spice02001:spice02002:spice02003:spice02004:spice02005:spice02006:spice02100
+group.spice.demangler=/opt/compiler-explorer/gcc-14.2.0/bin/c++filt
+group.spice.objdumper=/opt/compiler-explorer/gcc-14.2.0/bin/objdump
 group.spice.isSemVer=true
 group.spice.baseName=spice
 group.spice.compilerType=spice
 group.spice.versionFlag=--version
 group.spice.licenseLink=https://github.com/spicelang/spice/blob/main/LICENSE
 group.spice.licenseName=The MIT License
-group.spice.licensePreamble=Copyright (c) 2021-2024 Marc Auberer
+group.spice.licensePreamble=Copyright (c) 2021-2025 Marc Auberer
 
 # spice needs to be able to find clang for linking
-group.spice.extraPath=/opt/compiler-explorer/clang-18.1.0/bin
+group.spice.extraPath=/opt/compiler-explorer/clang-19.1.0/bin
 
 compiler.spice01902.exe=/opt/compiler-explorer/spice-0.19.2/spice
 compiler.spice01902.semver=0.19.2
@@ -39,6 +39,8 @@ compiler.spice02005.exe=/opt/compiler-explorer/spice-0.20.5/spice
 compiler.spice02005.semver=0.20.5
 compiler.spice02006.exe=/opt/compiler-explorer/spice-0.20.6/spice
 compiler.spice02006.semver=0.20.6
+compiler.spice02100.exe=/opt/compiler-explorer/spice-0.21.0/spice
+compiler.spice02100.semver=0.21.0
 
 #################################
 #################################
diff --git a/etc/config/spirv.amazon.properties b/etc/config/spirv.amazon.properties
index 6b3b003d6..0caf5633e 100644
--- a/etc/config/spirv.amazon.properties
+++ b/etc/config/spirv.amazon.properties
@@ -1,4 +1,4 @@
-compilers=&spirv-opt:&spirv-val:&spirv-cross
+compilers=&spirv-opt:&spirv-val:&spirv-cross:&spirv-reflect
 defaultCompiler=spirv-opt-master
 
 supportsBinary=false
@@ -17,9 +17,14 @@ group.spirv-val.compilerType=spirv-tools
 
 group.spirv-cross.groupName=Translate
 group.spirv-cross.baseName=SPIRV-Cross
-group.spirv-cross.compilers=spirv-cross-sdk-296
+group.spirv-cross.compilers=spirv-cross-sdk-296:spirv-cross-sdk-304
 group.spirv-cross.compilerType=spirv-tools
 
+group.spirv-reflect.groupName=Reflection
+group.spirv-reflect.baseName=SPIRV-Reflect
+group.spirv-reflect.compilers=spirv-reflect-sdk-304
+group.spirv-reflect.compilerType=spirv-tools
+
 assemblerPath=/opt/compiler-explorer/SPIRV-Tools-master/build/tools/spirv-as
 disassemblerPath=/opt/compiler-explorer/SPIRV-Tools-master/build/tools/spirv-dis
 compiler.spirv-opt-master.exe=/opt/compiler-explorer/SPIRV-Tools-master/build/tools/spirv-opt
@@ -27,5 +32,11 @@ compiler.spirv-opt-master.name=spirv-opt (trunk)
 compiler.spirv-val-master.exe=/opt/compiler-explorer/SPIRV-Tools-master/build/tools/spirv-val
 compiler.spirv-val-master.name=spirv-val (trunk)
 
+# SPIRV-Reflect needed stdout fix not added until 304 SDK
 compiler.spirv-cross-sdk-296.exe=/opt/compiler-explorer/vulkan-sdk/v1.3.296.0/x86_64/bin/spirv-cross
 compiler.spirv-cross-sdk-296.name=spirv-cross (sdk-296)
+
+compiler.spirv-cross-sdk-304.exe=/opt/compiler-explorer/vulkan-sdk/v1.4.304.0/x86_64/bin/spirv-cross
+compiler.spirv-cross-sdk-304.name=spirv-cross (sdk-304)
+compiler.spirv-reflect-sdk-304.exe=/opt/compiler-explorer/vulkan-sdk/v1.4.304.0/x86_64/bin/spirv-reflect
+compiler.spirv-reflect-sdk-304.name=spirv-reflect (sdk-304)
diff --git a/etc/config/swift.amazon.properties b/etc/config/swift.amazon.properties
index 33075658d..3b18b2e5c 100644
--- a/etc/config/swift.amazon.properties
+++ b/etc/config/swift.amazon.properties
@@ -3,7 +3,7 @@ demangler=/opt/compiler-explorer/swift-6.0.3/usr/bin/swift-demangle
 defaultCompiler=swift603
 objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump
 
-group.swift.compilers=swift311:swift402:swift403:swift41:swift411:swift412:swift42:swift50:swift51:swift52:swift53:swift54:swift55:swift56:swift57:swift58:swift59:swift510:swift603:swiftnightly
+group.swift.compilers=swift311:swift402:swift403:swift41:swift411:swift412:swift42:swift50:swift51:swift52:swift53:swift54:swift55:swift56:swift57:swift58:swift59:swift510:swift603:swiftdevsnapshot:swiftnightly
 group.swift.isSemVer=true
 group.swift.baseName=x86-64 swiftc
 compiler.swift311.exe=/opt/compiler-explorer/swift-3.1.1/usr/bin/swiftc
@@ -50,9 +50,11 @@ compiler.swift59.exe=/opt/compiler-explorer/swift-5.9/usr/bin/swiftc
 compiler.swift59.semver=5.9
 compiler.swift510.exe=/opt/compiler-explorer/swift-5.10/usr/bin/swiftc
 compiler.swift510.semver=5.10
+compiler.swift510.alias=switf510nightly
 compiler.swift603.exe=/opt/compiler-explorer/swift-6.0.3/usr/bin/swiftc
 compiler.swift603.semver=6.0.3
-compiler.swift510.alias=switf510nightly
+compiler.swiftdevsnapshot.exe=/opt/compiler-explorer/swift-dev-snapshot/usr/bin/swiftc
+compiler.swiftdevsnapshot.semver=devsnapshot
 compiler.swiftnightly.exe=/opt/compiler-explorer/swift-nightly/usr/bin/swiftc
 compiler.swiftnightly.semver=nightly
 compiler.swiftnightly.isNightly=true
diff --git a/etc/nsjail/user-execution.cfg b/etc/nsjail/user-execution.cfg
index fab5e4660..b4fd18b38 100644
--- a/etc/nsjail/user-execution.cfg
+++ b/etc/nsjail/user-execution.cfg
@@ -131,6 +131,20 @@ mount {
     is_bind: true
 }
 
+###
+# Support for stdbuf
+mount {
+    src: "/usr/bin/stdbuf"
+    dst: "/usr/bin/stdbuf"
+    is_bind: true
+}
+mount {
+    src: "/usr/libexec/coreutils/libstdbuf.so"
+    dst: "/usr/libexec/coreutils/libstdbuf.so"
+    is_bind: true
+}
+###
+
 mount {
     src: "/dev/nvidia0"
     dst: "/dev/nvidia0"
diff --git a/examples/ispc/default.ispc b/examples/ispc/default.ispc
index 0924dc0b6..8d8ec61ac 100644
--- a/examples/ispc/default.ispc
+++ b/examples/ispc/default.ispc
@@ -1,4 +1,18 @@
 // Type your code here, or load an example.
-uniform int square(uniform int num) {
-    return num * num;
+varying int square_even(varying int num) {
+    if (num % 2 == 0) {
+        return num * num;
+    } else {
+        return num;
+    }
 }
+
+// Uncomment this if you would like to execute the code
+/*
+extern "C" uniform int main() {
+    print("Hello, World!\n");
+    print("programCount = %\n", programCount);
+    print("square_even(%) = %\n", programIndex, square_even(programIndex));
+    return 0;
+}
+*/
diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts
index 5b9ac7447..23d814dc0 100644
--- a/lib/base-compiler.ts
+++ b/lib/base-compiler.ts
@@ -1190,17 +1190,12 @@ export class BaseCompiler {
 
         const libIncludes = this.getIncludeArguments(libraries, dirPath);
         const libOptions = this.getLibraryOptions(libraries);
-        let libLinks: string[] = [];
-        let libPaths: string[] = [];
-        let libPathsAsFlags: string[] = [];
-        let staticLibLinks: string[] = [];
-
-        if (filters.binary) {
-            libLinks = (this.getSharedLibraryLinks(libraries).filter(Boolean) as string[]) || [];
-            libPathsAsFlags = this.getSharedLibraryPathsAsArguments(libraries, undefined, toolchainPath, dirPath);
-            libPaths = this.getSharedLibraryPaths(libraries, dirPath);
-            staticLibLinks = (this.getStaticLibraryLinks(libraries, libPaths).filter(Boolean) as string[]) || [];
-        }
+        const {libLinks, libPathsAsFlags, staticLibLinks} = this.getLibLinkInfo(
+            filters,
+            libraries,
+            toolchainPath,
+            dirPath,
+        );
 
         userOptions = this.filterUserOptions(userOptions) || [];
         [options, overrides] = this.fixIncompatibleOptions(options, userOptions, overrides);
@@ -1218,6 +1213,25 @@ export class BaseCompiler {
         );
     }
 
+    protected getLibLinkInfo(
+        filters: ParseFiltersAndOutputOptions,
+        libraries: SelectedLibraryVersion[],
+        toolchainPath: string,
+        dirPath: string,
+    ) {
+        let libLinks: string[] = [];
+        let libPathsAsFlags: string[] = [];
+        let staticLibLinks: string[] = [];
+
+        if (filters.binary) {
+            libLinks = (this.getSharedLibraryLinks(libraries).filter(Boolean) as string[]) || [];
+            libPathsAsFlags = this.getSharedLibraryPathsAsArguments(libraries, undefined, toolchainPath, dirPath);
+            const libPaths = this.getSharedLibraryPaths(libraries, dirPath);
+            staticLibLinks = (this.getStaticLibraryLinks(libraries, libPaths).filter(Boolean) as string[]) || [];
+        }
+        return {libLinks, libPathsAsFlags, staticLibLinks};
+    }
+
     protected fixIncompatibleOptions(
         options: string[],
         userOptions: string[],
@@ -1651,9 +1665,14 @@ export class BaseCompiler {
         return utils.changeExtension(inputFilename, '.ll');
     }
 
-    getOutputFilename(dirPath: string, outputFilebase: string, key?: any): string {
-        let filename;
-        if (key && key.backendOptions && key.backendOptions.customOutputFilename) {
+    isCacheKey(key: CacheKey | CompilationCacheKey | undefined): key is CacheKey {
+        return key !== undefined && (key as CacheKey).backendOptions !== undefined;
+    }
+
+    getOutputFilename(dirPath: string, outputFilebase: string, key?: CacheKey | CompilationCacheKey): string {
+        let filename: string;
+
+        if (this.isCacheKey(key) && key.backendOptions.customOutputFilename) {
             filename = key.backendOptions.customOutputFilename;
         } else {
             filename = `${outputFilebase}.s`;
@@ -1803,7 +1822,7 @@ export class BaseCompiler {
 
     buildExecutable(compiler: string, options: string[], inputFilename: string, execOptions: ExecutionOptionsWithEnv) {
         // default implementation, but should be overridden by compilers
-        return this.runCompiler(compiler, options, inputFilename, execOptions);
+        return this.runCompiler(compiler, options, inputFilename, execOptions, {execute: true, binary: true});
     }
 
     protected maskPathsInArgumentsForUser(args: string[]): string[] {
diff --git a/lib/compiler-finder.ts b/lib/compiler-finder.ts
index 4049b3e41..e62685b3b 100644
--- a/lib/compiler-finder.ts
+++ b/lib/compiler-finder.ts
@@ -39,7 +39,6 @@ import type {Language, LanguageKey} from '../types/languages.interfaces.js';
 import {Tool, ToolInfo} from '../types/tool.interfaces.js';
 
 import {assert, unwrap, unwrapString} from './assert.js';
-import {InstanceFetcher} from './aws.js';
 import {CompileHandler} from './handlers/compile.js';
 import {logger} from './logger.js';
 import {ClientOptionsHandler} from './options-handler.js';
@@ -55,34 +54,41 @@ const sleep = promisify(setTimeout);
 export class CompilerFinder {
     compilerProps: CompilerProps['get'];
     ceProps: PropertyGetter;
-    awsProps: PropertyGetter;
     args: AppDefaultArguments;
     compileHandler: CompileHandler;
     languages: Record<string, Language>;
-    awsPoller: InstanceFetcher | null = null;
     optionsHandler: ClientOptionsHandler;
-    //visitedCompilers = new Set<string>();
 
     constructor(
         compileHandler: CompileHandler,
         compilerProps: CompilerProps,
-        awsProps: PropertyGetter,
         args: AppDefaultArguments,
         optionsHandler: ClientOptionsHandler,
     ) {
         this.compilerProps = compilerProps.get.bind(compilerProps);
         this.ceProps = compilerProps.ceProps;
-        this.awsProps = awsProps;
         this.args = args;
         this.compileHandler = compileHandler;
         this.languages = compilerProps.languages;
-        this.awsPoller = null;
         this.optionsHandler = optionsHandler;
     }
 
-    awsInstances() {
-        if (!this.awsPoller) this.awsPoller = new InstanceFetcher(this.awsProps);
-        return this.awsPoller.getInstances();
+    static prepareRemoteUrlParts(host: string, port: number, uriBase: string, langId: string | null) {
+        const uriSchema = port === 443 ? 'https' : 'http';
+        return {
+            uriSchema: uriSchema,
+            uri: urljoin(`${uriSchema}://${host}:${port}`, uriBase),
+            apiPath: urljoin('/', uriBase || '', 'api/compilers', langId || '', '?fields=all'),
+        };
+    }
+
+    static getRemoteInfo(uriSchema: string, host: string, port: number, uriBase: string, compilerId: string) {
+        return {
+            target: `${uriSchema}://${host}:${port}`,
+            path: urljoin('/', uriBase, 'api/compiler', compilerId, 'compile'),
+            cmakePath: urljoin('/', uriBase, 'api/compiler', compilerId, 'cmake'),
+            basePath: urljoin('/', uriBase),
+        };
     }
 
     async fetchRemote(
@@ -93,9 +99,7 @@ export class CompilerFinder {
         langId: string | null,
     ): Promise<CompilerInfo[] | null> {
         const requestLib = port === 443 ? https : http;
-        const uriSchema = port === 443 ? 'https' : 'http';
-        const uri = urljoin(`${uriSchema}://${host}:${port}`, uriBase);
-        const apiPath = urljoin('/', uriBase || '', 'api/compilers', langId || '', '?fields=all');
+        const {uriSchema, uri, apiPath} = CompilerFinder.prepareRemoteUrlParts(host, port, uriBase, langId);
         logger.info(`Fetching compilers from remote source ${uri}`);
         return this.retryPromise(
             () => {
@@ -143,18 +147,14 @@ export class CompilerFinder {
                                 res.on('end', () => {
                                     try {
                                         const compilers = (JSON.parse(str) as CompilerInfo[]).map(compiler => {
-                                            // Fix up old upstream implementations of Compiler Explorer
-                                            // e.g. https://www.godbolt.ms
-                                            // (see https://github.com/compiler-explorer/compiler-explorer/issues/1768)
-                                            if (!compiler.alias) compiler.alias = [];
-                                            if (typeof compiler.alias == 'string') compiler.alias = [compiler.alias];
-                                            // End fixup
                                             compiler.exe = '/dev/null';
-                                            compiler.remote = {
-                                                target: `${uriSchema}://${host}:${port}`,
-                                                path: urljoin('/', uriBase, 'api/compiler', compiler.id, 'compile'),
-                                                cmakePath: urljoin('/', uriBase, 'api/compiler', compiler.id, 'cmake'),
-                                            };
+                                            compiler.remote = CompilerFinder.getRemoteInfo(
+                                                uriSchema,
+                                                host,
+                                                port,
+                                                uriBase,
+                                                compiler.id,
+                                            );
                                             return compiler;
                                         });
                                         resolve(compilers);
@@ -167,7 +167,7 @@ export class CompilerFinder {
                         )
                         .on('error', reject)
                         .on('timeout', () => reject('timeout'));
-                    request.setTimeout(this.awsProps('proxyTimeout', 1000));
+                    request.setTimeout(this.ceProps('proxyTimeout', 1000));
                 });
             },
             `${host}:${port}`,
@@ -179,22 +179,6 @@ export class CompilerFinder {
         });
     }
 
-    async fetchAws() {
-        logger.info('Fetching instances from AWS');
-        const instances = await this.awsInstances();
-        const mapped = await Promise.all(
-            instances.map(instance => {
-                logger.info('Checking instance ' + instance.InstanceId);
-                const address = this.awsProps('externalTestMode', false)
-                    ? instance.PublicDnsName
-                    : instance.PrivateDnsName;
-                return this.fetchRemote(unwrap(address), this.args.port, '', this.awsProps, null);
-            }),
-        );
-
-        return remove(mapped.flat(), null);
-    }
-
     async compilerConfigFor(
         langId: string,
         compilerId: string,
@@ -369,6 +353,16 @@ export class CompilerFinder {
             .filter(a => a !== '');
     }
 
+    static getRemotePartsFromCompilerName(remoteCompilerName: string) {
+        const bits = remoteCompilerName.split('@');
+        const pathParts = bits[1].split('/');
+        return {
+            host: bits[0],
+            port: parseInt(unwrap(pathParts.shift())),
+            uriBase: pathParts.join('/'),
+        };
+    }
+
     async recurseGetCompilers(
         langId: string,
         compilerName: string,
@@ -376,12 +370,8 @@ export class CompilerFinder {
     ): Promise<PreliminaryCompilerInfo[]> {
         // Don't treat @ in paths as remote addresses if requested
         if (this.args.fetchCompilersFromRemote && compilerName.includes('@')) {
-            const bits = compilerName.split('@');
-            const host = bits[0];
-            const pathParts = bits[1].split('/');
-            const port = parseInt(unwrap(pathParts.shift()));
-            const path = pathParts.join('/');
-            return (await this.fetchRemote(host, port, path, this.ceProps, langId)) || [];
+            const {host, port, uriBase} = CompilerFinder.getRemotePartsFromCompilerName(compilerName);
+            return (await this.fetchRemote(host, port, uriBase, this.ceProps, langId)) || [];
         }
         if (compilerName.indexOf('&') === 0) {
             const groupName = compilerName.substring(1);
@@ -401,7 +391,6 @@ export class CompilerFinder {
             );
             return allCompilers.flat();
         }
-        if (compilerName === 'AWS') return this.fetchAws();
         const configs = [await this.compilerConfigFor(langId, compilerName, parentProps)];
         return remove(configs, null);
     }
diff --git a/lib/compilers/_all.ts b/lib/compilers/_all.ts
index 5e10b9f3c..24d8953a8 100644
--- a/lib/compilers/_all.ts
+++ b/lib/compilers/_all.ts
@@ -28,31 +28,30 @@ export {AssemblyCompiler} from './assembly.js';
 export {AvrGcc6502Compiler} from './avrgcc6502.js';
 export {BeebAsmCompiler} from './beebasm.js';
 export {C3Compiler} from './c3c.js';
+export {CIRCTCompiler} from './circt.js';
+export {CL430Compiler} from './cl430.js';
+export {CLSPVCompiler} from './clspv.js';
+export {CMakeScriptCompiler} from './cmakescript.js';
 export {CarbonCompiler} from './carbon.js';
-export {CerberusCompiler} from './cerberus.js';
 export {Cc65Compiler} from './cc65.js';
+export {CerberusCompiler} from './cerberus.js';
 export {CircleCompiler} from './circle.js';
-export {CIRCTCompiler} from './circt.js';
-export {CL430Compiler} from './cl430.js';
-export {ClangCompiler} from './clang.js';
 export {ClangCLCompiler} from './clangcl.js';
+export {ClangCompiler} from './clang.js';
 export {ClangCudaCompiler} from './clang.js';
+export {ClangDxcCompiler} from './clang.js';
+export {ClangHexagonCompiler} from './clang.js';
 export {ClangHipCompiler} from './clang.js';
 export {ClangIntelCompiler} from './clang.js';
-export {ClangHexagonCompiler} from './clang.js';
-export {ClangDxcCompiler} from './clang.js';
 export {CleanCompiler} from './clean.js';
-export {CMakeScriptCompiler} from './cmakescript.js';
 export {CompCertCompiler} from './compcert.js';
 export {CppFrontCompiler} from './cppfront.js';
 export {CprocCompiler} from './cproc.js';
-export {CLSPVCompiler} from './clspv.js';
 export {CrystalCompiler} from './crystal.js';
 export {D8Compiler} from './d8.js';
+export {DMDCompiler} from './dmd.js';
 export {DartCompiler} from './dart.js';
 export {DefaultCompiler} from './default.js';
-export {Dex2OatCompiler} from './dex2oat.js';
-export {DMDCompiler} from './dmd.js';
 export {
     DotNetCoreClrCompiler,
     DotNetCrossgen2Compiler,
@@ -62,28 +61,30 @@ export {
     DotNetMonoCompiler,
     DotNetNativeAotCompiler,
 } from './dotnet.js';
+export {Dex2OatCompiler} from './dex2oat.js';
 export {EDGCompiler} from './edg.js';
-export {EllccCompiler} from './ellcc.js';
-export {ElixirCompiler} from './elixir.js';
-export {ErlangCompiler} from './erlang.js';
-export {ErlangAsmCompiler} from './erlangasm.js';
 export {EWARMCompiler} from './ewarm.js';
 export {EWAVRCompiler} from './ewavr.js';
+export {ElixirAsmCompiler} from './elixirasm.js';
+export {ElixirCompiler} from './elixir.js';
+export {EllccCompiler} from './ellcc.js';
+export {ErlangAsmCompiler} from './erlangasm.js';
+export {ErlangCompiler} from './erlang.js';
+export {FPCCompiler} from './pascal.js';
 export {FakeCompiler} from './fake-for-test.js';
 export {FlangCompiler} from './flang.js';
 export {FlangFC1Compiler} from './flang-fc1.js';
-export {LFortranCompiler} from './lfortran.js';
 export {FortranCompiler} from './fortran.js';
-export {FPCCompiler} from './pascal.js';
+export {GCCCobolCompiler} from './gcccobol.js';
 export {GCCCompiler} from './gcc.js';
-export {GCCRSCompiler} from './gccrs.js';
 export {GCCGimpleCompiler} from './gimple.js';
-export {GCCCobolCompiler} from './gcccobol.js';
+export {GCCRSCompiler} from './gccrs.js';
 export {GLSLCompiler} from './glsl.js';
+export {GM2Compiler} from './gm2.js';
 export {GnuCobolCompiler} from './gnucobol.js';
 export {GolangCompiler} from './golang.js';
-export {HaskellCompiler} from './haskell.js';
 export {HLSLCompiler} from './hlsl.js';
+export {HaskellCompiler} from './haskell.js';
 export {HookCompiler} from './hook.js';
 export {HyloCompiler} from './hylo.js';
 export {ISPCCompiler} from './ispc.js';
@@ -92,68 +93,69 @@ export {JavaCompiler} from './java.js';
 export {JuliaCompiler} from './julia.js';
 export {KotlinCompiler} from './kotlin.js';
 export {LDCCompiler} from './ldc.js';
+export {LFortranCompiler} from './lfortran.js';
 export {LLCCompiler} from './llc.js';
-export {YLCCompiler} from './ylc.js';
-export {LLVMmcaTool} from './llvm-mca.js';
 export {LLVMMOSCompiler} from './llvm-mos.js';
+export {LLVMmcaTool} from './llvm-mca.js';
+export {MLIRCompiler} from './mlir.js';
 export {MadPascalCompiler} from './madpascal.js';
 export {MovfuscatorCompiler} from './movfuscator.js';
-export {MLIRCompiler} from './mlir.js';
-export {GM2Compiler} from './gm2.js';
 export {MrustcCompiler} from './mrustc.js';
-export {SnowballCompiler} from './snowball.js';
+export {Msp430Compiler} from './msp430.js';
 export {NasmCompiler} from './nasm.js';
 export {NimCompiler} from './nim.js';
 export {NvccCompiler} from './nvcc.js';
-export {NvrtcCompiler} from './nvrtc.js';
 export {NvcppCompiler} from './nvcpp.js';
+export {NvrtcCompiler} from './nvrtc.js';
 export {OCamlCompiler} from './ocaml.js';
+export {OSACATool} from './osaca.js';
 export {OdinCompiler} from './odin.js';
 export {OptCompiler} from './opt.js';
-export {OSACATool} from './osaca.js';
+export {PPCICompiler} from './ppci.js';
 export {PascalWinCompiler} from './pascal-win.js';
 export {PonyCompiler} from './pony.js';
-export {PPCICompiler} from './ppci.js';
 export {PtxAssembler} from './ptxas.js';
 export {PythonCompiler} from './python.js';
 export {PythranCompiler} from './pythran.js';
 export {QNXCompiler} from './qnx.js';
 export {R8Compiler} from './r8.js';
-export {RacketCompiler} from './racket.js';
 export {RGACompiler} from './rga.js';
+export {RacketCompiler} from './racket.js';
 export {RubyCompiler} from './ruby.js';
-export {RustcCgGCCCompiler} from './rustc-cg-gcc.js';
 export {RustCompiler} from './rust.js';
+export {RustcCgGCCCompiler} from './rustc-cg-gcc.js';
+export {SPIRVCompiler} from './spirv.js';
+export {SPIRVToolsCompiler} from './spirv-tools.js';
 export {ScalaCompiler} from './scala.js';
 export {SdccCompiler} from './sdcc.js';
 export {SlangCompiler} from './slang.js';
+export {SnowballCompiler} from './snowball.js';
 export {SolidityCompiler} from './solidity.js';
 export {SolidityZKsyncCompiler} from './solidity-zksync.js';
 export {SpiceCompiler} from './spice.js';
-export {SPIRVCompiler} from './spirv.js';
-export {SPIRVToolsCompiler} from './spirv-tools.js';
 export {SwiftCompiler} from './swift.js';
+export {TIC2000} from './tic2000.js';
 export {TableGenCompiler} from './tablegen.js';
 export {TenDRACompiler} from './tendra.js';
-export {TIC2000} from './tic2000.js';
 export {TinyCCompiler} from './tinyc.js';
 export {ToitCompiler} from './toit.js';
 export {TurboCCompiler} from './turboc.js';
 export {TypeScriptNativeCompiler} from './typescript-native.js';
+export {V8Compiler} from './v8.js';
 export {VCompiler} from './v.js';
 export {ValaCompiler} from './vala.js';
 export {VyperCompiler} from './vyper.js';
-export {V8Compiler} from './v8.js';
+export {WasmtimeCompiler} from './wasmtime.js';
 export {Win32Compiler} from './win32.js';
+export {Win32MingWClang} from './win32-mingw-clang.js';
+export {Win32MingWGcc} from './win32-mingw-gcc.js';
 export {Win32Vc6Compiler} from './win32-vc6.js';
 export {Win32VcCompiler} from './win32-vc.js';
-export {Win32MingWGcc} from './win32-mingw-gcc.js';
-export {Win32MingWClang} from './win32-mingw-clang.js';
 export {WineVcCompiler} from './wine-vc.js';
 export {WslVcCompiler} from './wsl-vc.js';
 export {WyrmCompiler} from './wyrm.js';
-export {WasmtimeCompiler} from './wasmtime.js';
+export {YLCCompiler} from './ylc.js';
 export {ZigCC} from './zigcc.js';
-export {ZigCompiler} from './zig.js';
 export {ZigCXX} from './zigcxx.js';
+export {ZigCompiler} from './zig.js';
 export {z88dkCompiler} from './z88dk.js';
diff --git a/lib/compilers/clang.ts b/lib/compilers/clang.ts
index 74cc1a36a..938763e68 100644
--- a/lib/compilers/clang.ts
+++ b/lib/compilers/clang.ts
@@ -374,9 +374,15 @@ export class ClangIntelCompiler extends ClangCompiler {
         super(info, env);
 
         if (!this.offloadBundlerPath) {
+            // clang-offload-bundler is in a different folder in versions >= 2024.0.0
             const offloadBundlerPath = path.join(path.dirname(this.compiler.exe), '../bin-llvm/clang-offload-bundler');
             if (fs.existsSync(offloadBundlerPath)) {
                 this.offloadBundlerPath = path.resolve(offloadBundlerPath);
+            } else {
+                const offloadBundlerPath = path.join(path.dirname(this.compiler.exe), 'compiler/clang-offload-bundler');
+                if (fs.existsSync(offloadBundlerPath)) {
+                    this.offloadBundlerPath = path.resolve(offloadBundlerPath);
+                }
             }
         }
     }
diff --git a/lib/compilers/dex2oat.ts b/lib/compilers/dex2oat.ts
index fbfa80729..25e66ef95 100644
--- a/lib/compilers/dex2oat.ts
+++ b/lib/compilers/dex2oat.ts
@@ -145,7 +145,7 @@ export class Dex2OatCompiler extends BaseCompiler {
 
         // Regexes that apply to .smali files (R8/D8 dump output).
         this.smaliLineNumberRegex = /^\s+\.line\s+(\d+).*$/;
-        this.smaliClassRegex = /^\.class\s(.*)$/;
+        this.smaliClassRegex = /^\.class.*\s(L.*;)$/;
         this.smaliDexPcRegex = /^\s+#@(\w+).*$/;
         this.smaliMethodStartRegex = /^\.method\s(.*)$/;
         this.smaliMethodEndRegex = /^\s*\.end\smethod.*$/;
diff --git a/lib/compilers/elixirasm.ts b/lib/compilers/elixirasm.ts
new file mode 100644
index 000000000..ec5a66614
--- /dev/null
+++ b/lib/compilers/elixirasm.ts
@@ -0,0 +1,73 @@
+// Copyright (c) 2025, Compiler Explorer Authors
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+//     * Redistributions of source code must retain the above copyright notice,
+//       this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above copyright
+//       notice, this list of conditions and the following disclaimer in the
+//       documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+import path from 'path';
+
+import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
+import {BaseCompiler} from '../base-compiler.js';
+
+import {ElixirParser} from './argument-parsers.js';
+
+export class ElixirAsmCompiler extends BaseCompiler {
+    static get key() {
+        return 'elixirasm';
+    }
+
+    override optionsForFilter(filters: ParseFiltersAndOutputOptions, outputFilename: string): string[] {
+        return [
+            '--eval',
+            '[input] = Code.required_files();' +
+                'code = Code.compile_file(input);' +
+                ':erts_debug.set_internal_state(:available_internal_state, true);' +
+                ':erts_debug.set_internal_state(:jit_asm_dump, true);' +
+                'code = Code.compile_file(input)' +
+                '|> Enum.map(fn {module,_} -> File.read!(:erlang.atom_to_list(module) ++ ".asm") end) ' +
+                '|> Enum.join("\n"); ' +
+                `:ok = File.write("${outputFilename}", code);`,
+        ];
+    }
+
+    override orderArguments(
+        options: string[],
+        inputFilename: string,
+        libIncludes: string[],
+        libOptions: string[],
+        libPaths: string[],
+        libLinks: string[],
+        userOptions: string[],
+        staticLibLinks: string[],
+    ): string[] {
+        return ['-r', inputFilename]
+            .concat(options)
+            .concat(libIncludes, libOptions, libPaths, libLinks, userOptions, staticLibLinks);
+    }
+
+    override getOutputFilename(dirPath: string, outputFilebase: string): string {
+        return path.join(dirPath, `${outputFilebase}.asm`);
+    }
+
+    override getArgumentParserClass() {
+        return ElixirParser;
+    }
+}
diff --git a/lib/compilers/ispc.ts b/lib/compilers/ispc.ts
index 271b527b8..29dbcb2c9 100644
--- a/lib/compilers/ispc.ts
+++ b/lib/compilers/ispc.ts
@@ -22,20 +22,31 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 
+import fs from 'fs-extra';
 import Semver from 'semver';
 
+import {
+    CacheKey,
+    CompilationCacheKey,
+    CompilationResult,
+    ExecutionOptionsWithEnv,
+} from '../../types/compilation/compilation.interfaces.js';
 import {LLVMIrBackendOptions} from '../../types/compilation/ir.interfaces.js';
 import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js';
 import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
+import {SelectedLibraryVersion} from '../../types/libraries/libraries.interfaces.js';
 import type {ResultLine} from '../../types/resultline/resultline.interfaces.js';
 import {unwrap} from '../assert.js';
 import {BaseCompiler} from '../base-compiler.js';
 import {CompilationEnvironment} from '../compilation-env.js';
 import {asSafeVer} from '../utils.js';
+import * as utils from '../utils.js';
 
 import {ISPCParser} from './argument-parsers.js';
 
 export class ISPCCompiler extends BaseCompiler {
+    private readonly executableLinker: string;
+
     static get key() {
         return 'ispc';
     }
@@ -44,16 +55,40 @@ export class ISPCCompiler extends BaseCompiler {
         super(info, env);
         this.compiler.supportsIrView = true;
         this.compiler.irArg = ['--emit-llvm-text'];
+        // TODO(#7150) do away with this kind of thing and share the same linker for everything.
+        this.executableLinker = this.compilerProps<string>(`compiler.${this.compiler.id}.executableLinker`);
     }
 
     override couldSupportASTDump(version: string) {
         return Semver.gte(asSafeVer(this.compiler.semver), '1.18.0', true);
     }
 
+    override getOutputFilename(dirPath: string, outputFilebase: string, key?: CacheKey | CompilationCacheKey): string {
+        const outputFilename = super.getOutputFilename(dirPath, outputFilebase, key);
+        if (this.isCacheKey(key)) {
+            // ispc gets a bit annoyed about the output filename extension. If we're in binary object mode we _have_ to
+            // output a `.o` file, else ispc complains.
+            if (key.filters.binary || key.filters.binaryObject) {
+                return utils.changeExtension(outputFilename, '.o');
+            }
+        }
+        return outputFilename;
+    }
+
+    override getExecutableFilename(dirPath: string, outputFilebase: string, key?: CacheKey | CompilationCacheKey) {
+        // ispc gets a bit annoyed about the output filename extension. If we're in binary object mode we _have_ to
+        // output a `.o` file, else ispc complains. We can't defer this to getOutputFilename, else we'll rename the
+        // output of executed but non-binary, non-binary-object files, which need to remain `.s`.
+        return utils.changeExtension(super.getOutputFilename(dirPath, outputFilebase, key), '.o');
+    }
+
     override optionsForFilter(filters: ParseFiltersAndOutputOptions, outputFilename: string) {
-        let options = ['--target=avx2-i32x8', '--emit-asm', '-g', '-o', this.filename(outputFilename)];
+        const options = ['--target=avx2-i32x8', '-g', '-o', this.filename(outputFilename)];
+        if (!filters.binary && !filters.binaryObject) {
+            options.push('--emit-asm');
+        }
         if (this.compiler.intelAsm && filters.intel && !filters.binary) {
-            options = options.concat(this.compiler.intelAsm.split(' '));
+            options.push(...this.compiler.intelAsm.split(' '));
         }
         return options;
     }
@@ -91,7 +126,43 @@ export class ISPCCompiler extends BaseCompiler {
         );
     }
 
+    override getLibLinkInfo(
+        filters: ParseFiltersAndOutputOptions,
+        libraries: SelectedLibraryVersion[],
+        toolchainPath: string,
+        dirPath: string,
+    ) {
+        // Prevent any library linking flags from being passed to ispc during compilation.
+        return {libLinks: [], libPathsAsFlags: [], staticLibLinks: []};
+    }
+
     override isCfgCompiler() {
         return true;
     }
+
+    async linkExecutable(options: string[], execOptions: ExecutionOptionsWithEnv) {
+        // Rely on the fact we definitely put a `-o` in the options.
+        const outputFile = options[options.indexOf('-o') + 1];
+        const renamedFile = outputFile + '.tmp';
+        await fs.rename(outputFile, renamedFile);
+        return await this.exec(this.executableLinker, ['-o', outputFile, renamedFile], execOptions);
+    }
+
+    override async runCompiler(
+        compiler: string,
+        options: string[],
+        inputFilename: string,
+        execOptions: ExecutionOptionsWithEnv,
+        filters?: ParseFiltersAndOutputOptions,
+    ): Promise<CompilationResult> {
+        const result = await super.runCompiler(compiler, options, inputFilename, execOptions, filters);
+        if (result.code !== 0) return result;
+        if (filters?.binary) {
+            const linkResult = await this.linkExecutable(options, execOptions);
+            if (linkResult.code !== 0) {
+                return {...result, ...this.transformToCompilationResult(linkResult, inputFilename)};
+            }
+        }
+        return result;
+    }
 }
diff --git a/lib/compilers/msp430.ts b/lib/compilers/msp430.ts
new file mode 100644
index 000000000..2a0306ae8
--- /dev/null
+++ b/lib/compilers/msp430.ts
@@ -0,0 +1,40 @@
+// Copyright (c) 2025, Compiler Explorer Authors
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+//     * Redistributions of source code must retain the above copyright notice,
+//       this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above copyright
+//       notice, this list of conditions and the following disclaimer in the
+//       documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js';
+import {BaseCompiler} from '../base-compiler.js';
+import {CompilationEnvironment} from '../compilation-env.js';
+import {AsmParserMsp430} from '../parsers/asm-parser-msp430.js';
+
+export class Msp430Compiler extends BaseCompiler {
+    static get key() {
+        return 'msp430';
+    }
+
+    constructor(info: PreliminaryCompilerInfo, env: CompilationEnvironment) {
+        super(info, env);
+        // Our only difference is to use this somewhat patched asm parser.
+        this.asm = new AsmParserMsp430(this.compilerProps);
+    }
+}
diff --git a/lib/options-handler.ts b/lib/options-handler.ts
index 8dc5c086a..7bdb211ca 100755
--- a/lib/options-handler.ts
+++ b/lib/options-handler.ts
@@ -28,6 +28,7 @@ import path from 'path';
 import fs from 'fs-extra';
 import semverParser from 'semver';
 import _ from 'underscore';
+import urlJoin from 'url-join';
 
 import {AppDefaultArguments} from '../app.js';
 import {splitArguments} from '../shared/common-utils.js';
@@ -399,7 +400,7 @@ export class ClientOptionsHandler {
         const remoteId = this.getRemoteId(remoteUrl, language);
         if (!this.remoteLibs[remoteId]) {
             return new Promise(resolve => {
-                const url = remoteUrl + '/api/libraries/' + language;
+                const url = ClientOptionsHandler.getRemoteUrlForLibraries(remoteUrl, language);
                 logger.info(`Fetching remote libraries from ${url}`);
                 let fullData = '';
                 https.get(url, res => {
@@ -428,6 +429,14 @@ export class ClientOptionsHandler {
         await this.getRemoteLibraries(language, target);
     }
 
+    static getFullRemoteUrl(remote): string {
+        return remote.target + remote.basePath;
+    }
+
+    static getRemoteUrlForLibraries(url: string, language: LanguageKey) {
+        return urlJoin(url, '/api/libraries', language);
+    }
+
     async setCompilers(compilers: CompilerInfo[]) {
         const forbiddenKeys = new Set([
             'exe',
@@ -459,7 +468,10 @@ export class ClientOptionsHandler {
             }
 
             if (compiler.remote) {
-                await this.fetchRemoteLibrariesIfNeeded(compiler.lang, compiler.remote.target);
+                await this.fetchRemoteLibrariesIfNeeded(
+                    compiler.lang,
+                    ClientOptionsHandler.getFullRemoteUrl(compiler.remote),
+                );
             }
 
             for (const propKey of Object.keys(compiler)) {
diff --git a/lib/parsers/asm-parser-msp430.ts b/lib/parsers/asm-parser-msp430.ts
new file mode 100644
index 000000000..961eb26fe
--- /dev/null
+++ b/lib/parsers/asm-parser-msp430.ts
@@ -0,0 +1,45 @@
+// Copyright (c) 2025, Compiler Explorer Authors
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+//     * Redistributions of source code must retain the above copyright notice,
+//       this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above copyright
+//       notice, this list of conditions and the following disclaimer in the
+//       documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+import {ParsedAsmResult} from '../../types/asmresult/asmresult.interfaces.js';
+import {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
+
+import {AsmParser} from './asm-parser.js';
+
+export class AsmParserMsp430 extends AsmParser {
+    private fixupAsm(asm: string): string {
+        // msp430-gcc inlines functions in a weird way with `{` separating instructions. This leads to unusual output;
+        // and rather than do a bunch of work for a pretty niche asm, we replace each `{` with a newline and some spaces
+        // to re-indent per the msp430 style. See https://github.com/compiler-explorer/compiler-explorer/issues/295
+        return asm.replaceAll('{', '\n       ');
+    }
+
+    override processAsm(asmResult: string, filters: ParseFiltersAndOutputOptions): ParsedAsmResult {
+        return super.processAsm(this.fixupAsm(asmResult), filters);
+    }
+
+    override processBinaryAsm(asmResult: string, filters: ParseFiltersAndOutputOptions): ParsedAsmResult {
+        return super.processBinaryAsm(this.fixupAsm(asmResult), filters);
+    }
+}
diff --git a/lib/parsers/asm-parser.ts b/lib/parsers/asm-parser.ts
index 70034d264..30bd6e763 100644
--- a/lib/parsers/asm-parser.ts
+++ b/lib/parsers/asm-parser.ts
@@ -32,7 +32,7 @@ import {
     ParsedAsmResultLine,
 } from '../../types/asmresult/asmresult.interfaces.js';
 import {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
-import {assert} from '../assert.js';
+import {assert, unwrap} from '../assert.js';
 import {PropertyGetter} from '../properties.interfaces.js';
 import * as utils from '../utils.js';
 
@@ -60,6 +60,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
     definesFunction: RegExp;
     definesGlobal: RegExp;
     definesWeak: RegExp;
+    definesAlias: RegExp;
     indentedLabelDef: RegExp;
     assignmentDef: RegExp;
     directive: RegExp;
@@ -99,7 +100,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
         this.labelFindMips = /[$.A-Z_a-z][\w$.]*/g;
         this.mipsLabelDefinition = /^\$[\w$.]+:/;
         this.dataDefn =
-            /^\s*\.(ascii|asciz|[1248]?byte|dc(?:\.[abdlswx])?|dcb(?:\.[bdlswx])?|ds(?:\.[bdlpswx])?|double|dword|fill|float|half|hword|int|long|octa|quad|short|single|skip|space|string(?:8|16|32|64)?|value|word|xword|zero)/;
+            /^\s*\.(ascii|asciz|base64|[1248]?byte|dc(?:\.[abdlswx])?|dcb(?:\.[bdlswx])?|ds(?:\.[bdlpswx])?|double|dword|fill|float|half|hword|int|long|octa|quad|short|single|skip|space|string(?:8|16|32|64)?|value|word|xword|zero)/;
         this.fileFind = /^\s*\.(?:cv_)?file\s+(\d+)\s+"([^"]+)"(\s+"([^"]+)")?.*/;
         // Opcode expression here matches LLVM-style opcodes of the form `%blah = opcode`
         this.hasOpcodeRe = /^\s*(%[$.A-Z_a-z][\w$.]*\s*=\s*)?[A-Za-z]/;
@@ -109,11 +110,12 @@ export class AsmParser extends AsmRegex implements IAsmParser {
         this.definesFunction = /^\s*\.(type.*,\s*[#%@]function|proc\s+[.A-Z_a-z][\w$.]*:.*)$/;
         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.definesAlias = /^\s*\.set\s*([.A-Z_a-z][\w$.]*\s*),\s*\.\s*(\+\s*0)?$/;
         this.indentedLabelDef = /^\s*([$.A-Z_a-z][\w$.]*):/;
         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
+        // 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
         this.startAppBlock = /^#APP.*$/;
         this.endAppBlock = /^#NO_APP.*$/;
         this.startAsmNesting = /^# Begin ASM.*$/;
@@ -142,8 +144,8 @@ export class AsmParser extends AsmRegex implements IAsmParser {
             this.lineRe = /^(\/[^:]+):(?<line>\d+).*/;
         }
 
-        // labelRe is made very greedy as it's also used with demangled objdump
-        // output (eg. it can have c++ template with <>).
+        // labelRe is made very greedy as it's also used with demangled objdump output (eg. it can have c++ template
+        // with <>).
         this.labelRe = /^([\da-f]+)\s+<(.+)>:$/;
         this.destRe = /\s([\da-f]+)\s+<([^+>]+)(\+0x[\da-f]+)?>$/;
         this.commentRe = /[#;]/;
@@ -165,11 +167,11 @@ export class AsmParser extends AsmRegex implements IAsmParser {
         this.blockComments = /^[\t ]*\/\*(\*(?!\/)|[^*])*\*\/\s*/gm;
     }
 
-    checkVLIWpacket(line: string, inVLIWpacket: boolean) {
+    checkVLIWpacket(_line: string, inVLIWpacket: boolean) {
         return inVLIWpacket;
     }
 
-    hasOpcode(line: string, inNvccCode: boolean = false, inVLIWpacket: boolean = false) {
+    hasOpcode(line: string, inNvccCode: boolean = false, _inVLIWpacket: boolean = false) {
         // Remove any leading label definition...
         const match = line.match(this.labelDef);
         if (match) {
@@ -182,19 +184,25 @@ export class AsmParser extends AsmRegex implements IAsmParser {
         // Detect assignment, that's not an opcode...
         if (this.assignmentDef.test(line)) return false;
         if (inNvccCode) {
-            return !!this.hasNvccOpcodeRe.test(line);
+            return this.hasNvccOpcodeRe.test(line);
         }
-        return !!this.hasOpcodeRe.test(line);
+        return this.hasOpcodeRe.test(line);
     }
 
     labelFindFor(asmLines: string[]) {
-        const isMips = _.any(asmLines, line => !!this.mipsLabelDefinition.test(line));
+        const isMips = _.any(asmLines, line => this.mipsLabelDefinition.test(line));
         return isMips ? this.labelFindMips : this.labelFindNonMips;
     }
 
-    findUsedLabels(asmLines: string[], filterDirectives?: boolean) {
-        const labelsUsed: Record<string, boolean> = {};
-        const weakUsages: Record<string, Array<string>> = {};
+    findUsedLabels(asmLines: string[], filterDirectives?: boolean): Set<string> {
+        const labelsUsed: Set<string> = new Set();
+        const weakUsages: Map<string, Set<string>> = new Map();
+
+        function markWeak(fromLabel: string, toLabel: string) {
+            if (!weakUsages.has(fromLabel)) weakUsages.set(fromLabel, new Set());
+            unwrap(weakUsages.get(fromLabel)).add(toLabel);
+        }
+
         const labelFind = this.labelFindFor(asmLines);
         // The current label set is the set of labels all pointing at the current code, so:
         // foo:
@@ -209,18 +217,17 @@ export class AsmParser extends AsmRegex implements IAsmParser {
         let inFunction = false;
         let inNvccCode = false;
         let inVLIWpacket = false;
+        let definingAlias: string | undefined;
 
-        // Scan through looking for definite label usages (ones used by opcodes),
-        // and ones that are weakly used: that is, their use is conditional on another label.
-        // For example:
+        // Scan through looking for definite label usages (ones used by opcodes), and ones that are weakly used: that
+        // is, their use is conditional on another label. For example:
         // .foo: .string "moo"
         // .baz: .quad .foo
         //       mov eax, .baz
         // In this case, the '.baz' is used by an opcode, and so is strongly used.
         // The '.foo' is weakly used by .baz.
-        // Also, if we have random data definitions within a block of a function (between
-        // cfi_startproc and cfi_endproc), we assume they are strong usages. This covers things
-        // like jump tables embedded in ARM code.
+        // Also, if we have random data definitions within a block of a function (between cfi_startproc and
+        // cfi_endproc), we assume they are strong usages. This covers things like jump tables embedded in ARM code.
         // See https://github.com/compiler-explorer/compiler-explorer/issues/2788
         for (let line of asmLines) {
             if (this.startAppBlock.test(line.trim()) || this.startAsmNesting.test(line.trim())) {
@@ -244,14 +251,26 @@ export class AsmParser extends AsmRegex implements IAsmParser {
                 if (inLabelGroup) currentLabelSet.push(match[1]);
                 else currentLabelSet = [match[1]];
                 inLabelGroup = true;
+                if (definingAlias) {
+                    // If we're defining an alias, then any labels in this group are weakly used by the alias.
+                    markWeak(definingAlias, match[1]);
+                }
             } else {
-                inLabelGroup = false;
+                if (inLabelGroup) {
+                    inLabelGroup = false;
+                    // Once we exit the label group after an alias, we're no longer defining an alias.
+                    definingAlias = undefined;
+                }
             }
             match = line.match(this.definesGlobal);
             if (!match) match = line.match(this.definesWeak);
             if (!match) match = line.match(this.cudaBeginDef);
-            if (match) {
-                labelsUsed[match[1]] = true;
+            if (match) labelsUsed.add(match[1]);
+
+            const definesAlias = line.match(this.definesAlias);
+            if (definesAlias) {
+                // We are defining an alias for match[1]; so the next label definition is the _same_ as this.
+                definingAlias = definesAlias[1];
             }
 
             const definesFunction = line.match(this.definesFunction);
@@ -262,46 +281,37 @@ export class AsmParser extends AsmRegex implements IAsmParser {
 
             if (!filterDirectives || this.hasOpcode(line, inNvccCode, inVLIWpacket) || definesFunction) {
                 // Only count a label as used if it's used by an opcode, or else we're not filtering directives.
-                for (const label of match) labelsUsed[label] = true;
+                for (const label of match) labelsUsed.add(label);
             } else {
                 // If we have a current label, then any subsequent opcode or data definition's labels are referred to
                 // weakly by that label.
-                const isDataDefinition = !!this.dataDefn.test(line);
+                const isDataDefinition = this.dataDefn.test(line);
                 const isOpcode = this.hasOpcode(line, inNvccCode, inVLIWpacket);
                 if (isDataDefinition || isOpcode) {
-                    for (const currentLabel of currentLabelSet) {
-                        if (inFunction && isDataDefinition) {
-                            // Data definitions in the middle of code should be treated as if they were used strongly.
-                            for (const label of match) labelsUsed[label] = true;
-                        } else {
-                            if (!weakUsages[currentLabel]) weakUsages[currentLabel] = [];
-                            for (const label of match) weakUsages[currentLabel].push(label);
+                    if (inFunction && isDataDefinition) {
+                        // Data definitions in the middle of code should be treated as if they were used strongly.
+                        for (const label of match) labelsUsed.add(label);
+                    } else {
+                        for (const currentLabel of currentLabelSet) {
+                            for (const label of match) markWeak(currentLabel, label);
                         }
                     }
                 }
             }
         }
 
-        // Now follow the chains of used labels, marking any weak references they refer
-        // to as also used. We iteratively do this until either no new labels are found,
-        // or we hit a limit (only here to prevent a pathological case from hanging).
-        function markUsed(label: string) {
-            labelsUsed[label] = true;
-        }
-
-        const MaxLabelIterations = 10;
-        for (let iter = 0; iter < MaxLabelIterations; ++iter) {
-            const toAdd: string[] = [];
-            _.each(labelsUsed, (t, label) => {
-                // jshint ignore:line
-                _.each(weakUsages[label], (nowused: string) => {
-                    if (labelsUsed[nowused]) return;
-                    toAdd.push(nowused);
-                });
-            });
-            if (!toAdd) break;
-            _.each(toAdd, markUsed);
-        }
+        // Now follow the chains of used labels, marking any weak references they refer to as also used. We recursively
+        // follow the newly-strong references along the path until we hit something that's already marked as used.
+        const recurseMarkUsed = (label: string) => {
+            labelsUsed.add(label);
+            const usages = weakUsages.get(label);
+            if (!usages) return;
+            for (const nowUsed of usages) {
+                if (!labelsUsed.has(nowUsed)) recurseMarkUsed(nowUsed);
+            }
+        };
+        // Iterate over a copy of the initial used labels, as the set will be modified during iteration.
+        for (const label of new Set(labelsUsed)) recurseMarkUsed(label);
         return labelsUsed;
     }
 
@@ -396,7 +406,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
                     context.source = {
                         file: file,
                         line: sourceLine,
-                        mainsource: !!this.stdInLooking.test(file),
+                        mainsource: this.stdInLooking.test(file),
                     };
                 } else {
                     context.source = {
@@ -429,7 +439,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
                         context.source = {
                             file: file,
                             line: sourceLine,
-                            mainsource: !!this.stdInLooking.test(file),
+                            mainsource: this.stdInLooking.test(file),
                         };
                     } else {
                         context.source = {
@@ -473,7 +483,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
                 context.source = {
                     file: file,
                     line: sourceLine,
-                    mainsource: !!this.stdInLooking.test(file),
+                    mainsource: this.stdInLooking.test(file),
                 };
             } else {
                 context.source = {
@@ -618,16 +628,17 @@ export class AsmParser extends AsmRegex implements IAsmParser {
             if (match) {
                 // It's a label definition.
 
-                // 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.
-                // As a special case, consider assignments of the form "symbol = ." to be labels.
+                // 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. As a special case, consider
+                // assignments of the form "symbol = ." to be labels.
                 if (
-                    labelsUsed[match[1]] === undefined &&
+                    !labelsUsed.has(match[1]) &&
                     match[0] === line &&
                     (match[2] === undefined || match[2].trim() === '.')
                 ) {
                     // It's an unused label.
                     if (filters.labels) {
+                        context.prevLabel = '';
                         continue;
                     }
                 } else {
@@ -643,13 +654,14 @@ export class AsmParser extends AsmRegex implements IAsmParser {
             if (inNvccDef) {
                 if (this.cudaEndDef.test(line)) inNvccDef = false;
             } else if (!match && filters.directives) {
-                // Check for directives only if it wasn't a label; the regexp would
-                // otherwise misinterpret labels as directives.
+                // Check for directives only if it wasn't a label; the regexp would otherwise misinterpret labels as
+                // directives.
                 if (this.dataDefn.test(line) && context.prevLabel) {
                     // We're defining data that's being used somewhere.
                 } else {
-                    // .inst generates an opcode, so does not count as a directive
-                    if (this.directive.test(line) && !this.instOpcodeRe.test(line)) {
+                    // .inst generates an opcode, so does not count as a directive, nor does an alias definition that's
+                    // used.
+                    if (this.directive.test(line) && !this.instOpcodeRe.test(line) && !this.definesAlias.test(line)) {
                         continue;
                     }
                 }
@@ -763,9 +775,9 @@ export class AsmParser extends AsmRegex implements IAsmParser {
 
             if (!func || !this.isUserFunction(func)) continue;
 
-            // note: normally the source.file will be null if it's code from example.ext
-            //  but with filters.dontMaskFilenames it will be filled with the actual filename
-            //  instead we can test source.mainsource in that situation
+            // note: normally the source.file will be null if it's code from example.ext but with
+            //  filters.dontMaskFilenames it will be filled with the actual filename instead we can test
+            //  source.mainsource in that situation
             const isMainsource = source && (source.file === null || source.mainsource);
             if (filters.libraryCode && !isMainsource) {
                 if (mayRemovePreviousLabel && asm.length > 0) {
diff --git a/package-lock.json b/package-lock.json
index a94e349e9..2c4c3f965 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15438,10 +15438,11 @@
       "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g=="
     },
     "node_modules/undici": {
-      "version": "6.20.1",
-      "resolved": "https://registry.npmjs.org/undici/-/undici-6.20.1.tgz",
-      "integrity": "sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==",
+      "version": "6.21.1",
+      "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz",
+      "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=18.17"
       }
@@ -15614,10 +15615,11 @@
       "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
     },
     "node_modules/vite": {
-      "version": "5.4.10",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz",
-      "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
+      "version": "5.4.14",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz",
+      "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
         "postcss": "^8.4.43",
diff --git a/static/modes/asm-mode.ts b/static/modes/asm-mode.ts
index 1ddebb0ca..b91401164 100644
--- a/static/modes/asm-mode.ts
+++ b/static/modes/asm-mode.ts
@@ -41,14 +41,20 @@ function definition(): monaco.languages.IMonarchLanguage {
                 [/^<.*>$/, {token: 'annotation'}],
                 // inline comments
                 [/\/\*/, 'comment', '@comment'],
-                // Label definition
-                [/^[.a-zA-Z0-9_$?@].*:/, {token: 'type.identifier'}],
+                // Label definition (anything looking like a label, followed by anything that's not valid in a demangled
+                // identifier, until we get to a colon followed by any whitespace. This is to avoid finding the colon in
+                // a scoped (blah::foo) identifier.
+                [/^[.a-zA-Z0-9_$?@][^#;/]*:(?=\s)/, {token: 'type.identifier'}],
                 // Label definition (quoted)
                 [/^"([^"\\]|\\.)*":/, {token: 'type.identifier'}],
                 // Label definition (ARM style)
                 [/^\s*[|][^|]*[|]/, {token: 'type.identifier'}],
-                // Label definition (CL style)
-                [/^\s*[.a-zA-Z0-9_$|]*\s+(PROC|ENDP|DB|DD)/, {token: 'type.identifier', next: '@rest'}],
+                // Label definition (CL style). This is pretty hideous: we essentially take anything that ends in spaces
+                // followed by a definition (PROC, ENDP etc) and assume it's a label. That means we have to use
+                // backtracking and then a lookahead to ensure we don't consume the definition. As a nod to efficiency
+                // we assume the line has to start with a non-whitespace character before we go all back-tracky.
+                // See https://github.com/compiler-explorer/compiler-explorer/issues/1645 for examples.
+                [/^\S.*?(?=\s+(PROC|ENDP|D[BDWQ]))/, {token: 'type.identifier', next: '@rest'}],
                 // Constant definition
                 [/^[.a-zA-Z0-9_$?@][^=]*=/, {token: 'type.identifier'}],
                 // opcode
@@ -70,6 +76,8 @@ function definition(): monaco.languages.IMonarchLanguage {
                 [/@intelOperators/, 'annotation'],
                 // inline comments
                 [/\/\*/, 'comment', '@comment'],
+                // CL style post-label definition.
+                [/PROC|ENDP|D[BDWQ]/, 'keyword'],
 
                 // brackets
                 [/[{}<>()[\]]/, '@brackets'],
diff --git a/types/compiler.interfaces.ts b/types/compiler.interfaces.ts
index 23b548aab..99c90189f 100644
--- a/types/compiler.interfaces.ts
+++ b/types/compiler.interfaces.ts
@@ -33,6 +33,7 @@ export type Remote = {
     target: string;
     path: string;
     cmakePath: string;
+    basePath: string;
 };
 
 export type CompilerInfo = {


Test patch:
diff --git a/test/analysis-tests.ts b/test/analysis-tests.ts
index 7cc83b3cf..9dc22bd8b 100644
--- a/test/analysis-tests.ts
+++ b/test/analysis-tests.ts
@@ -49,6 +49,7 @@ describe('LLVM-mca tool definition', () => {
                 target: 'foo',
                 path: 'bar',
                 cmakePath: 'cmake',
+                basePath: '/',
             },
             lang: languages.analysis.id,
         });
@@ -92,6 +93,7 @@ describe('LLVM-mca tool definition', () => {
                 target: 'foo',
                 path: 'bar',
                 cmakePath: 'cmake',
+                basePath: '/',
             },
             lang: 'analysis',
             disabledFilters: 'labels,directives,debugCalls' as any,
diff --git a/test/android-tests.ts b/test/android-tests.ts
index 0873bb09b..f3bf43cdd 100644
--- a/test/android-tests.ts
+++ b/test/android-tests.ts
@@ -75,6 +75,14 @@ describe('dex2oat', () => {
             return testParseSmaliForLineNumbers(androidJavaInfo, 'test/android/parse-data');
         });
 
+        it("Classes with 'L' in the name compile correctly", () => {
+            return testParseSmaliClassWithL(androidJavaInfo, 'test/android/parse-data');
+        });
+
+        it('Inner classes are correctly read in .smali files', () => {
+            return testParseSmaliInnerClasses(androidJavaInfo, 'test/android/parse-data');
+        });
+
         it('Dex PCs are correctly extracted from classes.cfg', () => {
             return testParsePassDumpsForDexPcs(androidJavaInfo, 'test/android/parse-data');
         });
@@ -119,6 +127,14 @@ describe('dex2oat', () => {
             return testParseSmaliForLineNumbers(androidKotlinInfo, 'test/android/parse-data');
         });
 
+        it("Classes with 'L' in the name compile correctly", () => {
+            return testParseSmaliClassWithL(androidKotlinInfo, 'test/android/parse-data');
+        });
+
+        it('Inner classes are correctly read in .smali files', () => {
+            return testParseSmaliInnerClasses(androidKotlinInfo, 'test/android/parse-data');
+        });
+
         it('Dex PCs are correctly extracted from classes.cfg', () => {
             return testParsePassDumpsForDexPcs(androidKotlinInfo, 'test/android/parse-data');
         });
@@ -184,6 +200,48 @@ describe('dex2oat', () => {
         expect(dexPcsToLines).toHaveProperty('int Square.square(int)', {0: 14, 1: 14});
     }
 
+    async function testParseSmaliClassWithL(info: CompilerInfo, baseFolder: string) {
+        const compiler = new Dex2OatCompiler(info, env);
+        const rawSmaliText = fs.readFileSync(`${baseFolder}/ClassWithL.smali`, {encoding: 'utf8'});
+
+        const dexPcsToLines: Record<string, Record<number, number>> = {};
+        compiler.parseSmaliForLineNumbers(dexPcsToLines, rawSmaliText.split(/\n/));
+
+        expect(Object.keys(dexPcsToLines)).toHaveLength(2);
+        expect(dexPcsToLines).toHaveProperty('void LSLqLuLaLrLeL.<init>()', {0: 12, 3: 12});
+        expect(dexPcsToLines).toHaveProperty('int LSLqLuLaLrLeL.square(int)', {0: 14, 1: 14});
+    }
+
+    async function testParseSmaliInnerClasses(info: CompilerInfo, baseFolder: string) {
+        const compiler = new Dex2OatCompiler(info, env);
+        const rawSmaliText = fs.readFileSync(`${baseFolder}/InnerClassCases.smali`, {encoding: 'utf8'});
+
+        const dexPcsToLines: Record<string, Record<number, number>> = {};
+        compiler.parseSmaliForLineNumbers(dexPcsToLines, rawSmaliText.split(/\n/));
+
+        expect(Object.keys(dexPcsToLines)).toHaveLength(6);
+
+        // Self
+        expect(dexPcsToLines).toHaveProperty('void InnerClassCases.<init>()', {0: 1, 3: 1});
+
+        // Non-static
+        expect(dexPcsToLines).toHaveProperty('void InnerClassCases$InnerClass.<init>(InnerClassCases)', {
+            0: 2,
+            2: 2,
+            5: 2,
+        });
+        expect(dexPcsToLines).toHaveProperty('void InnerClassCases$FinalInnerClass.<init>(InnerClassCases)', {
+            0: 3,
+            2: 3,
+            5: 3,
+        });
+
+        // Static
+        expect(dexPcsToLines).toHaveProperty('void InnerClassCases$StaticInnerClass.<init>()', {0: 4, 3: 4});
+        expect(dexPcsToLines).toHaveProperty('void InnerClassCases$StaticFinalInnerClass.<init>()', {0: 5, 3: 5});
+        expect(dexPcsToLines).toHaveProperty('void InnerClassCases$LStartsWithL.<init>()', {0: 6, 3: 6});
+    }
+
     async function testParsePassDumpsForDexPcs(info: CompilerInfo, baseFolder: string) {
         const compiler = new Dex2OatCompiler(info, env);
         const rawCfgText = fs.readFileSync(`${baseFolder}/classes.cfg`, {encoding: 'utf8'});
diff --git a/test/android/parse-data/ClassWithL.smali b/test/android/parse-data/ClassWithL.smali
new file mode 100644
index 000000000..063eb502b
--- /dev/null
+++ b/test/android/parse-data/ClassWithL.smali
@@ -0,0 +1,27 @@
+.class LLSLqLuLaLrLeL;
+.super Ljava/lang/Object;
+.source "example.java"
+
+
+# direct methods
+.method constructor <init>()V
+    .registers 1
+
+    #@0
+    .line 12
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    #@3
+    return-void
+.end method
+
+.method static square(I)I
+    .registers 1
+
+    #@0
+    .line 14
+    mul-int/2addr p0, p0
+
+    #@1
+    return p0
+.end method
diff --git a/test/android/parse-data/InnerClassCases.smali b/test/android/parse-data/InnerClassCases.smali
new file mode 100644
index 000000000..2707544e2
--- /dev/null
+++ b/test/android/parse-data/InnerClassCases.smali
@@ -0,0 +1,187 @@
+.class final LInnerClassCases$FinalInnerClass;
+.super Ljava/lang/Object;
+.source "example.java"
+
+
+# annotations
+.annotation system Ldalvik/annotation/EnclosingClass;
+    value = LInnerClassCases;
+.end annotation
+
+.annotation system Ldalvik/annotation/InnerClass;
+    accessFlags = 0x10
+    name = "FinalInnerClass"
+.end annotation
+
+
+# instance fields
+.field final synthetic this$0:LInnerClassCases;
+
+
+# direct methods
+.method constructor <init>(LInnerClassCases;)V
+    .registers 2
+
+    #@0
+    .line 3
+    iput-object p1, p0, LInnerClassCases$FinalInnerClass;->this$0:LInnerClassCases;
+
+    #@2
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    #@5
+    return-void
+.end method
+
+
+.class LInnerClassCases$InnerClass;
+.super Ljava/lang/Object;
+.source "example.java"
+
+
+# annotations
+.annotation system Ldalvik/annotation/EnclosingClass;
+    value = LInnerClassCases;
+.end annotation
+
+.annotation system Ldalvik/annotation/InnerClass;
+    accessFlags = 0x0
+    name = "InnerClass"
+.end annotation
+
+
+# instance fields
+.field final synthetic this$0:LInnerClassCases;
+
+
+# direct methods
+.method constructor <init>(LInnerClassCases;)V
+    .registers 2
+
+    #@0
+    .line 2
+    iput-object p1, p0, LInnerClassCases$InnerClass;->this$0:LInnerClassCases;
+
+    #@2
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    #@5
+    return-void
+.end method
+
+
+.class final LInnerClassCases$LStartsWithL;
+.super Ljava/lang/Object;
+.source "example.java"
+
+
+# annotations
+.annotation system Ldalvik/annotation/EnclosingClass;
+    value = LInnerClassCases;
+.end annotation
+
+.annotation system Ldalvik/annotation/InnerClass;
+    accessFlags = 0x18
+    name = "LStartsWithL"
+.end annotation
+
+
+# direct methods
+.method constructor <init>()V
+    .registers 1
+
+    #@0
+    .line 6
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    #@3
+    return-void
+.end method
+
+
+.class final LInnerClassCases$StaticFinalInnerClass;
+.super Ljava/lang/Object;
+.source "example.java"
+
+
+# annotations
+.annotation system Ldalvik/annotation/EnclosingClass;
+    value = LInnerClassCases;
+.end annotation
+
+.annotation system Ldalvik/annotation/InnerClass;
+    accessFlags = 0x18
+    name = "StaticFinalInnerClass"
+.end annotation
+
+
+# direct methods
+.method constructor <init>()V
+    .registers 1
+
+    #@0
+    .line 5
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    #@3
+    return-void
+.end method
+
+
+.class LInnerClassCases$StaticInnerClass;
+.super Ljava/lang/Object;
+.source "example.java"
+
+
+# annotations
+.annotation system Ldalvik/annotation/EnclosingClass;
+    value = LInnerClassCases;
+.end annotation
+
+.annotation system Ldalvik/annotation/InnerClass;
+    accessFlags = 0x8
+    name = "StaticInnerClass"
+.end annotation
+
+
+# direct methods
+.method constructor <init>()V
+    .registers 1
+
+    #@0
+    .line 4
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    #@3
+    return-void
+.end method
+
+
+.class LInnerClassCases;
+.super Ljava/lang/Object;
+.source "example.java"
+
+
+# annotations
+.annotation system Ldalvik/annotation/MemberClasses;
+    value = {
+        LInnerClassCases$LStartsWithL;,
+        LInnerClassCases$StaticFinalInnerClass;,
+        LInnerClassCases$StaticInnerClass;,
+        LInnerClassCases$FinalInnerClass;,
+        LInnerClassCases$InnerClass;
+    }
+.end annotation
+
+
+# direct methods
+.method constructor <init>()V
+    .registers 1
+
+    #@0
+    .line 1
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    #@3
+    return-void
+.end method
diff --git a/test/base-compiler-tests.ts b/test/base-compiler-tests.ts
index a54c865e8..91690adcf 100644
--- a/test/base-compiler-tests.ts
+++ b/test/base-compiler-tests.ts
@@ -60,6 +60,7 @@ describe('Basic compiler invariants', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: 'c++',
         ldPath: [],
@@ -119,6 +120,7 @@ describe('Compiler execution', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: 'c++',
         ldPath: [],
@@ -132,6 +134,7 @@ describe('Compiler execution', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: 'c++',
         ldPath: [],
@@ -144,6 +147,7 @@ describe('Compiler execution', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: 'c++',
         ldPath: [],
@@ -154,6 +158,7 @@ describe('Compiler execution', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: 'c++',
         ldPath: [],
@@ -748,6 +753,7 @@ describe('getDefaultExecOptions', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: 'c++',
         ldPath: [],
@@ -818,6 +824,7 @@ describe('Rust overrides', () => {
             target: '',
             path: '',
             cmakePath: '',
+            basePath: '/',
         },
         semver: 'nightly',
         lang: 'rust',
diff --git a/test/compiler-finder-tests.ts b/test/compiler-finder-tests.ts
index 88522c200..6774327b6 100644
--- a/test/compiler-finder-tests.ts
+++ b/test/compiler-finder-tests.ts
@@ -121,72 +121,36 @@ describe('Compiler-finder', () => {
     });
 
     it('should not hang for undefined groups (Bug #860)', async () => {
-        const finder = new CompilerFinder(
-            {} as any,
-            compilerProps,
-            properties.fakeProps({}),
-            {} as any,
-            optionsHandler,
-        );
+        const finder = new CompilerFinder({} as any, compilerProps, {} as any, optionsHandler);
         await expect(finder.getCompilers()).resolves.toHaveLength(1);
     });
 
     it('should behave properly if no options are provided at all', async () => {
-        const finder = new CompilerFinder(
-            {} as any,
-            noOptionsAtAllProps,
-            properties.fakeProps({}),
-            {} as any,
-            optionsHandler,
-        );
+        const finder = new CompilerFinder({} as any, noOptionsAtAllProps, {} as any, optionsHandler);
         const compilers = await finder.getCompilers();
         expect(compilers[0].options).toEqual('');
     });
 
     it('should behave properly if no base options are provided', async () => {
-        const finder = new CompilerFinder(
-            {} as any,
-            noBaseOptionsProps,
-            properties.fakeProps({}),
-            {} as any,
-            optionsHandler,
-        );
+        const finder = new CompilerFinder({} as any, noBaseOptionsProps, {} as any, optionsHandler);
         const compilers = await finder.getCompilers();
         expect(compilers[0].options).toEqual('bar');
     });
 
     it('should behave properly if only base options are provided', async () => {
-        const finder = new CompilerFinder(
-            {} as any,
-            onlyBaseOptionsProps,
-            properties.fakeProps({}),
-            {} as any,
-            optionsHandler,
-        );
+        const finder = new CompilerFinder({} as any, onlyBaseOptionsProps, {} as any, optionsHandler);
         const compilers = await finder.getCompilers();
         expect(compilers[0].options).toEqual('foo');
     });
 
     it('should behave properly if both options are provided', async () => {
-        const finder = new CompilerFinder(
-            {} as any,
-            bothOptionsProps,
-            properties.fakeProps({}),
-            {} as any,
-            optionsHandler,
-        );
+        const finder = new CompilerFinder({} as any, bothOptionsProps, {} as any, optionsHandler);
         const compilers = await finder.getCompilers();
         expect(compilers[0].options).toEqual('foo bar');
     });
 
     it('should be able to filter libraries', async () => {
-        const finder = new CompilerFinder(
-            {} as any,
-            libraryCompilerProps,
-            properties.fakeProps({}),
-            {} as any,
-            optionsHandler,
-        );
+        const finder = new CompilerFinder({} as any, libraryCompilerProps, {} as any, optionsHandler);
         const compilers = await finder.getCompilers();
         const libsArr = compilers[0].libsArr;
         expect(libsArr).toEqual(['fmt', 'catch2.2101']);
diff --git a/test/d-tests.ts b/test/d-tests.ts
index eba65cf65..f689bdcc0 100644
--- a/test/d-tests.ts
+++ b/test/d-tests.ts
@@ -42,6 +42,7 @@ describe('D', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: languages.d.id,
     };
diff --git a/test/filters-cases/bug-1799.asm b/test/filters-cases/bug-1799.asm
new file mode 100644
index 000000000..5dfd6a17b
--- /dev/null
+++ b/test/filters-cases/bug-1799.asm
@@ -0,0 +1,120 @@
+  .cpu arm7tdmi
+  .eabi_attribute 20, 1
+  .eabi_attribute 21, 1
+  .eabi_attribute 23, 3
+  .eabi_attribute 24, 1
+  .eabi_attribute 25, 1
+  .eabi_attribute 26, 1
+  .eabi_attribute 30, 2
+  .eabi_attribute 34, 0
+  .eabi_attribute 18, 4
+  .file "example.cpp"
+  .text
+.Ltext0:
+  .cfi_sections .debug_frame
+  .align 2
+  .global DaysInMonth2()
+  .arch armv4t
+  .syntax unified
+  .arm
+  .fpu softvfp
+  .type DaysInMonth2(), %function
+DaysInMonth2():
+  .fnstart
+.LFB2:
+  .file 1 "/app/example.cpp"
+  .loc 1 22 20 view -0
+  .cfi_startproc
+  .loc 1 22 22 view .LVU1
+  .loc 1 22 40 is_stmt 0 view .LVU2
+  ldr r3, .L8
+  ldr r3, [r3]
+  ldr r2, .L8+4
+.LBB8:
+  .loc 1 13 18 view .LVU3
+  cmp r3, #1
+.LBE8:
+  .loc 1 22 40 view .LVU4
+  ldr r2, [r2]
+.LVL0:
+.LBB13:
+.LBI8:
+  .loc 1 10 15 is_stmt 1 view .LVU5
+  .loc 1 13 3 view .LVU6
+  .loc 1 13 18 is_stmt 0 view .LVU7
+  beq .L7
+.L2:
+  .loc 1 17 3 is_stmt 1 view .LVU8
+  .loc 1 17 23 is_stmt 0 view .LVU9
+  ldr r2, .L8+8
+.LVL1:
+  .loc 1 17 23 view .LVU10
+  ldr r0, [r2, r3, lsl #2]
+  bx lr
+.LVL2:
+.L7:
+.LBB10:
+.LBI10:
+  .loc 1 1 16 is_stmt 1 view .LVU11
+  .loc 1 4 3 view .LVU12
+  .loc 1 4 26 is_stmt 0 view .LVU13
+  tst r2, #3
+  bne .L2
+  .loc 1 4 36 view .LVU14
+  ldr r1, .L8+12
+  smull ip, r0, r1, r2
+  asr r1, r2, #31
+  rsb r1, r1, r0, asr #3
+  add r1, r1, r1, lsl #2
+  add r1, r1, r1, lsl #2
+  .loc 1 4 26 view .LVU15
+  cmp r2, r1
+  bne .L5
+  .loc 1 4 47 view .LVU16
+  tst r2, #15
+  bne .L2
+.L5:
+  .loc 1 4 47 view .LVU17
+.LBE10:
+  .loc 1 14 12 view .LVU18
+  mov r0, #29
+.LVL3:
+  .loc 1 14 12 view .LVU19
+.LBE13:
+  .loc 1 22 48 view .LVU20
+  bx lr
+  .align 2
+.L8:
+  .word b
+  .word a
+  .word .LANCHOR0
+  .word 1374389535
+  .cfi_endproc
+.LFE2:
+  .cantunwind
+  .fnend
+  .size DaysInMonth2(), .-DaysInMonth2()
+  .section .rodata
+  .align 2
+  .set .LANCHOR0,. + 0
+  .type sg_days, %object
+  .size sg_days, 48
+sg_days:
+  .word 31
+  .word 28
+  .word 31
+  .word 30
+  .word 31
+  .word 30
+  .word 31
+  .word 31
+  .word 30
+  .word 31
+  .word 30
+  .word 31
+  .text
+.Letext0:
+  .section .debug_info,"",%progbits
+.Ldebug_info0:
+  .4byte 0x135
+  .2byte 0x4
diff --git a/test/filters-cases/bug-1799.asm.binary.directives.labels.comments.json b/test/filters-cases/bug-1799.asm.binary.directives.labels.comments.json
new file mode 100644
index 000000000..720205208
--- /dev/null
+++ b/test/filters-cases/bug-1799.asm.binary.directives.labels.comments.json
@@ -0,0 +1,4 @@
+{
+  "asm": [],
+  "labelDefinitions": {}
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-1799.asm.directives.comments.json b/test/filters-cases/bug-1799.asm.directives.comments.json
new file mode 100644
index 000000000..78bf6d297
--- /dev/null
+++ b/test/filters-cases/bug-1799.asm.directives.comments.json
@@ -0,0 +1,482 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Ltext0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "DaysInMonth2():"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LFB2:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, .L8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, [r3]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, .L8+4"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB8:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  cmp r3, #1"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE8:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, [r2]"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB13:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBI8:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L7",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  beq .L7"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L2:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r2, .L8+8"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL1:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r0, [r2, r3, lsl #2]"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL2:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L7:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB10:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBI10:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #3"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  ldr r1, .L8+12"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  smull ip, r0, r1, r2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  asr r1, r2, #31"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  rsb r1, r1, r0, asr #3"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  cmp r2, r1"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L5",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L5"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #15"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L5:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE10:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 12,
+        "file": null,
+        "line": 14
+      },
+      "text": "  mov r0, #29"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL3:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE13:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 48,
+        "file": null,
+        "line": 22
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word b"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word .LANCHOR0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 1374389535"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LFE2:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .set .LANCHOR0,. + 0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "sg_days:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 28"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Letext0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Ldebug_info0:"
+    }
+  ],
+  "labelDefinitions": {
+    ".L2": 15,
+    ".L5": 36,
+    ".L7": 21,
+    ".L8": 42,
+    "sg_days": 49
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-1799.asm.directives.json b/test/filters-cases/bug-1799.asm.directives.json
new file mode 100644
index 000000000..78bf6d297
--- /dev/null
+++ b/test/filters-cases/bug-1799.asm.directives.json
@@ -0,0 +1,482 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Ltext0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "DaysInMonth2():"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LFB2:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, .L8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, [r3]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, .L8+4"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB8:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  cmp r3, #1"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE8:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, [r2]"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB13:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBI8:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L7",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  beq .L7"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L2:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r2, .L8+8"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL1:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r0, [r2, r3, lsl #2]"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL2:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L7:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB10:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBI10:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #3"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  ldr r1, .L8+12"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  smull ip, r0, r1, r2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  asr r1, r2, #31"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  rsb r1, r1, r0, asr #3"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  cmp r2, r1"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L5",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L5"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #15"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L5:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE10:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 12,
+        "file": null,
+        "line": 14
+      },
+      "text": "  mov r0, #29"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL3:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE13:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 48,
+        "file": null,
+        "line": 22
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word b"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word .LANCHOR0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 1374389535"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LFE2:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .set .LANCHOR0,. + 0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "sg_days:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 28"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Letext0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Ldebug_info0:"
+    }
+  ],
+  "labelDefinitions": {
+    ".L2": 15,
+    ".L5": 36,
+    ".L7": 21,
+    ".L8": 42,
+    "sg_days": 49
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-1799.asm.directives.labels.comments.json b/test/filters-cases/bug-1799.asm.directives.labels.comments.json
new file mode 100644
index 000000000..e2edcaeda
--- /dev/null
+++ b/test/filters-cases/bug-1799.asm.directives.labels.comments.json
@@ -0,0 +1,397 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": "DaysInMonth2():"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, .L8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, [r3]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, .L8+4"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  cmp r3, #1"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, [r2]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L7",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  beq .L7"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L2:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r2, .L8+8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r0, [r2, r3, lsl #2]"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L7:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #3"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  ldr r1, .L8+12"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  smull ip, r0, r1, r2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  asr r1, r2, #31"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  rsb r1, r1, r0, asr #3"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  cmp r2, r1"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L5",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L5"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #15"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L5:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 12,
+        "file": null,
+        "line": 14
+      },
+      "text": "  mov r0, #29"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 48,
+        "file": null,
+        "line": 22
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word b"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word .LANCHOR0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 1374389535"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .set .LANCHOR0,. + 0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "sg_days:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 28"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    }
+  ],
+  "labelDefinitions": {
+    ".L2": 8,
+    ".L5": 25,
+    ".L7": 12,
+    ".L8": 28,
+    "sg_days": 34
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-1799.asm.directives.labels.comments.library.dontMaskFilenames.json b/test/filters-cases/bug-1799.asm.directives.labels.comments.library.dontMaskFilenames.json
new file mode 100644
index 000000000..72d9157e2
--- /dev/null
+++ b/test/filters-cases/bug-1799.asm.directives.labels.comments.library.dontMaskFilenames.json
@@ -0,0 +1,420 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": "DaysInMonth2():"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": "example.cpp",
+        "line": 22,
+        "mainsource": true
+      },
+      "text": "  ldr r3, .L8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": "example.cpp",
+        "line": 22,
+        "mainsource": true
+      },
+      "text": "  ldr r3, [r3]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": "example.cpp",
+        "line": 22,
+        "mainsource": true
+      },
+      "text": "  ldr r2, .L8+4"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 18,
+        "file": "example.cpp",
+        "line": 13,
+        "mainsource": true
+      },
+      "text": "  cmp r3, #1"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": "example.cpp",
+        "line": 22,
+        "mainsource": true
+      },
+      "text": "  ldr r2, [r2]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L7",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 18,
+        "file": "example.cpp",
+        "line": 13,
+        "mainsource": true
+      },
+      "text": "  beq .L7"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L2:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 23,
+        "file": "example.cpp",
+        "line": 17,
+        "mainsource": true
+      },
+      "text": "  ldr r2, .L8+8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": "example.cpp",
+        "line": 17,
+        "mainsource": true
+      },
+      "text": "  ldr r0, [r2, r3, lsl #2]"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": "example.cpp",
+        "line": 17,
+        "mainsource": true
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L7:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  tst r2, #3"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 36,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  ldr r1, .L8+12"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  smull ip, r0, r1, r2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  asr r1, r2, #31"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  rsb r1, r1, r0, asr #3"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  cmp r2, r1"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L5",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  bne .L5"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 47,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  tst r2, #15"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 47,
+        "file": "example.cpp",
+        "line": 4,
+        "mainsource": true
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L5:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 12,
+        "file": "example.cpp",
+        "line": 14,
+        "mainsource": true
+      },
+      "text": "  mov r0, #29"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 48,
+        "file": "example.cpp",
+        "line": 22,
+        "mainsource": true
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word b"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word .LANCHOR0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 1374389535"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .set .LANCHOR0,. + 0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "sg_days:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 28"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    }
+  ],
+  "labelDefinitions": {
+    ".L2": 8,
+    ".L5": 25,
+    ".L7": 12,
+    ".L8": 28,
+    "sg_days": 34
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-1799.asm.directives.labels.comments.library.json b/test/filters-cases/bug-1799.asm.directives.labels.comments.library.json
new file mode 100644
index 000000000..e2edcaeda
--- /dev/null
+++ b/test/filters-cases/bug-1799.asm.directives.labels.comments.library.json
@@ -0,0 +1,397 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": "DaysInMonth2():"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, .L8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, [r3]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, .L8+4"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  cmp r3, #1"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, [r2]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L7",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  beq .L7"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L2:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r2, .L8+8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r0, [r2, r3, lsl #2]"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L7:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #3"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  ldr r1, .L8+12"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  smull ip, r0, r1, r2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  asr r1, r2, #31"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  rsb r1, r1, r0, asr #3"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  cmp r2, r1"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L5",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L5"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #15"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L5:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 12,
+        "file": null,
+        "line": 14
+      },
+      "text": "  mov r0, #29"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 48,
+        "file": null,
+        "line": 22
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word b"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word .LANCHOR0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 1374389535"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .set .LANCHOR0,. + 0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "sg_days:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 28"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    }
+  ],
+  "labelDefinitions": {
+    ".L2": 8,
+    ".L5": 25,
+    ".L7": 12,
+    ".L8": 28,
+    "sg_days": 34
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-1799.asm.directives.labels.json b/test/filters-cases/bug-1799.asm.directives.labels.json
new file mode 100644
index 000000000..e2edcaeda
--- /dev/null
+++ b/test/filters-cases/bug-1799.asm.directives.labels.json
@@ -0,0 +1,397 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": "DaysInMonth2():"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, .L8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, [r3]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, .L8+4"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  cmp r3, #1"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, [r2]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L7",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  beq .L7"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L2:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r2, .L8+8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r0, [r2, r3, lsl #2]"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L7:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #3"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  ldr r1, .L8+12"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  smull ip, r0, r1, r2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  asr r1, r2, #31"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  rsb r1, r1, r0, asr #3"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  cmp r2, r1"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L5",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L5"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #15"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L5:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 12,
+        "file": null,
+        "line": 14
+      },
+      "text": "  mov r0, #29"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 48,
+        "file": null,
+        "line": 22
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word b"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word .LANCHOR0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 1374389535"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .set .LANCHOR0,. + 0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "sg_days:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 28"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    }
+  ],
+  "labelDefinitions": {
+    ".L2": 8,
+    ".L5": 25,
+    ".L7": 12,
+    ".L8": 28,
+    "sg_days": 34
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-1799.asm.directives.library.json b/test/filters-cases/bug-1799.asm.directives.library.json
new file mode 100644
index 000000000..78bf6d297
--- /dev/null
+++ b/test/filters-cases/bug-1799.asm.directives.library.json
@@ -0,0 +1,482 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Ltext0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "DaysInMonth2():"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LFB2:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, .L8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, [r3]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, .L8+4"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB8:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  cmp r3, #1"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE8:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, [r2]"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB13:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBI8:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L7",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  beq .L7"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L2:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r2, .L8+8"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL1:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r0, [r2, r3, lsl #2]"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL2:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L7:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB10:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBI10:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #3"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  ldr r1, .L8+12"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  smull ip, r0, r1, r2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  asr r1, r2, #31"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  rsb r1, r1, r0, asr #3"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  cmp r2, r1"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L5",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L5"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #15"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L5:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE10:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 12,
+        "file": null,
+        "line": 14
+      },
+      "text": "  mov r0, #29"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL3:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE13:"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 48,
+        "file": null,
+        "line": 22
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word b"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word .LANCHOR0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 1374389535"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LFE2:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .set .LANCHOR0,. + 0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "sg_days:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 28"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Letext0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Ldebug_info0:"
+    }
+  ],
+  "labelDefinitions": {
+    ".L2": 15,
+    ".L5": 36,
+    ".L7": 21,
+    ".L8": 42,
+    "sg_days": 49
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-1799.asm.none.json b/test/filters-cases/bug-1799.asm.none.json
new file mode 100644
index 000000000..48b044e8a
--- /dev/null
+++ b/test/filters-cases/bug-1799.asm.none.json
@@ -0,0 +1,783 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .cpu arm7tdmi"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .eabi_attribute 20, 1"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .eabi_attribute 21, 1"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .eabi_attribute 23, 3"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .eabi_attribute 24, 1"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .eabi_attribute 25, 1"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .eabi_attribute 26, 1"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .eabi_attribute 30, 2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .eabi_attribute 34, 0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .eabi_attribute 18, 4"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .file \"example.cpp\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .text"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Ltext0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .cfi_sections .debug_frame"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .align 2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .global DaysInMonth2()"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .arch armv4t"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .syntax unified"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .arm"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .fpu softvfp"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .type DaysInMonth2(), %function"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "DaysInMonth2():"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .fnstart"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LFB2:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .file 1 \"/app/example.cpp\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 22 20 view -0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .cfi_startproc"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 22 22 view .LVU1"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 22 40 is_stmt 0 view .LVU2"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, .L8"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r3, [r3]"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, .L8+4"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 13 18 view .LVU3"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  cmp r3, #1"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 22 40 view .LVU4"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 40,
+        "file": null,
+        "line": 22
+      },
+      "text": "  ldr r2, [r2]"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB13:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBI8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 10 15 is_stmt 1 view .LVU5"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 13 3 view .LVU6"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 13 18 is_stmt 0 view .LVU7"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L7",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 18,
+        "file": null,
+        "line": 13
+      },
+      "text": "  beq .L7"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L2:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 17 3 is_stmt 1 view .LVU8"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 17 23 is_stmt 0 view .LVU9"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r2, .L8+8"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL1:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 17 23 view .LVU10"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  ldr r0, [r2, r3, lsl #2]"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 23,
+        "file": null,
+        "line": 17
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL2:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L7:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBB10:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBI10:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 1 16 is_stmt 1 view .LVU11"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 4 3 view .LVU12"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 4 26 is_stmt 0 view .LVU13"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #3"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 4 36 view .LVU14"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L8",
+          "range": {
+            "endCol": 14,
+            "startCol": 11
+          }
+        }
+      ],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  ldr r1, .L8+12"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  smull ip, r0, r1, r2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  asr r1, r2, #31"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  rsb r1, r1, r0, asr #3"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 36,
+        "file": null,
+        "line": 4
+      },
+      "text": "  add r1, r1, r1, lsl #2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 4 26 view .LVU15"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  cmp r2, r1"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L5",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 26,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L5"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 4 47 view .LVU16"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  tst r2, #15"
+    },
+    {
+      "labels": [
+        {
+          "name": ".L2",
+          "range": {
+            "endCol": 10,
+            "startCol": 7
+          }
+        }
+      ],
+      "source": {
+        "column": 47,
+        "file": null,
+        "line": 4
+      },
+      "text": "  bne .L2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L5:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 4 47 view .LVU17"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE10:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 14 12 view .LVU18"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 12,
+        "file": null,
+        "line": 14
+      },
+      "text": "  mov r0, #29"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LVL3:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 14 12 view .LVU19"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LBE13:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .loc 1 22 48 view .LVU20"
+    },
+    {
+      "labels": [],
+      "source": {
+        "column": 48,
+        "file": null,
+        "line": 22
+      },
+      "text": "  bx lr"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .align 2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".L8:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word b"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word .LANCHOR0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 1374389535"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .cfi_endproc"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LFE2:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .cantunwind"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .fnend"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .size DaysInMonth2(), .-DaysInMonth2()"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .section .rodata"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .align 2"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .set .LANCHOR0,. + 0"
+    },
+    {
+      "labels": [
+        {
+          "name": "sg_days",
+          "range": {
+            "endCol": 16,
+            "startCol": 9
+          }
+        }
+      ],
+      "source": null,
+      "text": "  .type sg_days, %object"
+    },
+    {
+      "labels": [
+        {
+          "name": "sg_days",
+          "range": {
+            "endCol": 16,
+            "startCol": 9
+          }
+        }
+      ],
+      "source": null,
+      "text": "  .size sg_days, 48"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "sg_days:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 28"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 30"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .word 31"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .text"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Letext0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .section .debug_info,\"\",%progbits"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".Ldebug_info0:"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .4byte 0x135"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "  .2byte 0x4"
+    }
+  ],
+  "labelDefinitions": {
+    ".L2": 46,
+    ".L5": 76,
+    ".L7": 55,
+    ".L8": 87,
+    "sg_days": 102
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-2788.asm.directives.labels.comments.json b/test/filters-cases/bug-2788.asm.directives.labels.comments.json
index d55d27c55..368d58d81 100644
--- a/test/filters-cases/bug-2788.asm.directives.labels.comments.json
+++ b/test/filters-cases/bug-2788.asm.directives.labels.comments.json
@@ -49,266 +49,6 @@
       },
       "text": "        b       .L7"
     },
-    {
-      "labels": [
-        {
-          "name": ".L8",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L8"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L6",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L6"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L5",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L5"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L3",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L3"
-    },
     {
       "labels": [],
       "source": null,
@@ -408,11 +148,11 @@
     }
   ],
   "labelDefinitions": {
-    ".L3": 30,
-    ".L5": 33,
-    ".L6": 36,
-    ".L7": 28,
-    ".L8": 26,
+    ".L3": 10,
+    ".L5": 13,
+    ".L6": 16,
+    ".L7": 8,
+    ".L8": 6,
     "_Z4revcc": 1
   }
 }
diff --git a/test/filters-cases/bug-2788.asm.directives.labels.comments.library.dontMaskFilenames.json b/test/filters-cases/bug-2788.asm.directives.labels.comments.library.dontMaskFilenames.json
index 0bde0dd09..8d4247207 100644
--- a/test/filters-cases/bug-2788.asm.directives.labels.comments.library.dontMaskFilenames.json
+++ b/test/filters-cases/bug-2788.asm.directives.labels.comments.library.dontMaskFilenames.json
@@ -53,266 +53,6 @@
       },
       "text": "        b       .L7"
     },
-    {
-      "labels": [
-        {
-          "name": ".L8",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L8"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L6",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L6"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L5",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L5"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L3",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L3"
-    },
     {
       "labels": [],
       "source": null,
@@ -420,11 +160,11 @@
     }
   ],
   "labelDefinitions": {
-    ".L3": 30,
-    ".L5": 33,
-    ".L6": 36,
-    ".L7": 28,
-    ".L8": 26,
+    ".L3": 10,
+    ".L5": 13,
+    ".L6": 16,
+    ".L7": 8,
+    ".L8": 6,
     "_Z4revcc": 1
   }
 }
diff --git a/test/filters-cases/bug-2788.asm.directives.labels.comments.library.json b/test/filters-cases/bug-2788.asm.directives.labels.comments.library.json
index d55d27c55..368d58d81 100644
--- a/test/filters-cases/bug-2788.asm.directives.labels.comments.library.json
+++ b/test/filters-cases/bug-2788.asm.directives.labels.comments.library.json
@@ -49,266 +49,6 @@
       },
       "text": "        b       .L7"
     },
-    {
-      "labels": [
-        {
-          "name": ".L8",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L8"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L6",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L6"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L5",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L5"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L3",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L3"
-    },
     {
       "labels": [],
       "source": null,
@@ -408,11 +148,11 @@
     }
   ],
   "labelDefinitions": {
-    ".L3": 30,
-    ".L5": 33,
-    ".L6": 36,
-    ".L7": 28,
-    ".L8": 26,
+    ".L3": 10,
+    ".L5": 13,
+    ".L6": 16,
+    ".L7": 8,
+    ".L8": 6,
     "_Z4revcc": 1
   }
 }
diff --git a/test/filters-cases/bug-2788.asm.directives.labels.json b/test/filters-cases/bug-2788.asm.directives.labels.json
index 47cd641a3..13b4bc14a 100644
--- a/test/filters-cases/bug-2788.asm.directives.labels.json
+++ b/test/filters-cases/bug-2788.asm.directives.labels.json
@@ -69,266 +69,6 @@
       },
       "text": "        b       .L7"
     },
-    {
-      "labels": [
-        {
-          "name": ".L8",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L8"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L6",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L6"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L5",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L5"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L7",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L7"
-    },
-    {
-      "labels": [
-        {
-          "name": ".L3",
-          "range": {
-            "endCol": 20,
-            "startCol": 17
-          }
-        }
-      ],
-      "source": null,
-      "text": "        .word   .L3"
-    },
     {
       "labels": [],
       "source": null,
@@ -428,11 +168,11 @@
     }
   ],
   "labelDefinitions": {
-    ".L3": 34,
-    ".L5": 37,
-    ".L6": 40,
-    ".L7": 32,
-    ".L8": 30,
+    ".L3": 14,
+    ".L5": 17,
+    ".L6": 20,
+    ".L7": 12,
+    ".L8": 10,
     "_Z4revcc": 1
   }
 }
diff --git a/test/filters-cases/bug-7280.asm b/test/filters-cases/bug-7280.asm
new file mode 100644
index 000000000..f6e5260cc
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm
@@ -0,0 +1,17 @@
+        .arch armv8-a
+        .file   "example.cpp"
+        .text
+        .global a
+        .section        .rodata
+        .align  3
+.LC0:
+        .string "a"
+        .base64 "AGIA"
+        .data
+        .align  3
+        .type   a, %object
+        .size   a, 8
+a:
+        .xword  .LC0
+        .ident  "GCC: (GNU) 15.0.1 20250115 (experimental)"
+        .section        .note.GNU-stack,"",@progbits
diff --git a/test/filters-cases/bug-7280.asm.binary.directives.labels.comments.json b/test/filters-cases/bug-7280.asm.binary.directives.labels.comments.json
new file mode 100644
index 000000000..720205208
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.binary.directives.labels.comments.json
@@ -0,0 +1,4 @@
+{
+  "asm": [],
+  "labelDefinitions": {}
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.comments.json b/test/filters-cases/bug-7280.asm.directives.comments.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.comments.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.json b/test/filters-cases/bug-7280.asm.directives.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.labels.comments.json b/test/filters-cases/bug-7280.asm.directives.labels.comments.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.labels.comments.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.labels.comments.library.dontMaskFilenames.json b/test/filters-cases/bug-7280.asm.directives.labels.comments.library.dontMaskFilenames.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.labels.comments.library.dontMaskFilenames.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.labels.comments.library.json b/test/filters-cases/bug-7280.asm.directives.labels.comments.library.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.labels.comments.library.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.labels.json b/test/filters-cases/bug-7280.asm.directives.labels.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.labels.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.library.json b/test/filters-cases/bug-7280.asm.directives.library.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.library.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.none.json b/test/filters-cases/bug-7280.asm.none.json
new file mode 100644
index 000000000..d3d3c00b6
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.none.json
@@ -0,0 +1,141 @@
+{
+  "asm": [
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 22,
+            "startCol": 21
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .arch armv8-a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .file   \"example.cpp\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .text"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 18,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .global a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .section        .rodata"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .align  3"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .data"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .align  3"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 18,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .type   a, %object"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 18,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .size   a, 8"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .ident  \"GCC: (GNU) 15.0.1 20250115 (experimental)\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .section        .note.GNU-stack,\"\",@progbits"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 7,
+    "a": 14
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/clang-hellow.asm.directives.labels.comments.json b/test/filters-cases/clang-hellow.asm.directives.labels.comments.json
index d380563f0..abbef4d05 100644
--- a/test/filters-cases/clang-hellow.asm.directives.labels.comments.json
+++ b/test/filters-cases/clang-hellow.asm.directives.labels.comments.json
@@ -131,16 +131,6 @@
       "source": null,
       "text": "        .long   .Lset0"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .short  2                       # DWARF Version"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .long   .Linfo_begin1           # Offset of Compilation Unit Info"
-    },
     {
       "labels": [],
       "source": null,
@@ -200,16 +190,6 @@
       "source": null,
       "text": "        .long   .Lset2"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .short  2                       # DWARF Version"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .long   .Linfo_begin1           # Offset of Compilation Unit Info"
-    },
     {
       "labels": [],
       "source": null,
@@ -237,9 +217,9 @@
   "labelDefinitions": {
     ".L.str": 12,
     ".Lset0": 16,
-    ".Lset1": 20,
-    ".Lset2": 25,
-    ".Lset3": 29,
+    ".Lset1": 18,
+    ".Lset2": 23,
+    ".Lset3": 25,
     "main": 1,
     "str": 14
   }
diff --git a/test/filters-cases/clang-hellow.asm.directives.labels.comments.library.dontMaskFilenames.json b/test/filters-cases/clang-hellow.asm.directives.labels.comments.library.dontMaskFilenames.json
index 2e490b579..4c199fc27 100644
--- a/test/filters-cases/clang-hellow.asm.directives.labels.comments.library.dontMaskFilenames.json
+++ b/test/filters-cases/clang-hellow.asm.directives.labels.comments.library.dontMaskFilenames.json
@@ -141,16 +141,6 @@
       "source": null,
       "text": "        .long   .Lset0"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .short  2                       # DWARF Version"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .long   .Linfo_begin1           # Offset of Compilation Unit Info"
-    },
     {
       "labels": [],
       "source": null,
@@ -210,16 +200,6 @@
       "source": null,
       "text": "        .long   .Lset2"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .short  2                       # DWARF Version"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .long   .Linfo_begin1           # Offset of Compilation Unit Info"
-    },
     {
       "labels": [],
       "source": null,
@@ -247,9 +227,9 @@
   "labelDefinitions": {
     ".L.str": 12,
     ".Lset0": 16,
-    ".Lset1": 20,
-    ".Lset2": 25,
-    ".Lset3": 29,
+    ".Lset1": 18,
+    ".Lset2": 23,
+    ".Lset3": 25,
     "main": 1,
     "str": 14
   }
diff --git a/test/filters-cases/clang-hellow.asm.directives.labels.comments.library.json b/test/filters-cases/clang-hellow.asm.directives.labels.comments.library.json
index d380563f0..abbef4d05 100644
--- a/test/filters-cases/clang-hellow.asm.directives.labels.comments.library.json
+++ b/test/filters-cases/clang-hellow.asm.directives.labels.comments.library.json
@@ -131,16 +131,6 @@
       "source": null,
       "text": "        .long   .Lset0"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .short  2                       # DWARF Version"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .long   .Linfo_begin1           # Offset of Compilation Unit Info"
-    },
     {
       "labels": [],
       "source": null,
@@ -200,16 +190,6 @@
       "source": null,
       "text": "        .long   .Lset2"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .short  2                       # DWARF Version"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .long   .Linfo_begin1           # Offset of Compilation Unit Info"
-    },
     {
       "labels": [],
       "source": null,
@@ -237,9 +217,9 @@
   "labelDefinitions": {
     ".L.str": 12,
     ".Lset0": 16,
-    ".Lset1": 20,
-    ".Lset2": 25,
-    ".Lset3": 29,
+    ".Lset1": 18,
+    ".Lset2": 23,
+    ".Lset3": 25,
     "main": 1,
     "str": 14
   }
diff --git a/test/filters-cases/clang-hellow.asm.directives.labels.json b/test/filters-cases/clang-hellow.asm.directives.labels.json
index 80a3db93e..20727eb53 100644
--- a/test/filters-cases/clang-hellow.asm.directives.labels.json
+++ b/test/filters-cases/clang-hellow.asm.directives.labels.json
@@ -136,16 +136,6 @@
       "source": null,
       "text": "        .long   .Lset0"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .short  2                       # DWARF Version"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .long   .Linfo_begin1           # Offset of Compilation Unit Info"
-    },
     {
       "labels": [],
       "source": null,
@@ -205,16 +195,6 @@
       "source": null,
       "text": "        .long   .Lset2"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .short  2                       # DWARF Version"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .long   .Linfo_begin1           # Offset of Compilation Unit Info"
-    },
     {
       "labels": [],
       "source": null,
@@ -242,9 +222,9 @@
   "labelDefinitions": {
     ".L.str": 13,
     ".Lset0": 17,
-    ".Lset1": 21,
-    ".Lset2": 26,
-    ".Lset3": 30,
+    ".Lset1": 19,
+    ".Lset2": 24,
+    ".Lset3": 26,
     "main": 1,
     "str": 15
   }
diff --git a/test/filters-cases/diab.asm.directives.labels.comments.json b/test/filters-cases/diab.asm.directives.labels.comments.json
index 591444908..4ea4a93b5 100644
--- a/test/filters-cases/diab.asm.directives.labels.comments.json
+++ b/test/filters-cases/diab.asm.directives.labels.comments.json
@@ -2417,31 +2417,6 @@
       "source": null,
       "text": "        .byte         0"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +1.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +2.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +3.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +4.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +5.0000000000000000000"
-    },
     {
       "labels": [],
       "source": null,
@@ -2559,14 +2534,14 @@
     }
   ],
   "labelDefinitions": {
-    ".L114": 280,
-    ".L115": 283,
-    ".L116": 286,
-    ".L117": 289,
-    ".L131": 292,
+    ".L114": 275,
+    ".L115": 278,
+    ".L116": 281,
+    ".L117": 284,
+    ".L131": 287,
     ".L158": 206,
-    ".L159": 295,
-    ".L160": 298,
+    ".L159": 290,
+    ".L160": 293,
     ".L42": 12,
     ".L44": 31,
     ".L45": 56,
@@ -2585,7 +2560,7 @@
     ".L64": 229,
     ".L65": 272,
     ".L66": 217,
-    ".L86": 301,
+    ".L86": 296,
     "main": 235
   }
 }
diff --git a/test/filters-cases/diab.asm.directives.labels.comments.library.dontMaskFilenames.json b/test/filters-cases/diab.asm.directives.labels.comments.library.dontMaskFilenames.json
index 591444908..4ea4a93b5 100644
--- a/test/filters-cases/diab.asm.directives.labels.comments.library.dontMaskFilenames.json
+++ b/test/filters-cases/diab.asm.directives.labels.comments.library.dontMaskFilenames.json
@@ -2417,31 +2417,6 @@
       "source": null,
       "text": "        .byte         0"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +1.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +2.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +3.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +4.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +5.0000000000000000000"
-    },
     {
       "labels": [],
       "source": null,
@@ -2559,14 +2534,14 @@
     }
   ],
   "labelDefinitions": {
-    ".L114": 280,
-    ".L115": 283,
-    ".L116": 286,
-    ".L117": 289,
-    ".L131": 292,
+    ".L114": 275,
+    ".L115": 278,
+    ".L116": 281,
+    ".L117": 284,
+    ".L131": 287,
     ".L158": 206,
-    ".L159": 295,
-    ".L160": 298,
+    ".L159": 290,
+    ".L160": 293,
     ".L42": 12,
     ".L44": 31,
     ".L45": 56,
@@ -2585,7 +2560,7 @@
     ".L64": 229,
     ".L65": 272,
     ".L66": 217,
-    ".L86": 301,
+    ".L86": 296,
     "main": 235
   }
 }
diff --git a/test/filters-cases/diab.asm.directives.labels.comments.library.json b/test/filters-cases/diab.asm.directives.labels.comments.library.json
index 591444908..4ea4a93b5 100644
--- a/test/filters-cases/diab.asm.directives.labels.comments.library.json
+++ b/test/filters-cases/diab.asm.directives.labels.comments.library.json
@@ -2417,31 +2417,6 @@
       "source": null,
       "text": "        .byte         0"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +1.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +2.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +3.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +4.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +5.0000000000000000000"
-    },
     {
       "labels": [],
       "source": null,
@@ -2559,14 +2534,14 @@
     }
   ],
   "labelDefinitions": {
-    ".L114": 280,
-    ".L115": 283,
-    ".L116": 286,
-    ".L117": 289,
-    ".L131": 292,
+    ".L114": 275,
+    ".L115": 278,
+    ".L116": 281,
+    ".L117": 284,
+    ".L131": 287,
     ".L158": 206,
-    ".L159": 295,
-    ".L160": 298,
+    ".L159": 290,
+    ".L160": 293,
     ".L42": 12,
     ".L44": 31,
     ".L45": 56,
@@ -2585,7 +2560,7 @@
     ".L64": 229,
     ".L65": 272,
     ".L66": 217,
-    ".L86": 301,
+    ".L86": 296,
     "main": 235
   }
 }
diff --git a/test/filters-cases/diab.asm.directives.labels.json b/test/filters-cases/diab.asm.directives.labels.json
index 2be6e32e9..0e0266ed1 100644
--- a/test/filters-cases/diab.asm.directives.labels.json
+++ b/test/filters-cases/diab.asm.directives.labels.json
@@ -2877,31 +2877,6 @@
       "source": null,
       "text": "        .byte         0"
     },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +1.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +2.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +3.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +4.0000000000000000000"
-    },
-    {
-      "labels": [],
-      "source": null,
-      "text": "        .double   +5.0000000000000000000"
-    },
     {
       "labels": [],
       "source": null,
@@ -3024,14 +2999,14 @@
     }
   ],
   "labelDefinitions": {
-    ".L114": 372,
-    ".L115": 375,
-    ".L116": 378,
-    ".L117": 381,
-    ".L131": 384,
+    ".L114": 367,
+    ".L115": 370,
+    ".L116": 373,
+    ".L117": 376,
+    ".L131": 379,
     ".L158": 273,
-    ".L159": 387,
-    ".L160": 390,
+    ".L159": 382,
+    ".L160": 385,
     ".L42": 27,
     ".L44": 46,
     ".L45": 83,
@@ -3050,7 +3025,7 @@
     ".L64": 296,
     ".L65": 364,
     ".L66": 284,
-    ".L86": 394,
+    ".L86": 389,
     "main": 313
   }
 }
diff --git a/test/golang-tests.ts b/test/golang-tests.ts
index dbae66a05..8ea277a49 100644
--- a/test/golang-tests.ts
+++ b/test/golang-tests.ts
@@ -41,6 +41,7 @@ const info = {
         target: 'foo',
         path: 'bar',
         cmakePath: 'cmake',
+        basePath: '/',
     },
     lang: languages.go.id,
 };
diff --git a/test/library-tests.ts b/test/library-tests.ts
index 401ce4bd8..62239b024 100644
--- a/test/library-tests.ts
+++ b/test/library-tests.ts
@@ -50,6 +50,7 @@ describe('Library directories (c++)', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: 'c++',
         ldPath: [],
@@ -223,6 +224,7 @@ describe('Library directories (fortran)', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: 'fortran',
         ldPath: [],
diff --git a/test/nim-tests.ts b/test/nim-tests.ts
index 823b2f39a..98ccffa0d 100644
--- a/test/nim-tests.ts
+++ b/test/nim-tests.ts
@@ -44,6 +44,7 @@ describe('Nim', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: languages.nim.id,
     };
diff --git a/test/odin-tests.ts b/test/odin-tests.ts
index 8e396eb99..8daeb3385 100644
--- a/test/odin-tests.ts
+++ b/test/odin-tests.ts
@@ -41,6 +41,7 @@ const info = {
         target: 'example',
         path: 'dummy',
         cmakePath: 'cmake',
+        basePath: '/',
     },
     lang: languages.odin.id,
 };
diff --git a/test/options-handler.ts b/test/options-handler.ts
index 07c572784..a7dee7ce0 100644
--- a/test/options-handler.ts
+++ b/test/options-handler.ts
@@ -30,6 +30,7 @@ import {beforeAll, describe, expect, it} from 'vitest';
 import {AppDefaultArguments} from '../app.js';
 import {BaseCompiler} from '../lib/base-compiler.js';
 import {CompilationEnvironment} from '../lib/compilation-env.js';
+import {CompilerFinder} from '../lib/compiler-finder.js';
 import {ClientOptionsHandler, ClientOptionsType} from '../lib/options-handler.js';
 import * as properties from '../lib/properties.js';
 import {BaseTool} from '../lib/tooling/base-tool.js';
@@ -566,4 +567,30 @@ describe('Options handler', () => {
             },
         });
     });
+
+    it('should correctly resolve remote urls', () => {
+        const compilerName = 'godbolt.org@443/gpu';
+        const {host, port, uriBase} = CompilerFinder.getRemotePartsFromCompilerName(compilerName);
+        expect(host).toEqual('godbolt.org');
+        expect(port).toEqual(443);
+        expect(uriBase).toEqual('gpu');
+
+        const {uriSchema, uri, apiPath} = CompilerFinder.prepareRemoteUrlParts(host, port, uriBase, 'c++');
+        expect(uriSchema).toEqual('https');
+        expect(uri).toEqual('https://godbolt.org:443/gpu');
+        expect(apiPath).toEqual('/gpu/api/compilers/c++?fields=all');
+
+        const info = CompilerFinder.getRemoteInfo(uriSchema, host, port, uriBase, 'g123remote');
+        expect(info).toEqual({
+            target: 'https://godbolt.org:443',
+            path: '/gpu/api/compiler/g123remote/compile',
+            cmakePath: '/gpu/api/compiler/g123remote/cmake',
+            basePath: '/gpu',
+        });
+
+        const fullUrl = ClientOptionsHandler.getFullRemoteUrl(info);
+        const librariesUrl = ClientOptionsHandler.getRemoteUrlForLibraries(fullUrl, 'c++');
+
+        expect(librariesUrl).toEqual('https://godbolt.org:443/gpu/api/libraries/c++');
+    });
 });
diff --git a/test/ppci-tests.ts b/test/ppci-tests.ts
index 49b3a864f..0b5e3cc70 100644
--- a/test/ppci-tests.ts
+++ b/test/ppci-tests.ts
@@ -41,6 +41,7 @@ describe('PPCI', () => {
             target: 'foo',
             path: 'bar',
             cmakePath: 'cmake',
+            basePath: '/',
         },
         lang: languages.c.id,
     };
diff --git a/test/win-path-tests.ts b/test/win-path-tests.ts
index 62c52adc5..7d243bd73 100644
--- a/test/win-path-tests.ts
+++ b/test/win-path-tests.ts
@@ -43,6 +43,7 @@ const info = {
         target: 'foo',
         path: 'bar',
         cmakePath: 'cmake',
+        basePath: '/',
     },
 };