<div dir="ltr">Note that the TwoVirtual, NoSubOrSuper, and OneSuper types are all emitted as declarations - so no inheritance information is provided in that case (nor any member variables/functions, byte size, etc). This is a debug information size optimization (GCC does a similar one) based on the assumption that the whole program will be built with debug info, and in that case some other file (the file with the 'key function' for each type) so it doesn't need to be duplicated here.<br><br>If you want to disable that optimization, you can pass -fstandalone-debug (this tells the compiler not to assume that any other part of the program is built with debug info) - but it increases the size of the debug info quite a bit.<br><br>(note that -femit-all-decls doesn't apply to debug info (ie: an unused type will still not be emitted into the metadata/DWARF) GCC's -gfull would be the right tool for this but it's not implemented in LLVM/Clang)<br><br>What are you trying to do with this information?</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Feb 23, 2017 at 3:52 PM Jon Eyolfson via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello, I'm trying to understand why I'm not getting all the inheritance<br class="gmail_msg">
information for the following example:<br class="gmail_msg">
<br class="gmail_msg">
    class TwoVirtual {<br class="gmail_msg">
    public:<br class="gmail_msg">
      virtual void foo();<br class="gmail_msg">
      virtual void bar() const;<br class="gmail_msg">
    };<br class="gmail_msg">
<br class="gmail_msg">
    class TwoImpl : public TwoVirtual {<br class="gmail_msg">
      TwoImpl() {}<br class="gmail_msg">
    public:<br class="gmail_msg">
      virtual void foo() {}<br class="gmail_msg">
      virtual void bar() const {}<br class="gmail_msg">
    };<br class="gmail_msg">
<br class="gmail_msg">
    class NoSubOrSuper {<br class="gmail_msg">
      TwoImpl t;<br class="gmail_msg">
      void baz() {}<br class="gmail_msg">
    };<br class="gmail_msg">
<br class="gmail_msg">
    class OneSuper : public TwoImpl {<br class="gmail_msg">
      void baz() {}<br class="gmail_msg">
    };<br class="gmail_msg">
<br class="gmail_msg">
I'm generating llvm code with the following command:<br class="gmail_msg">
<br class="gmail_msg">
    clang++ -std=c++14 -g -O1 -Xclang -disable-llvm-optzns -emit-llvm<br class="gmail_msg">
            -femit-all-decls -S -c TestFile.cpp -o TestFile.ll<br class="gmail_msg">
<br class="gmail_msg">
I'm using -O1 because I need TBAA information present.<br class="gmail_msg">
<br class="gmail_msg">
What I get is only one DIDerivedType with the DW_TAG_inheritance tag.<br class="gmail_msg">
This connects TwoImpl to TwoVirtual. However there isnt an inheritance<br class="gmail_msg">
tag between OneSuper and TwoImpl. Is there a reason for this? I'm trying<br class="gmail_msg">
to determine in the llvm code that NoSubOrSuper and OneSuper are different<br class="gmail_msg">
(on has an inheritance relation and the other doesn't). Thanks!<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
cfe-dev mailing list<br class="gmail_msg">
<a href="mailto:cfe-dev@lists.llvm.org" class="gmail_msg" target="_blank">cfe-dev@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br class="gmail_msg">
</blockquote></div>