[PATCH] D104663: [OpaquePtr] Remove checking pointee type for byval/preallocated type
Arthur Eubanks via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 22 08:46:38 PDT 2021
aeubanks updated this revision to Diff 353664.
aeubanks added a comment.
return the byval type first if it exists
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D104663/new/
https://reviews.llvm.org/D104663
Files:
llvm/include/llvm/IR/InstrTypes.h
llvm/unittests/IR/AttributesTest.cpp
Index: llvm/unittests/IR/AttributesTest.cpp
===================================================================
--- llvm/unittests/IR/AttributesTest.cpp
+++ llvm/unittests/IR/AttributesTest.cpp
@@ -7,8 +7,12 @@
//===----------------------------------------------------------------------===//
#include "llvm/IR/Attributes.h"
-#include "llvm/IR/LLVMContext.h"
+#include "llvm/AsmParser/Parser.h"
#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/InstrTypes.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Support/SourceMgr.h"
#include "gtest/gtest.h"
using namespace llvm;
@@ -252,4 +256,24 @@
}
}
+TEST(Attributes, MismatchedByval) {
+ const char *IRString = R"IR(
+ declare void @f(i32* byval(i32))
+ define void @g() {
+ call void @f(i32* null)
+ ret void
+ }
+ )IR";
+
+ SMDiagnostic Err;
+ LLVMContext Context;
+ std::unique_ptr<Module> M = parseAssemblyString(IRString, Err, Context);
+ ASSERT_TRUE(M);
+
+ auto *G = M->getFunction("g");
+ ASSERT_TRUE(G);
+ auto *I = cast<CallBase>(&G->getEntryBlock().front());
+ ASSERT_TRUE(I->getParamByValType(0));
+}
+
} // end anonymous namespace
Index: llvm/include/llvm/IR/InstrTypes.h
===================================================================
--- llvm/include/llvm/IR/InstrTypes.h
+++ llvm/include/llvm/IR/InstrTypes.h
@@ -1728,14 +1728,16 @@
/// Extract the byval type for a call or parameter.
Type *getParamByValType(unsigned ArgNo) const {
- Type *Ty = Attrs.getParamByValType(ArgNo);
- return Ty ? Ty : getArgOperand(ArgNo)->getType()->getPointerElementType();
+ if (auto *Ty = Attrs.getParamByValType(ArgNo))
+ return Ty;
+ if (const Function *F = getCalledFunction())
+ return F->getAttributes().getParamByValType(ArgNo);
+ return nullptr;
}
/// Extract the preallocated type for a call or parameter.
Type *getParamPreallocatedType(unsigned ArgNo) const {
- Type *Ty = Attrs.getParamPreallocatedType(ArgNo);
- return Ty ? Ty : getArgOperand(ArgNo)->getType()->getPointerElementType();
+ return Attrs.getParamPreallocatedType(ArgNo);
}
/// Extract the number of dereferenceable bytes for a call or
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D104663.353664.patch
Type: text/x-patch
Size: 2203 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210622/234ed8e9/attachment.bin>
More information about the llvm-commits
mailing list