ballerina-platform / ballerina-lang

The Ballerina Programming Language
https://ballerina.io/
Apache License 2.0
3.58k stars 738 forks source link

[Bug]: Compiler crash when using an undefined record in a nested select within an query #43319

Open poorna2152 opened 3 weeks ago

poorna2152 commented 3 weeks ago

Description

Consider the following code,

import ballerina/io;

type AccountDetail record {
    Assest[] assets;
};

type Assest record {
    string marketValue;
    string name;
};

public function main() {
    AccountDetail[] accountDetails = [];
    AccountDetail[] updated = from AccountDetail detail in accountDetails
        select {
            assets: from Test asset in detail.assets
                select {
                    marketValue: asset.marketValue,
                    name: asset.name
                }
        };
    io:println(updated);

}

The Test record used in the query is not defined and this is not caught at the TypeChecker level. A compiler crash is observed.

java.lang.AssertionError
        at org.wso2.ballerinalang.compiler.tree.BLangNodeVisitor.visit(BLangNodeVisitor.java:631)
        at org.wso2.ballerinalang.compiler.tree.expressions.BLangFieldBasedAccess.accept(BLangFieldBasedAccess.java:71)
        at org.wso2.ballerinalang.compiler.bir.BIRGen.generateMappingConstructorEntries(BIRGen.java:3032)
        at org.wso2.ballerinalang.compiler.bir.BIRGen.visit(BIRGen.java:1636)
        at org.wso2.ballerinalang.compiler.tree.expressions.BLangRecordLiteral$BLangMapLiteral.accept(BLangRecordLiteral.java:328)
        at org.wso2.ballerinalang.compiler.bir.BIRGen.visit(BIRGen.java:1648)
        at org.wso2.ballerinalang.compiler.tree.expressions.BLangTypeConversionExpr.accept(BLangTypeConversionExpr.java:83)
        at org.wso2.ballerinalang.compiler.bir.BIRGen.visit(BIRGen.java:1126)
        at org.wso2.ballerinalang.compiler.tree.statements.BLangAssignment.accept(BLangAssignment.java:81)
        at org.wso2.ballerinalang.compiler.bir.BIRGen.visit(BIRGen.java:743)
        at org.wso2.ballerinalang.compiler.tree.BLangBlockFunctionBody.accept(BLangBlockFunctionBody.java:60)
        at org.wso2.ballerinalang.compiler.bir.BIRGen.visit(BIRGen.java:703)
        at org.wso2.ballerinalang.compiler.tree.BLangFunction.accept(BLangFunction.java:79)
        at org.wso2.ballerinalang.compiler.bir.BIRGen.lambda$visit$5(BIRGen.java:351)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
        at org.wso2.ballerinalang.compiler.bir.BIRGen.visit(BIRGen.java:351)
        at org.wso2.ballerinalang.compiler.tree.BLangPackage.accept(BLangPackage.java:167)
        at org.wso2.ballerinalang.compiler.bir.BIRGen.genBIR(BIRGen.java:291)
        at io.ballerina.projects.internal.CompilerPhaseRunner.birGen(CompilerPhaseRunner.java:210)
        at io.ballerina.projects.internal.CompilerPhaseRunner.performBirGenPhases(CompilerPhaseRunner.java:147)
        at io.ballerina.projects.ModuleContext.generateCodeInternal(ModuleContext.java:418)
        at io.ballerina.projects.ModuleCompilationState$4.generatePlatformSpecificCode(ModuleCompilationState.java:132)
        at io.ballerina.projects.ModuleContext.generatePlatformSpecificCode(ModuleContext.java:351)
        at io.ballerina.projects.JBallerinaBackend.performCodeGen(JBallerinaBackend.java:176)
        at io.ballerina.projects.JBallerinaBackend.<init>(JBallerinaBackend.java:145)
        at io.ballerina.projects.JBallerinaBackend.lambda$from$0(JBallerinaBackend.java:129)
        at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1220)
        at io.ballerina.projects.PackageCompilation.getCompilerBackend(PackageCompilation.java:179)
        at io.ballerina.projects.JBallerinaBackend.from(JBallerinaBackend.java:128)
        at io.ballerina.projects.JBallerinaBackend.from(JBallerinaBackend.java:116)
        at io.ballerina.cli.task.CompileTask.execute(CompileTask.java:232)
        at io.ballerina.cli.TaskExecutor.executeTasks(TaskExecutor.java:40)
        at io.ballerina.cli.cmd.RunCommand.execute(RunCommand.java:304)
        at java.base/java.util.Optional.ifPresent(Optional.java:178)
        at io.ballerina.cli.launcher.Main.main(Main.java:59)

ERROR [xmlns_def:(1:1,1:1)] Compilation failed due to an unhandled exception
error: compilation contains errors

Steps to Reproduce

No response

Affected Version(s)

No response

OS, DB, other environment details and versions

No response

Related area

-> Compilation

Related issue(s) (optional)

No response

Suggested label(s) (optional)

No response

Suggested assignee(s) (optional)

No response

nipunayf commented 3 weeks ago

Related to https://github.com/ballerina-platform/ballerina-lang/issues/42073