Repository: compiler-explorer/compiler-explorer
Pull request #7318 (2025-01-28 19:38:04)

Parse terminal hyperlinks in command output
Some compilers (such as `gcc` and `rustc`) support emitting hyperlinks
to the documentation for error messages and/or warnings. This PR adds a
parser for the respective `OSC 8` ANSI escape sequence (see
https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda) and
makes them clickable in the output window.

For example: https://godbolt.org/z/o1v7WzPc6

For GCC, this would make `-Wreturn-type` a clickable link to https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Warning-Options.html#index-Wno-return-type.

For Rust, this would make `E0425` a clickable link to https://doc.rust-lang.org/error_codes/E0425.html.

Note that this also applies to execution output. A malicious program could (when executed) produce output that contains clickable links to anything.

Related feature requests:
* #5284 for `rustc` (`-Z terminal-urls=yes`)
* #7310 for `gcc` (`-fdiagnostics-urls=always`)


Patch:
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/c++.amazon.properties b/etc/config/c++.amazon.properties
index dfe116499..0e92d05d4 100644
--- a/etc/config/c++.amazon.properties
+++ b/etc/config/c++.amazon.properties
@@ -4043,7 +4043,7 @@ libs.blaze.versions.38.version=3.8
 libs.blaze.versions.38.path=/opt/compiler-explorer/libs/blaze/v3.8
 
 libs.boost.name=Boost
-libs.boost.versions=164:165:166:167:168:169:170:171:172:173:174:175:176:177:178:179:180:181:182:183:184:185:186
+libs.boost.versions=164:165:166:167:168:169:170:171:172:173:174:175:176:177:178:179:180:181:182:183:184:185:186:187
 libs.boost.url=https://www.boost.org
 libs.boost.versions.164.version=1.64.0
 libs.boost.versions.164.path=/opt/compiler-explorer/libs/boost_1_64_0
@@ -4096,6 +4096,10 @@ libs.boost.versions.186.version=1.86.0
 libs.boost.versions.186.packagedheaders=true
 libs.boost.versions.186.lookupname=boost_bin
 
+libs.boost.versions.187.version=1.87.0
+libs.boost.versions.187.packagedheaders=true
+libs.boost.versions.187.lookupname=boost_bin
+
 libs.bmulti.name=B-Multi
 libs.bmulti.url=https://gitlab.com/correaa/boost-multi
 libs.bmulti.versions=trunk
diff --git a/etc/config/c.amazon.properties b/etc/config/c.amazon.properties
index 7511e62e7..4b33421da 100644
--- a/etc/config/c.amazon.properties
+++ b/etc/config/c.amazon.properties
@@ -3259,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
@@ -3278,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/cmakescript.amazon.properties b/etc/config/cmakescript.amazon.properties
index 6ba0e3d2a..69e99bfa9 100644
--- a/etc/config/cmakescript.amazon.properties
+++ b/etc/config/cmakescript.amazon.properties
@@ -1,7 +1,7 @@
-compilers=cmake-3_26_1:cmake-3_26_4:cmake-3_27_9:cmake-3_28_0:cmake-3_28_4:cmake-3_29_2:cmake-3_29_20240506_g1ea8fa8
+compilers=cmake-3_26_1:cmake-3_26_4:cmake-3_27_9:cmake-3_28_0:cmake-3_28_4:cmake-3_29_2:cmake-3_29_20240506_g1ea8fa8:cmake-3_30_7:cmake-3_31_5
 isSemVer=true
 baseName=cmake
-defaultCompiler=cmake-3_28_0
+defaultCompiler=cmake-3_31_5
 
 compiler.cmake-3_26_1.exe=/opt/compiler-explorer/cmake-v3.26.1/bin/cmake
 compiler.cmake-3_26_1.semver=3.26.1
@@ -23,3 +23,9 @@ compiler.cmake-3_29_2.semver=3.29.2
 
 compiler.cmake-3_29_20240506_g1ea8fa8.exe=/opt/compiler-explorer/cmake-v3.29.20240506-g1ea8fa8/bin/cmake
 compiler.cmake-3_29_20240506_g1ea8fa8.semver=3.29.20240506-g1ea8fa8
