[PATCH] Use dereferencable attribute in Clang for C++ references

Aaron Ballman aaron at aaronballman.com
Thu Jul 10 14:24:24 PDT 2014


On Thu, Jul 10, 2014 at 5:15 PM, hfinkel at anl.gov <hfinkel at anl.gov> wrote:
> 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);

What about getTypeSizeInChars instead of getTypeSize / 8?

Where does the 4095 constant come from? Since it's used in two places,
I would feel slightly more comfortable if it was named (or at least
commented).

> +      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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>

~Aaron



More information about the cfe-commits mailing list