diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll index ee901b9192e..5ecfc149fe3 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll @@ -943,4 +943,9 @@ module Consistency { strictcount(getASuccessor(node, t)) > 1 and successor = getASuccessor(node, t) } + + query predicate deadEnd(Node node) { + not node instanceof TExitNode and + not exists(getASuccessor(node, _)) + } } diff --git a/csharp/ql/test/library-tests/controlflow/splits/CONSISTENCY/CfgConsistency.expected b/csharp/ql/test/library-tests/controlflow/splits/CONSISTENCY/CfgConsistency.expected new file mode 100644 index 00000000000..04f7ae1f7d6 --- /dev/null +++ b/csharp/ql/test/library-tests/controlflow/splits/CONSISTENCY/CfgConsistency.expected @@ -0,0 +1,3 @@ +deadEnd +| SplittingStressTest.cs:95:13:95:14 | [b5 (line 3): false] access to parameter b5 | +| SplittingStressTest.cs:95:13:95:14 | [b5 (line 3): true] access to parameter b5 | diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImplShared.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImplShared.qll index ee901b9192e..5ecfc149fe3 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImplShared.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImplShared.qll @@ -943,4 +943,9 @@ module Consistency { strictcount(getASuccessor(node, t)) > 1 and successor = getASuccessor(node, t) } + + query predicate deadEnd(Node node) { + not node instanceof TExitNode and + not exists(getASuccessor(node, _)) + } }