[CGBlocks] Don't assume presence of bitcast
authorNikita Popov <npopov@redhat.com>
Wed, 23 Mar 2022 13:15:06 +0000 (14:15 +0100)
committerNikita Popov <npopov@redhat.com>
Wed, 23 Mar 2022 14:39:39 +0000 (15:39 +0100)
With opaque pointers, the bitcast constexpr will not be present.

clang/lib/CodeGen/CGBlocks.cpp

index 50f5435..ff6ca09 100644 (file)
@@ -216,8 +216,9 @@ static llvm::Constant *buildBlockDescriptor(CodeGenModule &CGM,
     llvm::Constant *disposeHelper = buildDisposeHelper(CGM, blockInfo);
     elements.add(disposeHelper);
 
-    if (cast<llvm::Function>(copyHelper->getOperand(0))->hasInternalLinkage() ||
-        cast<llvm::Function>(disposeHelper->getOperand(0))
+    if (cast<llvm::Function>(copyHelper->stripPointerCasts())
+            ->hasInternalLinkage() ||
+        cast<llvm::Function>(disposeHelper->stripPointerCasts())
             ->hasInternalLinkage())
       hasInternalHelper = true;
   }