The NSS FileCheck variables at the end of the
CodeGenCXX/split-stacks.cpp clang testcase are off by 1, resulting in
the use of an undefined variable (NSS3). One of the CHECK-NOT is also
redundant because _Z8tnosplitIiEiv uses the same attribute as _Z3foov
without split stack. This commit fixes that.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
clang/test/CodeGenCXX/split-stacks.cpp | ||
---|---|---|
30–31 | I find NSS2 equals to NSS0, which is #0. It looks good to me if this could handle the inconsistency. |
clang/test/CodeGenCXX/split-stacks.cpp | ||
---|---|---|
30–31 | Only without split stack (second RUN line). With split stack I get: ; Function Attrs: noinline nounwind optnone uwtable mustprogress define dso_local i32 @_Z3foov() #0 { entry: ret i32 0 } ; Function Attrs: noinline optnone uwtable mustprogress define dso_local i32 @_Z7nosplitv() #1 { entry: %call = call i32 @_Z8tnosplitIiEiv() ret i32 %call } ; Function Attrs: noinline nounwind optnone uwtable mustprogress define linkonce_odr dso_local i32 @_Z8tnosplitIiEiv() #2 comdat { entry: ret i32 0 } |
clang/test/CodeGenCXX/split-stacks.cpp | ||
---|---|---|
30–31 | Yeah, this is what I get without split stack: ; Function Attrs: noinline nounwind optnone uwtable mustprogress define dso_local i32 @_Z3foov() #0 { entry: ret i32 0 } ; Function Attrs: noinline optnone uwtable mustprogress define dso_local i32 @_Z7nosplitv() #1 { entry: %call = call i32 @_Z8tnosplitIiEiv() ret i32 %call } ; Function Attrs: noinline nounwind optnone uwtable mustprogress define linkonce_odr dso_local i32 @_Z8tnosplitIiEiv() #0 comdat { entry: ret i32 0 } attributes #0 = { noinline nounwind optnone uwtable mustprogress "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { noinline optnone uwtable mustprogress "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } My compiler version is latest trunk:2ea6ed9b70c6495342e39a7d1. |
clang/test/CodeGenCXX/split-stacks.cpp | ||
---|---|---|
30–31 | We get the same thing. The code I pasted about was *with* split stack. Since it's the same FileCheck directive with and without split stack it makes sense to keep NSS0 and NSS2 separate otherwise the split-stack case would fail. |
clang/test/CodeGenCXX/split-stacks.cpp | ||
---|---|---|
30–31 | The FileCheck directive seems different with and without split stack. And the number of attributes is different from what we paste. |
clang/test/CodeGenCXX/split-stacks.cpp | ||
---|---|---|
30–31 | Ah my bad, you are absolutely right. Difference in attributes is not a problem since these are CHECK-NOT directives but I've changed it nonetheless. |
I find NSS2 equals to NSS0, which is #0. It looks good to me if this could handle the inconsistency.