title: OpenCL and indirect recursion
body: <p>Opencl does not support recursive functions but does this cover indirect versions too?</p>
  
  <pre><code>void recursiveA(int *a,int b) // call this first to start recursion
  {
       a[b]=3; 
       if(b&lt;10)
       {
          recursiveB(a,b+1);  // A calls B
       }
  }
  
  
  void recursiveB(int *a, int b)
  {
       a[b]=3;
       if(b&lt;10)
       {
          recursiveA(a,b+1); // B calls A while A still not finished before
                             // and entry point &amp; arguments of A are corrupt ?
       }
  
  }
  </code></pre>
  
  <p>instead of</p>
  
  <pre><code>void recurse(int *a, int b)
  {
       a[b]=3;
       if(b&lt;10)
       {
          recurse(a,b+1); // some OpenCL devices does not have the ability so this is not
                          // possible in OpenCL
       }
  
  }
  </code></pre>
  
  <p>So, can we call a "R" function from another function even if first "R" is not finished? Those functions use only same constant addresses for arguments everytime we call them?
  <strong>Do I have to use a custom "stack" implementation to do indirect recursion until Opencl 2.0 is released?</strong></p>