Clang 如何在LLVM IR中打印从CPP类编译的结构类型的详细类型? >在编译C++类到LLVM bitcode后,我使用LLVM DIS或 OPT-S 显示文本IR,但该类的打印类型总是:%A类。A=类型{I32(…)**}//C>< /P>

Clang 如何在LLVM IR中打印从CPP类编译的结构类型的详细类型? >在编译C++类到LLVM bitcode后,我使用LLVM DIS或 OPT-S 显示文本IR,但该类的打印类型总是:%A类。A=类型{I32(…)**}//C>< /P>,clang,llvm,llvm-ir,Clang,Llvm,Llvm Ir,有人知道如何打印当前由隐藏的详细类型吗 这是我使用的C++代码: #include <stdio.h> #include <stdlib.h> class A { public: virtual int foo(int i) { return i + 2; } }; int main() { A *a = new A; int x = a->foo(1); return 0; } 这里什么都没有隐藏 您的类包含一个虚

有人知道如何打印当前由
隐藏的详细类型吗

这是我使用的C++代码:

#include <stdio.h>
#include <stdlib.h>

class A {
  public:
    virtual int foo(int i) {
      return i + 2;
    }
};

int main() {
  A *a = new A;
  int x = a->foo(1);
  return 0;
}

这里什么都没有隐藏


您的类包含一个虚拟函数。因此,相应的结构应该有一个放置函数指针的位置。

FYI,结构类型很好,您的问题是函数类型是vararg函数的类型<代码>…
什么都不隐藏,上面写着“vararg”。为什么会这样?不知道,您没有提到如何生成IR。嗨,我的编译命令是:
clang-O0-c-emit llvm abstract.cpp
。我使用
opt-S
以如下形式显示BitCodeIs
vararg
(i8*,…)
,第一种类型是显式的?@arnt:我想你可能是对的,
实际上代表varargs。在上面的代码中,我编译了一个带有虚函数的类。varargs功能可用于存储该虚拟函数。
; ModuleID = 'logs/abstract.bc'
source_filename = "abstract.cpp"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

%class.A = type { i32 (...)** }              // How to make ... become more detailed?

$_ZN1AC2Ev = comdat any
$_ZN1A3fooEi = comdat any
$_ZN1A3barEi = comdat any
$_ZTV1A = comdat any
$_ZTS1A = comdat any
$_ZTI1A = comdat any
....