The error means that the compiler tried but was unable to generate output for the indicated C source. It usually does not indicate that the C code is invalid, but review the code to be sure.
This error will most likely occur with complex expressions, particularly on devices with few working registers and simple architectures, e.g. baseline devices. Remember that C code that may not look complicated to you may be very difficult to implement in assembly code.
The solution is to try to simplify the expression, maybe using a temporary variable to hold an intermediate result. The compiler often has to resort to using compiler-defined temporary variables to hold intermediate results so this work around is often no less efficient that what would be otherwise possible.
Microchip Technology acquires Atmel