Resending since the wrong list was CC'ed. On Tue, Sep 29, 2015 at 3:39 PM Zachary Turner <ztur...@google.com> wrote:
> Hi Greg. I'm responding on this thread since you said lldb-dev is a > better place for questions. > > I had a chance to look at this some more. It looks like the way we're > constructing the clang::RecordDecl is incorrect on Windows. I'm not sure > what record layout is like on non-Windows platforms, but if we have this > code: > > class A { > virtual ~A() {} > int a; > }; > > class B : public A { > virtual ~B() {} > int b; > }; > > A * pa = new B (); > > then using the MS ABI, offset of a is 4 and offset of B is 8. I verified > this by modifying the source of sbvalue-cast.cpp to print the offsets. > > d:\src\llvm\tools\lldb\test\lang\cpp\dynamic-value>a.out > DerivedA::ctor()-> > m_base_val=20 > m_a_val=10 > *offset of DerivedA::m_a_val is 8* > *offset of DerivedA::m_base_val is 4* > > Clang agrees with me as well. Compiling with -Xclang -emit-llvm-only > -Xclang -fdump-record-layouts gives me the following AST Record Layout > > *** Dumping AST Record Layout > 0 | class DerivedA > 0 | class Base (primary base) > 0 | (Base vftable pointer) > * 4 | int m_base_val* > 8 | int m_a_val > | [sizeof=12, align=4 > | nvsize=12, nvalign=4] > > On the LLDB side, we have ClangASTContext::GetChildCompilerTypeAtIndex > which computes the byte offset, field name, etc for the ValueObject. On > line 5754 it begins querying the name and byte offset of the field. The > name returns `m_base_val`, but the field_offset returns 8 bytes, which we > can see above is wrong. > > Any suggestions where I might look to dig further? > > On Wed, Sep 23, 2015 at 10:34 AM Greg Clayton <clayb...@gmail.com> wrote: > >> I responded in another e-mail with follow stuff you will need to send me. >> Always send questions to lldb-dev and not lldb-commits as there is so much >> traffic in lldb-commmits it might get lost. I keep up with lldb-dev daily. >> >> > On Sep 22, 2015, at 10:12 AM, Zachary Turner <ztur...@google.com> >> wrote: >> > >> > In regards to this CL: >> http://llvm.org/viewvc/llvm-project?rev=247953&view=rev >> > >> > It has broken TestCppValueCast on Windows and fixed TestCxxWcharT on >> Windows as well. Although these appear to be platform specific behavioral >> changes, as I don't see anyone else reporting failures or fixes, the >> description of the CL leads me to infer that this change was supposed to >> have no functional change. I haven't gotten any response pinging the >> thread so I'll pose it to the wider list for visibility in case someone can >> shed some light on this. In particular, is this supposed to come with a >> functional change, and if so what? >> > >> > Unfortunately I don't have buildbots running tests on Windows yet, so I >> can't justify reverting the CL (and it's too old to revert now anyway since >> other things depend on it), but it would greatly appreciate if someone can >> take a look at this and see if they can identify the source of the >> behavioral change >> > >> > I do plan to have a buildbot running tests within a week or two, so >> hopefully we can catch this kind of thing much sooner next time. >> >>
_______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev