ro added a comment.

In D87615#2278002 <https://reviews.llvm.org/D87615#2278002>, @joerg wrote:

> I'm still curious about the source of the vptr diff, but that's a minor 
> question, otherwise. LGTM

Thanks.  I think I've found what's going on here: the memory ranges are 
ultimately printed by `compiler-rt/lib/ubsan/ubsan_diag.cpp` 
(`PrintMemorySnippet`).  The crucial snippet is around l.280:

  // Emit data.
  InternalScopedString Buffer(1024);
  for (uptr P = Min; P != Max; ++P) {
    unsigned char C = *reinterpret_cast<const unsigned char*>(P);
    Buffer.append("%s%02x", (P % 8 == 0) ? "  " : " ", C);
  }

`Min` is `Loc - 4`, i.e. 4 bytes before the start location.  Before my patch 
(i.e. with 16-byte stack alignment), that was

  0xfeffdcf0: note: object is of type 'S'
   76 62 92 92  ec 1b 06 08 00 00 00 00  44 de ff fe 30 dd ff fe  00 00 00 00 
00 00 00 00  00 00 00 00

i.e. `Loc - 4` wasn't on an 8-byte boundary, thus the line starts with a single 
blank.  With 4-byte aligned stack, I have instead

  0xfeffdd34: note: object is of type 'S'
    76 62 92 92 ec 1b 06 08  00 00 00 00 78 dd ff fe  00 00 00 00 00 00 00 00  
00 00 00 00 00 00 00 00

i.e. `Loc - 4` **is** on an 8-byte boundary and the line starts with two blanks.

I can't see that the `vptr.cpp` testcase does anything to guarantee a specific 
alignment here, or depends on one.  In fact, AFAICS it's the only ubsan test 
that looks at that memory dump line at all.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D87615

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

Reply via email to