aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff options
context:
space:
mode:
authorArthur Eubanks <aeubanks@google.com>2021-05-01 19:04:42 -0700
committerArthur Eubanks <aeubanks@google.com>2021-05-13 15:22:27 -0700
commit2155dc51d700c9fb5f29d79eaacf5e1470e4d8ca (patch)
tree1feb59ca9d39696d3a94a051c08f8c454c03e9cf /llvm/lib/Bitcode/Reader/BitcodeReader.cpp
parent83ff0ff46337422171fb36f934bd56c2bc1be15c (diff)
downloadllvm-2155dc51d700c9fb5f29d79eaacf5e1470e4d8ca.zip
llvm-2155dc51d700c9fb5f29d79eaacf5e1470e4d8ca.tar.gz
llvm-2155dc51d700c9fb5f29d79eaacf5e1470e4d8ca.tar.bz2
[IR] Introduce the opaque pointer type
The opaque pointer type is essentially just a normal pointer type with a null pointee type. This also adds support for the opaque pointer type to the bitcode reader/writer, as well as to textual IR. To avoid confusion with existing pointer types, we disallow creating a pointer to an opaque pointer. Opaque pointer types should not be widely used at this point since many parts of LLVM still do not support them. The next steps are to add some very simple use cases of opaque pointers to make sure they work, then start pretending that all pointers are opaque pointers and see what breaks. https://lists.llvm.org/pipermail/llvm-dev/2021-May/150359.html Reviewed By: dblaikie, dexonsmith, pcc Differential Revision: https://reviews.llvm.org/D101704
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r--llvm/lib/Bitcode/Reader/BitcodeReader.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index 91a65c7..3a56a67 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -1807,6 +1807,13 @@ Error BitcodeReader::parseTypeTableBody() {
ResultTy = PointerType::get(ResultTy, AddressSpace);
break;
}
+ case bitc::TYPE_CODE_OPAQUE_POINTER: { // OPAQUE_POINTER: [addrspace]
+ if (Record.size() != 1)
+ return error("Invalid record");
+ unsigned AddressSpace = Record[0];
+ ResultTy = PointerType::get(Context, AddressSpace);
+ break;
+ }
case bitc::TYPE_CODE_FUNCTION_OLD: {
// Deprecated, but still needed to read old bitcode files.
// FUNCTION: [vararg, attrid, retty, paramty x N]