LLVM IR-有人能解释这种行为吗?

LLVM IR-有人能解释这种行为吗?,llvm,llvm-ir,Llvm,Llvm Ir,目前我正试图为我的语言构建一个编译器。在我的语言中,我希望像在Java中一样对对象/结构使用隐式指针。在下面的程序中,我正在测试此功能。然而,程序并没有像我预期的那样运行。我不希望你们通读我的全部编译代码,因为那将是浪费时间。相反,我希望我能解释一下我打算让这个程序做什么,你们可以在llvm ir中发现哪里出了问题。这样,我可以调整编译器以生成适当的llvm ir。 流量: [Function]Main-[Return:Int]{ ->为一个i32的结构分配空间 ->调用createObj函数

目前我正试图为我的语言构建一个编译器。在我的语言中,我希望像在Java中一样对对象/结构使用隐式指针。在下面的程序中,我正在测试此功能。然而,程序并没有像我预期的那样运行。我不希望你们通读我的全部编译代码,因为那将是浪费时间。相反,我希望我能解释一下我打算让这个程序做什么,你们可以在llvm ir中发现哪里出了问题。这样,我可以调整编译器以生成适当的llvm ir。
流量:
[Function]Main-[Return:Int]{
->为一个i32的结构分配空间
->调用createObj函数并将返回值存储在先前分配的空间中
->返回结构的i32值
}

[Function]createObj-[Return:struct{i32}]{
->为一个i32的结构分配空间
->在此空间上调用对象函数(指针)
->返回此空格(指针真的)
}

[Function]Object-[Return:void]{
->将i32值5存储在结构指针参数内部
}
程序是main不断返回一些随机数,而不是5。其中一个数字是1593856。我猜这是指针地址的十进制表示,但我不确定它为什么要打印指针地址


此llvm ir是根据此语法生成的

func () > main > (int) {
    Object o = createObj();

    return o.id;
}

// Create an object and returns it
func () > createObj > (Object) { 
    Object o = make Object < ();

    return o;
}

// Object decl
tmpl Object {
    int id; // Property

    // This is run every time an object is created.
    constructor < () {
        this.id = 5;
    }
}
func()>main>(int){
对象o=createObj();
返回o.id;
}
//创建一个对象并返回它
func()>createObj>(对象){
对象o=使对象<();
返回o;
}
//对象decl
tmpl对象{
int id;//属性
//每次创建对象时都会运行此操作。
构造函数<(){
这1.id=5;
}
}

在createObj中,您似乎返回指向堆栈变量的指针,该变量在函数返回后将不再有效


如果您至少要执行Java之类的隐式对象指针,那么您将需要调用malloc之类的堆分配,我认为您没有

在createObj中,您似乎正在返回一个指向堆栈变量的指针,该变量在函数返回后将不再有效


如果您至少要执行Java之类的隐式对象指针,那么您将需要调用malloc之类的堆分配,我认为您没有

啊,这很有道理!非常感谢。我会尝试一下,然后回来汇报。啊,这很有道理!非常感谢。我会尝试一下,然后回来汇报。
func () > main > (int) {
    Object o = createObj();

    return o.id;
}

// Create an object and returns it
func () > createObj > (Object) { 
    Object o = make Object < ();

    return o;
}

// Object decl
tmpl Object {
    int id; // Property

    // This is run every time an object is created.
    constructor < () {
        this.id = 5;
    }
}