From 28b9771472fa3df2568b6c5de1a9726680d940d3 Mon Sep 17 00:00:00 2001 From: Arthur Eubanks Date: Tue, 18 May 2021 15:23:00 -0700 Subject: [OpaquePtr] Make GEPs work with opaque pointers No verifier changes needed, the verifier currently doesn't check that the pointer operand's pointee type matches the GEP type. There is a similar check in GetElementPtrInst::Create() though. Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D102744 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp') diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index b2794b3..c61d66f 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -4168,7 +4168,8 @@ Error BitcodeReader::parseFunctionBody(Function *F) { if (!Ty) { std::tie(FullTy, Ty) = getPointerElementTypes(FullBaseTy->getScalarType()); - } else if (Ty != getPointerElementFlatType(FullBaseTy->getScalarType())) + } else if (!cast(FullBaseTy->getScalarType()) + ->isOpaqueOrPointeeTypeMatches(Ty)) return error( "Explicit gep type does not match pointee type of pointer operand"); -- cgit v1.1