Skip to main content

Branch coverage and unreachable branches

Task 1 

For each example from the section "Statement coverage and unreachable code" (Task 1) of this book, create a Control Flow Graph and identify  branches that are unreachable.

  1. Return Statement Before Print Statement
#include <stdio.h>
int main() 
{
    printf("text_1"); 
    return 0; 
    printf("text_2");
}

image.png

Unreachable:

  • printf("text_2");
    (It comes after the return, so it will never execute.)

2. Infinite Loop Before Statements

#include <stdio.h>
int main() 
{
  int x = 5;
  for (;;) 
  {
    if (x == 5)
    {
      break;
      printf("Hello World"); 
    } 
  }
  return 0;
}

image.png

Unreachable:

  • printf("Hello World");
    (It is placed after break, so it will never be executed.)

3. Continue Before Print

#include <stdio.h>
int main() 
{
  for (int i = 0; i < 10; i++)
  {
    continue;
    printf("Hello World");
  }
  return 0;
}

image.png


Unreachable:

  • printf("Hello World");
    (zawsze pomijane przez continue)

4. False Condition in if Statement

#include <stdio.h>
int main()
{
  double X = 1.55;
  if (X > 5) 
  {
    X++;
  }
  return 0;
}

image.png


Efectively Unreachable at Runtime (but structurally reachable):

    • X++;
      This line is not executed at runtime for X = 1.55, since the condition X > 5 is false. However, it could be executed if the value of X were different, so it’s not marked as unreachable in the graph syntax.

 Task 2 

For each example from the section "Statement coverage and unreachable code" (Task 2) of this book, create a Control Flow Graph and identify  branches that are unreachable.