peter.smith added a comment. This looks good to me. Will be worth waiting for a day to give the US time zone time to leave any comments.
I note that this is also broken in -fsanitize=kcfi [*] (https://reviews.llvm.org/D135411) although fixing that is a separate patch. Would you be able to raise a github issue to cover that? As an end-to-end example for: typedef int Fptr(void); // pf could be Arm (bit 0 clear) or Thumb (bit 0 set) int f(Fptr* pf) { return pf(); } This generates: f: .fnstart @ %bb.0: @ %entry push {r4, lr} mov r3, r0 bic r0, r0, #1 movw r2, #51966 ldr r1, [r0, #-8] movt r2, #49413 cmp r1, r2 bne .LBB0_2 @ %bb.1: @ %typecheck ldr r0, [r0, #-4] movw r1, #50598 movt r1, #14001 cmp r0, r1 bne .LBB0_3 .LBB0_2: @ %cont1 pop.w {r4, lr} bx r3 Which gets the address of the signature and type correct, while preserving the thumb bit on the register used for the indirect branch. -fsanitize=kcfi output is not correct for a Thumb destination: f: .fnstart // r0 will have thumb bit set if destination thumb ldr r1, [r0, #-4] movw r2, #50598 movt r2, #14001 cmp r1, r2 bne .LBB0_2 bx r0 .LBB0_2: .inst 0xe7ffdefe Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D151308/new/ https://reviews.llvm.org/D151308 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits