Skip to content

Commit 4bce214

Browse files
Ensure !NDEBUG with LLVM_ENABLE_ABI_BREAKING_CHECKS does not segfault (#113588)
In SelectionDAG, `TargetTransformInfo::hasBranchDivergence()` can be called when both `NDEBUG` and `LLVM_ENABLE_ABI_BREAKING_CHECKS` are enabled. In that case, the class member `TTI` is still initialized to `nullptr`, causing a segfault. Fix this by ensuring that all the calls to `hasBranchDivergence` and `VerifyDAGDivergence` only occur when `NDEBUG` is disabled, and `LLVM_ENABLE_ABI_BREAKING_CHECKS` is enabled.
1 parent 87b3c07 commit 4bce214

File tree

4 files changed

+12
-12
lines changed

4 files changed

+12
-12
lines changed

llvm/include/llvm/CodeGen/SelectionDAG.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ class SelectionDAG {
584584
return Root;
585585
}
586586

587-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
587+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
588588
void VerifyDAGDivergence();
589589
#endif
590590

llvm/include/llvm/CodeGen/SelectionDAGISel.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class SelectionDAGISel {
5656
AssumptionCache *AC = nullptr;
5757
GCFunctionInfo *GFI = nullptr;
5858
SSPLayoutInfo *SP = nullptr;
59-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
59+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
6060
TargetTransformInfo *TTI = nullptr;
6161
#endif
6262
CodeGenOptLevel OptLevel;

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11744,7 +11744,7 @@ void SelectionDAG::CreateTopologicalOrder(std::vector<SDNode *> &Order) {
1174411744
}
1174511745
}
1174611746

11747-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
11747+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
1174811748
void SelectionDAG::VerifyDAGDivergence() {
1174911749
std::vector<SDNode *> TopoOrder;
1175011750
CreateTopologicalOrder(TopoOrder);

llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -940,7 +940,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
940940
<< "'\n";
941941
CurDAG->dump());
942942

943-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
943+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
944944
if (TTI->hasBranchDivergence())
945945
CurDAG->VerifyDAGDivergence();
946946
#endif
@@ -960,7 +960,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
960960
<< "'\n";
961961
CurDAG->dump());
962962

963-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
963+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
964964
if (TTI->hasBranchDivergence())
965965
CurDAG->VerifyDAGDivergence();
966966
#endif
@@ -982,7 +982,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
982982
<< "'\n";
983983
CurDAG->dump());
984984

985-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
985+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
986986
if (TTI->hasBranchDivergence())
987987
CurDAG->VerifyDAGDivergence();
988988
#endif
@@ -1006,7 +1006,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
10061006
<< "'\n";
10071007
CurDAG->dump());
10081008

1009-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
1009+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
10101010
if (TTI->hasBranchDivergence())
10111011
CurDAG->VerifyDAGDivergence();
10121012
#endif
@@ -1024,7 +1024,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
10241024
<< "'\n";
10251025
CurDAG->dump());
10261026

1027-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
1027+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
10281028
if (TTI->hasBranchDivergence())
10291029
CurDAG->VerifyDAGDivergence();
10301030
#endif
@@ -1040,7 +1040,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
10401040
<< "'\n";
10411041
CurDAG->dump());
10421042

1043-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
1043+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
10441044
if (TTI->hasBranchDivergence())
10451045
CurDAG->VerifyDAGDivergence();
10461046
#endif
@@ -1060,7 +1060,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
10601060
<< "'\n";
10611061
CurDAG->dump());
10621062

1063-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
1063+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
10641064
if (TTI->hasBranchDivergence())
10651065
CurDAG->VerifyDAGDivergence();
10661066
#endif
@@ -1080,7 +1080,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
10801080
<< "'\n";
10811081
CurDAG->dump());
10821082

1083-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
1083+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
10841084
if (TTI->hasBranchDivergence())
10851085
CurDAG->VerifyDAGDivergence();
10861086
#endif
@@ -1100,7 +1100,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
11001100
<< "'\n";
11011101
CurDAG->dump());
11021102

1103-
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
1103+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
11041104
if (TTI->hasBranchDivergence())
11051105
CurDAG->VerifyDAGDivergence();
11061106
#endif

0 commit comments

Comments
 (0)