Refer to the Nios® II 6.0 Errata for all the known issues with the Nios II C2H Compiler. In addition to that material the following issue has been recently discovered.
The C2H compiler supports accelerating functions that call other functions. All subfunctions are accelerated by the C2H compiler. If the subfunction is passed any of the following as arguments, a functional or compilation failure will occur:
Memory Operation
example: foo(a[i]);
Postfix/Prefix Increment/Decrement
example: foo(b );
Non-trivial Arithmetic (Multiply, Variable Shift, Division, and Modulo)
example: foo(b * c);
Compound Assignment
example: foo(b = c);
Subfunction Call
example: foo(bar(b), c);
The workaround is to assign the argument to a temporary variable and pass the temporary variable to the subfunction. If the temporary variable is not used anywhere else in the accelerated function, this extra line of code will synthesize into no additional logic resources.