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

Reply via email to