+
+compiler.cmake-3_30_7.exe=/opt/compiler-explorer/cmake-v3.30.7/bin/cmake
+compiler.cmake-3_30_7.semver=3.30.7
+
+compiler.cmake-3_31_5.exe=/opt/compiler-explorer/cmake-v3.31.5/bin/cmake
+compiler.cmake-3_31_5.semver=3.31.5
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/lib/compiler-finder.ts b/lib/compiler-finder.ts
index 67d296250..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,36 +54,25 @@ 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 {
@@ -159,12 +147,6 @@ 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 = CompilerFinder.getRemoteInfo(
                                                 uriSchema,
@@ -185,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}`,
@@ -197,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,
@@ -425,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/dex2oat.ts b/lib/compilers/dex2oat.ts
index 6fe875606..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.*(L.*;)$/;
+        this.smaliClassRegex = /^\.class.*\s(L.*;)$/;
         this.smaliDexPcRegex = /^\s+#@(\w+).*$/;
         this.smaliMethodStartRegex = /^\.method\s(.*)$/;
         this.smaliMethodEndRegex = /^\s*\.end\smethod.*$/;
diff --git a/lib/compilers/odin.ts b/lib/compilers/odin.ts
index a5a9157c2..08f132716 100644
--- a/lib/compilers/odin.ts
+++ b/lib/compilers/odin.ts
@@ -98,13 +98,6 @@ export class OdinCompiler extends BaseCompiler {
                     continue;
                 }
 
-                // skip main
-                if (match[1] === 'main') {
-                    outputLines.push(line);
-                    lastLine = line;
-                    continue;
-                }
-
                 // last line already has require?
                 if (lastLine.includes('@require') || lastLine.includes('@(require)')) {
                     outputLines.push(line);
diff --git a/lib/parsers/asm-parser.ts b/lib/parsers/asm-parser.ts
index 0b6af58da..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;
@@ -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/static/ansi-to-html.ts b/static/ansi-to-html.ts
index dfad84cbc..5684c99c3 100644
--- a/static/ansi-to-html.ts
+++ b/static/ansi-to-html.ts
@@ -30,7 +30,7 @@
 import _ from 'underscore';
 import {AnsiToHtmlOptions, ColorCodes} from './ansi-to-html.interfaces.js';
 import {assert, unwrap} from './assert.js';
-import {isString} from '../shared/common-utils.js';
+import {isString, escapeHTML} from '../shared/common-utils.js';
 
 const defaults: AnsiToHtmlOptions = {
     fg: '#FFF',
@@ -132,7 +132,11 @@ function generateOutput(stack: string[], token: string, data: string | number, o
     } else if (token === 'rgb') {
         assert(isString(data), "Param 'data' must be a string at this point");
         return handleRgb(stack, data, options);
+    } else if (token === 'url') {
+        assert(isString(data), "Param 'data' must be a string at this point");
+        return handleUrl(stack, data, options);
     }
+
     return '';
 }
 
@@ -197,6 +201,11 @@ function handleDisplay(stack: string[], code: string | number, options: AnsiToHt
     return 'Unknown code';
 }
 
+function handleUrl(stack: string[], data: string, options: AnsiToHtmlOptions): string {
+    const [url, text] = data.split(/\x1b\\|\x07/);
+    return `<a class="diagnostic-url" target="_blank" rel="noreferrer" href=${encodeURI(url)}>${escapeHTML(text)}</a>`;
+}
+
 /**
  * Clear all the styles
  */
@@ -317,7 +326,7 @@ interface Token {
 
 function tokenize(text: string, options: AnsiToHtmlOptions, callback: TokenizeCallback) {
     let ansiMatch = false;
-    const ansiHandler = 3;
+    const ansiHandler = 4;
 
     function remove(): string {
         return '';
@@ -364,8 +373,17 @@ function tokenize(text: string, options: AnsiToHtmlOptions, callback: TokenizeCa
         return '';
     }
 
+    function hyperlink(_m: string, captureGroup: string): string {
+        callback('url', captureGroup);
+        return '';
+    }
+
     /* eslint no-control-regex:0 */
     const tokens: Token[] = [
+        {
+            pattern: /^\x1b]8;;(.*?(\x1b\\|\x07).*?)\x1b]8;;\2/,
+            sub: hyperlink,
+        },
         {
             pattern: /^\x08+/,
             sub: remove,
@@ -456,7 +474,7 @@ function updateStickyStack(
     token: string,
     data: string | number,
 ): StickyStackElement[] {
-    if (token !== 'text') {
+    if (token !== 'text' && token !== 'url') {
         stickyStack = stickyStack.filter(notCategory(categoryForCode(data)));
         stickyStack.push({
             token: token,
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/static/panes/output.ts b/static/panes/output.ts
index 053b2fd0f..6b67445f7 100644
--- a/static/panes/output.ts
+++ b/static/panes/output.ts
@@ -285,6 +285,9 @@ export class Output extends Pane<OutputState> {
                     e.preventDefault();
                     return false;
                 })
+                .on('click', '.diagnostic-url', e => {
+                    e.stopPropagation();
+                })
                 .on('mouseover', () => {
                     this.emitEditorLinkLine(lineNum, column, filename, false);
                 })


Test patch:
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/ansi-to-html-tests.ts b/test/ansi-to-html-tests.ts
index b7fa6af89..6ae0132ac 100644
--- a/test/ansi-to-html-tests.ts
+++ b/test/ansi-to-html-tests.ts
@@ -90,4 +90,32 @@ describe('ansi-to-html', () => {
             '<span style="color:#39aaf3">foo<span style="background-color:#646464">bar</span></span>',
         );
     });
+
+    // hyperlinks
+    it('should parse terminal hyperlinks', () => {
+        const filter = new Filter(filterOpts);
+        expect(
+            filter.toHtml(
+                'error[\x1B]8;;https://doc.rust-lang.org/error_codes/E0425.html\x07E0425\x1B]8;;\x07]: cannot find value `x` in this scope',
+            ),
+        ).toEqual(
+            'error[<a class="diagnostic-url" target="_blank" rel="noreferrer" href=https://doc.rust-lang.org/error_codes/E0425.html>E0425</a>]: cannot find value `x` in this scope',
+        );
+        expect(
+            filter.toHtml(
+                't.c:3:1: warning: control reaches end of non-void function [\x1B]8;;https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Warning-Options.html#index-Wno-return-type\x1B\\-Wreturn-type\x1B]8;;\x1B\\]',
+            ),
+        ).toEqual(
+            't.c:3:1: warning: control reaches end of non-void function [<a class="diagnostic-url" target="_blank" rel="noreferrer" href=https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Warning-Options.html#index-Wno-return-type>-Wreturn-type</a>]',
+        );
+    });
+
+    it('should properly escape hyperlinks', () => {
+        const filter = new Filter(filterOpts);
+        expect(
+            filter.toHtml('\x1B]8;;https://example.org/</a><b>bold</b><a>link\x07<i>italic</i>\x1B]8;;\x07'),
+        ).toEqual(
+            '<a class="diagnostic-url" target="_blank" rel="noreferrer" href=https://example.org/%3C/a%3E%3Cb%3Ebold%3C/b%3E%3Ca%3Elink>&lt;i&gt;italic&lt;/i&gt;</a>',
+        );
+    });
 });
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/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/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/odin-tests.ts b/test/odin-tests.ts
index 8daeb3385..88164d1b1 100644
--- a/test/odin-tests.ts
+++ b/test/odin-tests.ts
@@ -46,7 +46,7 @@ const info = {
     lang: languages.odin.id,
 };
 
-describe('GO asm tests', () => {
+describe('Odin source preprocessing tests', () => {
     beforeAll(() => {
         ce = makeCompilationEnvironment({languages});
     });
diff --git a/test/odin/add_require.odin.expected b/test/odin/add_require.odin.expected
index 5020a61df..61f57775f 100644
--- a/test/odin/add_require.odin.expected
+++ b/test/odin/add_require.odin.expected
@@ -13,6 +13,6 @@ test_proc1 :: proc() {
 test_proc2 :: proc() {
 }
 
-main :: proc() {
+@(require) main :: proc() {
     fmt.println("asd")
 }