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));
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));
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits