From bbcfce4badac3dfeb64c1bb413bbe0dc53eca326 Mon Sep 17 00:00:00 2001 From: Alex Richardson Date: Thu, 23 Apr 2020 13:01:30 +0100 Subject: [PATCH] Use FrameIndexTy for stack protector Using getValueType() is not correct for architectures extended with CHERI since we need a pointer type and not the value that is loaded. While stack protector is useless when you have CHERI (since CHERI provides much stronger security guarantees), we still have a test to check that we can generate correct code for checks. Merging b281138a1b67ca4405b77d774adc3de72742e7a2 into our tree broke this test. Fix by using TLI.getFrameIndexTy(). Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D77785 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 38195e412623..51539f381887 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -6360,7 +6360,7 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, int FI = FuncInfo.StaticAllocaMap[Slot]; MFI.setStackProtectorIndex(FI); - EVT PtrTy = Src.getValueType(); + EVT PtrTy = TLI.getFrameIndexTy(DAG.getDataLayout()); SDValue FIN = DAG.getFrameIndex(FI, PtrTy);