The code below fails to compile with
Error: function `test1.foo` no `return exp;` or `assert(0);` at end of function
unless the commented-out assert(0) is included.

Please, what rule of D is being broken?
foo does not unconditionally loop, and the only places where foo returns, it returns with a bool.

```
bool foo() {
   import std.stdio;
   int I1;
   int nogoagain;

   while(true) {

      I1 = 2;
      while( I1 <= 10) {

         if (I1 != 5) {
         } else {
             goto L2;
         }
         I1 = I1 + 1;
      }
      return true;


      L2:;
      readf(" %s", nogoagain);
      if (nogoagain == 5) {
         return false;
      } else {
      }
   }
//   assert(0);
}


void main() {

   import std.stdio;

   writeln("A");

   writeln(foo());
}

```

Reply via email to