```d
auto bar(int i){
  foo()
}
unittest{
  bar(3);
}
```
Given any definition of foo, any compiler bugs, how would you detect the `3` from `foo`?

___

My attempts at scanning the call stack didn't work but for anyone attempting it, I believe this breakdown of control flow may be part of the solution

```d
import std;
void bar(ubyte i){
    (&i).writeln("arg");
    //float f;
    //bool b;
    foo();
}
//---

//class badgoto:Throwable{
//    this(string){}
//    this(){}
//}
enum ubyte senty=117;
void foo(){
    int[0] callstack;
    static int call;
    static void* start;
    static void* start2;
    static void* end;
    static ubyte copy;
    switch(call++){
        case 0:
            start=cast(void*)&callstack;
            start2=cast(void*)&callstack;
            try{bar(senty);}//1st
            //catch(badgoto){}//3rd
            catch(Error){}
            copy=*cast(ubyte*)start2;
            break;
        case 1://2nd
            end=cast(void*)&callstack;
            start.writeln("start");
            end.writeln("end");
            while(start>end && *(cast(ubyte*)start)!=senty){
                writeln(start,":",*(cast(ubyte*)start));
                start--;
            }
            writeln(start,":",*(cast(ubyte*)start),"last");
            "---".writeln;
            start.writeln;
            end.writeln;
            start2=start2+(end-start);
            start2.writeln;
            throw new Error("");
            break;
        default:
            copy.writeln;
    }
}
unittest{
    bar(3);
    foo;
}
```

Reply via email to