rnk added a comment.

In D70340#1751148 <https://reviews.llvm.org/D70340#1751148>, @hans wrote:

> Nice!
>
> Silly questions, but for my own education: I thought the key function concept 
> only existed in the Itanium ABI, but from your numbers it sounds like it's a 
> concept, at least for debug info, also on Windows?


There's sort of two things going on:

- -flimit-debug-info: if a type has a vtable, debug info for the class is only 
emitted where the vtable is emitted, on the assumption that we believe the 
vtable will be in the program somewhere.
- key functions in the ABI: these optimize object file size by avoiding the 
need to emit the vtable in as many places.

The -flimit-debug-info behavior is cross-platform and happens regardless of 
whether the class has a key function. So, clang only emits a forward 
declaration of Foo in the debug info for this program, regardless of target:

  struct Foo {
    Foo();
    ~Foo();
    virtual void f() {}
  };
  Foo *makeFoo() { return new Foo(); }

-flimit-debug-info would emit complete type info if the constructor (which 
touches the vtable) was inline.

---

I'll try to land this today, I think it's worth doing. If anyone thinks it's 
too much of a hack, let me know.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D70340/new/

https://reviews.llvm.org/D70340



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to