[PATCH] Use dereferencable attribute in Clang for C++ references
hfinkel at anl.gov
hfinkel at anl.gov
Thu Jul 10 14:15:03 PDT 2014
Updated for changes in the LLVM patch (in response to Nick's review).
There also need to be a lot of regression-test updates (not yet included here).
http://reviews.llvm.org/D4450
Files:
lib/CodeGen/CGCall.cpp
Index: lib/CodeGen/CGCall.cpp
===================================================================
--- lib/CodeGen/CGCall.cpp
+++ lib/CodeGen/CGCall.cpp
@@ -1200,8 +1200,16 @@
llvm_unreachable("Invalid ABI kind for return argument");
}
- if (RetTy->isReferenceType())
+ if (RetTy->isReferenceType()) {
+ QualType PTy = RetTy->getAs<ReferenceType>()->getPointeeType();
+ if (PTy->isConstantSizeType()) {
+ unsigned Bytes =
+ std::min(4095u, (unsigned) getContext().getTypeSize(PTy)/8);
+ RetAttrs.addDereferencableAttr(Bytes);
+ }
+
RetAttrs.addAttribute(llvm::Attribute::NonNull);
+ }
if (RetAttrs.hasAttributes())
PAL.push_back(llvm::
@@ -1291,8 +1299,16 @@
}
}
- if (ParamType->isReferenceType())
+ if (ParamType->isReferenceType()) {
+ QualType PTy = ParamType->getAs<ReferenceType>()->getPointeeType();
+ if (PTy->isConstantSizeType()) {
+ unsigned Bytes =
+ std::min(4095u, (unsigned) getContext().getTypeSize(PTy)/8);
+ Attrs.addDereferencableAttr(Bytes);
+ }
+
Attrs.addAttribute(llvm::Attribute::NonNull);
+ }
if (Attrs.hasAttributes())
PAL.push_back(llvm::AttributeSet::get(getLLVMContext(), Index, Attrs));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4450.11294.patch
Type: text/x-patch
Size: 1250 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140710/386c870f/attachment.bin>
More information about the cfe-commits
mailing list