[clang] [llvm] [SystemZ, Clang] Enable verification of int args extensions by default. (PR #223755)
Jonas Paulsson via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 17 10:10:57 PDT 2026
JonPsson1 wrote:
ok, will try to fix those one at a time: I think TypeSanitizer is ok now: https://github.com/llvm/llvm-project/pull/224366
When I removed isInternal(), compiler-rt did not even build as the buildgo.sh script now failed. It seems that ArgumentPromotionPass will change an internal function to receive a loaded value directly instead of the pointer:
```
define dso_local void @_Z8AddStackv() local_unnamed_addr #0 {
entry:
%agg.tmp = alloca %struct.StackTrace, align 8
call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %agg.tmp, ptr noundef nonnull align 8 dereferenceable(16) @AddStack_stack, i64 16, i1 false), !tbaa.struct !7
%call = call fastcc noundef ptr @_ZL14SymbolizeStack10StackTrace(ptr nofreeobj noundef align 8 dead_on_return dereferenceable(16) %agg.tmp)
unreachable
}
define internal fastcc noundef ptr @_ZL14SymbolizeStack10StackTrace(ptr nofreeobj noundef nonnull readonly align 8 captures(none) dead_on_return dereferenceable(16) %trace) unnamed_addr #0 {
entry:
br label %for.cond
for.cond: ; preds = %for.cond, %entry
%si.0 = phi i64 [ undef, %entry ], [ %inc, %for.cond ]
%size = getelementptr inbounds nuw i8, ptr %trace, i64 8
%0 = load i32, ptr %size, align 8, !tbaa !17
%conv = sext i32 %0 to i64
%cmp = icmp slt i64 %si.0, %conv
call void @llvm.assume(i1 %cmp)
call void @_Z13SymbolizeCodev()
%inc = add nsw i64 %si.0, 1
br label %for.cond, !llvm.loop !19
}
; *** IR Dump After ArgumentPromotionPass on (_ZL14SymbolizeStack10StackTrace) ***
; Function Attrs: mustprogress
define internal fastcc noundef ptr @_ZL14SymbolizeStack10StackTrace(i32 %trace.8.val) unnamed_addr #0 {
entry:
br label %for.cond
for.cond: ; preds = %for.cond, %entry
%si.0 = phi i64 [ undef, %entry ], [ %inc, %for.cond ]
%conv = sext i32 %trace.8.val to i64
%cmp = icmp slt i64 %si.0, %conv
call void @llvm.assume(i1 %cmp)
call void @_Z13SymbolizeCodev()
%inc = add nsw i64 %si.0, 1
br label %for.cond, !llvm.loop !19
}
; Function Attrs: mustprogress
define dso_local void @_Z8AddStackv() local_unnamed_addr #0 {
entry:
%agg.tmp = alloca %struct.StackTrace, align 8
call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %agg.tmp, ptr noundef nonnull align 8 dereferenceable(16) @AddStack_stack, i64 16, i1 false), !tbaa.struct !7
%0 = getelementptr i8, ptr %agg.tmp, i64 8
%agg.tmp.val = load i32, ptr %0, align 8
%1 = call fastcc noundef ptr @_ZL14SymbolizeStack10StackTrace(i32 %agg.tmp.val)
unreachable
}
```
So the question becomes what attribute to add... I might give it a "NoExt" as it is just a loaded i32, but I guess any extension would be harmless, or?
https://github.com/llvm/llvm-project/pull/223755
More information about the cfe-commits
mailing list