[PATCH] D80166: [CGCall] Annotate reference parameters with "align" attribute.
John McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue May 19 10:55:44 PDT 2020
rjmccall added a comment.
Herald added a subscriber: sstefan1.
Hmm. It looks like we did reserve space for this in the great pointer-alignment-assumption detente ("RFC: Enforcing pointer type alignment in Clang" from early 2016, which I'm aware was never really a consensus position, but which we've nonetheless been living by):
> But note that this rule does still allow the compiler to make stronger
> abstract assumptions about the alignment of C++ references and the
> "this" pointer.
================
Comment at: clang/lib/CodeGen/CGCall.cpp:2116
+ if (PTy->isObjectType()) {
+ if (unsigned Alignment = getContext().getTypeAlignIfKnown(PTy))
+ RetAttrs.addAlignmentAttr(
----------------
This doesn't do the right thing for classes with virtual bases. There's a `getNaturalTypeAlignment` function you should be able to use, although you might have to pull it to CGM.
================
Comment at: clang/lib/CodeGen/CGCall.cpp:2258
Attrs.addDereferenceableAttr(info.first.getQuantity());
- Attrs.addAttribute(llvm::Attribute::getWithAlignment(
- getLLVMContext(), info.second.getAsAlign()));
+ Attrs.addAlignmentAttr(info.second.getAsAlign());
}
----------------
Both of these are wrong for classes with virtual bases.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80166/new/
https://reviews.llvm.org/D80166
More information about the cfe-commits
mailing list