为什么LLVM bitcode有构造函数的重复符号?

时间:2017-07-23 16:45:58

标签: llvm clang++

考虑以下文件

foo.h中

class Foo
{
  Foo();
  Foo(int x);
  void bar();
}

foo.cc

# include foo.h

Foo::Foo() {}
Foo::Foo(int x) {}
void Foo::bar() {}

将这些文件编译为LLVM bitcode foo.bc时,如下所示

clang++ -c -o foo.bc -emit-llvm foo.cc

生成的LLVM bitcode文件foo.bc包含每个构造函数定义的两个符号,但函数定义只包含一个符号。这是为什么?

我在LLVM版本3.4和4.0.1上都测试了这个,并且两个版本都会出现这种情况。作为参考,这是

的输出

llvm-nm foo.bc

T _ZN3Foo3barEv
T _ZN3FooC1Ei
T _ZN3FooC1Ev
T _ZN3FooC2Ei
T _ZN3FooC2Ev

- 编辑 -

根据下面的 milleniumbug 的评论,here是有关完整对象构造函数的一些其他信息:

0 个答案:

没有答案