ahatanak added inline comments.

================
Comment at: clang/lib/Sema/SemaChecking.cpp:13122
+    if (Base->isVirtual()) {
+      BaseAlignment = Ctx.getTypeAlignInChars(Base->getType());
+      Offset = CharUnits::Zero();
----------------
rjmccall wrote:
> Oh, this — and all the other places that do presumed alignment based on a 
> pointee type — needs a special case for C++ records with virtual bases, 
> because you need to get its presumed alignment as a base sub-object, not its 
> presumed alignment as a complete object, which is what `getTypeAlignInChars` 
> will return.  The right way to merge that information is to get the normal 
> alignment — which may be lower than expected if there's a typedef in play — 
> and then `min` that with the base sub-object alignment.
I think the base sub-object alignment in this case is the `NonVirtualAlignment` 
of the class (the `CXXRecordDecl` of `Base` in this function), but it's not 
clear to me what the normal alignment is. I don't think it's what 
`Ctx.getTypeAlignInChars(Base->getType())` returns, is it? I see 
`CodeGenModule::getDynamicOffsetAlignment` seems to be doing what you are 
suggesting, but I'm not sure whether that's what we should be doing here. It 
looks like it's comparing the alignment of the derived class and the 
non-virtual alignment of the base class.


================
Comment at: clang/lib/Sema/SemaChecking.cpp:13266
+      if (!RHS->isIntegerConstantExpr(RHSRes, Ctx))
+        return Optional<std::pair<CharUnits, CharUnits>>();
+      CharUnits Offset = LHSRes->second;
----------------
rjmccall wrote:
> This should be handled the same as array subscripting.  Maybe you can extract 
> a helper for that that's given a pointer expression, an integer expression, 
> and a flag indicating whether it's a subtraction?
The offset computation was wrong when the element type wasn't a char. The bug 
is fixed in the helper function.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D78767



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

Reply via email to