diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp --- a/llvm/lib/Transforms/Utils/InlineFunction.cpp +++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp @@ -1341,21 +1341,17 @@ } static AttrBuilder IdentifyValidAttributes(CallBase &CB) { - - AttrBuilder AB(CB.getContext(), CB.getAttributes().getRetAttrs()); - if (!AB.hasAttributes()) - return AB; AttrBuilder Valid(CB.getContext()); // Only allow these white listed attributes to be propagated back to the // callee. This is because other attributes may only be valid on the call // itself, i.e. attributes such as signext and zeroext. - if (auto DerefBytes = AB.getDereferenceableBytes()) + if (auto DerefBytes = CB.getRetDereferenceableBytes()) Valid.addDereferenceableAttr(DerefBytes); - if (auto DerefOrNullBytes = AB.getDereferenceableOrNullBytes()) + if (auto DerefOrNullBytes = CB.getRetDereferenceableOrNullBytes()) Valid.addDereferenceableOrNullAttr(DerefOrNullBytes); - if (AB.contains(Attribute::NoAlias)) + if (CB.hasRetAttr(Attribute::NoAlias)) Valid.addAttribute(Attribute::NoAlias); - if (AB.contains(Attribute::NonNull)) + if (CB.hasRetAttr(Attribute::NonNull)) Valid.addAttribute(Attribute::NonNull); return Valid; } diff --git a/llvm/test/Transforms/Inline/nonnull.ll b/llvm/test/Transforms/Inline/nonnull.ll --- a/llvm/test/Transforms/Inline/nonnull.ll +++ b/llvm/test/Transforms/Inline/nonnull.ll @@ -141,7 +141,7 @@ define ptr @caller7() { ; CHECK-LABEL: define ptr @caller7() { -; CHECK-NEXT: [[R_I:%.*]] = call ptr @buz() #[[ATTR0]] +; CHECK-NEXT: [[R_I:%.*]] = call nonnull ptr @buz() #[[ATTR0]] ; CHECK-NEXT: ret ptr [[R_I]] ; %r = call ptr @callee7()