Repository: compiler-explorer/compiler-explorer
Pull request #7325 (2025-01-29 08:26:24)

Update SDCC to 4.5.0
<!-- THIS COMMENT IS INVISIBLE IN THE FINAL PR, BUT FEEL FREE TO REMOVE IT
Thanks for taking the time to improve CE. We really appreciate it.
  Before opening the PR, please make sure that the tests & linter pass their checks,
  by running `make check`.
  In the best case scenario, you are also adding tests to back up your changes,
  but don't sweat it if you don't. We can discuss them at a later date.
Feel free to append your name to the CONTRIBUTORS.md file
Thanks again, we really appreciate this!
-->



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 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/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/parsers/asm-parser.ts b/lib/parsers/asm-parser.ts
index 287b53474..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';
 
@@ -114,8 +114,8 @@ export class AsmParser extends AsmRegex implements IAsmParser {
         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.*$/;
@@ -144,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 = /[#;]/;
@@ -167,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) {
@@ -184,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:
@@ -213,17 +219,15 @@ export class AsmParser extends AsmRegex implements IAsmParser {
         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())) {
@@ -249,8 +253,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
                 inLabelGroup = true;
                 if (definingAlias) {
                     // If we're defining an alias, then any labels in this group are weakly used by the alias.
-                    if (!weakUsages[definingAlias]) weakUsages[definingAlias] = [];
-                    weakUsages[definingAlias].push(match[1]);
+                    markWeak(definingAlias, match[1]);
                 }
             } else {
                 if (inLabelGroup) {
@@ -262,9 +265,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
             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) {
@@ -280,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) {
                     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;
+                        for (const label of match) labelsUsed.add(label);
                     } else {
                         for (const currentLabel of currentLabelSet) {
-                            if (!weakUsages[currentLabel]) weakUsages[currentLabel] = [];
-                            for (const label of match) weakUsages[currentLabel].push(label);
+                            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;
-            for (const label of toAdd) markUsed(label);
-        }
+        // 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;
     }
 
@@ -414,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 = {
@@ -447,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 = {
@@ -491,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 = {
@@ -636,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 {
@@ -661,8 +654,8 @@ 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 {
@@ -782,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) {


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/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-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
   }
 }