Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Ballerina program crashes with a CCE when self is used as a variable #42772

Open
lochana-chathura opened this issue May 17, 2024 · 1 comment
Labels
Crash All issues caused by NPE, CCE, etc Team/CompilerFE All issues related to Language implementation and Compiler, this exclude run times. Type/Bug

Comments

@lochana-chathura
Copy link
Member

lochana-chathura commented May 17, 2024

Description

Consider the below code.

import ballerina/io;

public function main() {
    int self = 3;
    io:print(self);
}

It crashes with the following stacktrace.

stacktrace (click to expand)
[2024-05-17 17:36:20,554] SEVERE {b7a.log.crash} - class org.wso2.ballerinalang.compiler.semantics.model.types.BType cannot be cast to class org.wso2.ballerinalang.compiler.semantics.model.types.BObjectType (org.wso2.ballerinalang.compiler.semantics.model.types.BType and org.wso2.ballerinalang.compiler.semantics.model.types.BObjectType are in unnamed module of loader 'app') 
java.lang.ClassCastException: class org.wso2.ballerinalang.compiler.semantics.model.types.BType cannot be cast to class org.wso2.ballerinalang.compiler.semantics.model.types.BObjectType (org.wso2.ballerinalang.compiler.semantics.model.types.BType and org.wso2.ballerinalang.compiler.semantics.model.types.BObjectType are in unnamed module of loader 'app')
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.isFieldsInitializedForSelfInvocation(DataflowAnalyzer.java:1862)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.visit(DataflowAnalyzer.java:1664)
        at org.wso2.ballerinalang.compiler.tree.expressions.BLangInvocation.accept(BLangInvocation.java:128)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.analyzeNode(DataflowAnalyzer.java:2545)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.visit(DataflowAnalyzer.java:2128)
        at org.wso2.ballerinalang.compiler.tree.statements.BLangExpressionStmt.accept(BLangExpressionStmt.java:51)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.analyzeNode(DataflowAnalyzer.java:2545)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.visit(DataflowAnalyzer.java:474)
        at org.wso2.ballerinalang.compiler.tree.BLangBlockFunctionBody.accept(BLangBlockFunctionBody.java:60)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.analyzeNode(DataflowAnalyzer.java:2545)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.analyzeBranch(DataflowAnalyzer.java:2513)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.visit(DataflowAnalyzer.java:431)
        at org.wso2.ballerinalang.compiler.tree.BLangFunction.accept(BLangFunction.java:77)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.analyzeNode(DataflowAnalyzer.java:2545)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.visit(DataflowAnalyzer.java:346)
        at org.wso2.ballerinalang.compiler.tree.BLangPackage.accept(BLangPackage.java:167)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.analyzeNode(DataflowAnalyzer.java:2545)
        at org.wso2.ballerinalang.compiler.semantics.analyzer.DataflowAnalyzer.analyze(DataflowAnalyzer.java:316)
        at io.ballerina.projects.internal.CompilerPhaseRunner.dataflowAnalyze(CompilerPhaseRunner.java:196)
        at io.ballerina.projects.internal.CompilerPhaseRunner.performTypeCheckPhases(CompilerPhaseRunner.java:120)
        at io.ballerina.projects.ModuleContext.compileInternal(ModuleContext.java:435)
        at io.ballerina.projects.ModuleCompilationState$1.compile(ModuleCompilationState.java:45)
        at io.ballerina.projects.ModuleContext.compile(ModuleContext.java:383)
        at io.ballerina.projects.PackageCompilation.compileModulesInternal(PackageCompilation.java:211)
        at io.ballerina.projects.PackageCompilation.compileModules(PackageCompilation.java:195)
        at io.ballerina.projects.PackageCompilation.compile(PackageCompilation.java:102)
        at io.ballerina.projects.PackageCompilation.from(PackageCompilation.java:97)
        at io.ballerina.projects.PackageContext.getPackageCompilation(PackageContext.java:244)
        at io.ballerina.projects.Package.getCompilation(Package.java:150)
        at io.ballerina.projects.Package.runCodeGeneratorPlugins(Package.java:323)
        at io.ballerina.cli.task.CompileTask.execute(CompileTask.java:153)
        at io.ballerina.cli.TaskExecutor.executeTasks(TaskExecutor.java:40)
        at io.ballerina.cli.cmd.RunCommand.execute(RunCommand.java:258)
        at java.base/java.util.Optional.ifPresent(Optional.java:178)
        at io.ballerina.cli.launcher.Main.main(Main.java:58)

Affected Version(s)

2201.8.5 at least

@lochana-chathura lochana-chathura added Type/Bug Team/CompilerFE All issues related to Language implementation and Compiler, this exclude run times. Crash All issues caused by NPE, CCE, etc labels May 17, 2024
@dulajdilshan
Copy link
Contributor

This behaviour is the same when we use 'self (quoted 'self`)

import ballerina/io;

public function main() {
    int 'self = 3;
    io:print('self);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Crash All issues caused by NPE, CCE, etc Team/CompilerFE All issues related to Language implementation and Compiler, this exclude run times. Type/Bug
Projects
Status: BackLog
Development

No branches or pull requests

2 participants