From d9fe96fe264e72c0a5c58cdd40b4efa14d18f475 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 21 Jun 2021 18:33:29 +0200 Subject: [OpaquePtr] Support opaque constant expression GEP Adjust assertions to use isOpaqueOrPointeeTypeMatches() and make it return an opaque pointer result for an opaque base pointer. We also need to enumerate the element type, as it is no longer implicitly enumerated through the pointer type. Differential Revision: https://reviews.llvm.org/D104655 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (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 fef6b91..e002019 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2663,11 +2663,10 @@ Error BitcodeReader::parseConstants() { if (Elts.size() < 1) return error("Invalid gep with no operands"); - Type *ImplicitPointeeType = - cast(Elt0FullTy->getScalarType())->getElementType(); + PointerType *OrigPtrTy = cast(Elt0FullTy->getScalarType()); if (!PointeeType) - PointeeType = ImplicitPointeeType; - else if (PointeeType != ImplicitPointeeType) + PointeeType = OrigPtrTy->getElementType(); + else if (!OrigPtrTy->isOpaqueOrPointeeTypeMatches(PointeeType)) return error("Explicit gep operator type does not match pointee type " "of pointer operand"); -- cgit v1.1