diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -2597,6 +2597,8 @@ return tokError("basic block pointers are invalid"); if (Result->isVoidTy()) return tokError("pointers to void are invalid - use i8* instead"); + if (Result->isOpaquePointerTy()) + return tokError("ptr* is invalid - use ptr instead"); if (!PointerType::isValidElementType(Result)) return tokError("pointer to this type is invalid"); Result = PointerType::getUnqual(Result); diff --git a/llvm/test/Assembler/invalid-opaque-ptr-addrspace.ll b/llvm/test/Assembler/invalid-opaque-ptr-addrspace.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Assembler/invalid-opaque-ptr-addrspace.ll @@ -0,0 +1,7 @@ +; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s + +; CHECK: ptr* is invalid - use ptr instead +define void @f(ptr addrspace(3) %a) { + %b = bitcast ptr addrspace(3) %a to ptr addrspace(3)* + ret void +} diff --git a/llvm/test/Assembler/invalid-opaque-ptr.ll b/llvm/test/Assembler/invalid-opaque-ptr.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Assembler/invalid-opaque-ptr.ll @@ -0,0 +1,7 @@ +; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s + +; CHECK: ptr* is invalid - use ptr instead +define void @f(ptr %a) { + %b = bitcast ptr %a to ptr* + ret void +}