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

Unc*_*ers 6 llvm clang++

请考虑以下文件

foo.h中

class Foo
{
  Foo();
  Foo(int x);
  void bar();
}
Run Code Online (Sandbox Code Playgroud)

foo.cc

# include foo.h

Foo::Foo() {}
Foo::Foo(int x) {}
void Foo::bar() {}
Run Code Online (Sandbox Code Playgroud)

将这些文件编译为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
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

根据下面的milleniumbug评论,这里有一些关于完整对象构造函数的附加信息: