The good news is that the code is much simpler than what you get from gcc and clang. The bad news is that it doesn't handle Infinity and NaN according to the C99 specs as far I can tell (which is why it is so much simpler).
Is the compiler intended to be C99 conforming with these flag options or is there another set of flags that forces it to be?
I get exactly the same code when I specify -std=c99 .
As far I can tell this is a bug in ICC's support for complex float/double. As a non-corporate user is there some way I can report this bug? I am just using the version of icpc installed at my university.
The point is that in order to be compliant, as I specified in the question, the code needs to check for infinities. The code to do that correctly is given in Annex G.5.1.6. Here is a link that discusses it:
The code ICC produces simply doesn't do any of these checks.
If you use INF + i NAN as input for the ICC function the result is NaN + i NaN while it should be a complex number with at least one component infinite (per standard). I don't know how to test this except directly using the assembly.
I also asked a very similar question with x*y for which it's easier to make a test case only in C. Take a look at it here https://software.intel.com/en-us/forums/intel-c-compiler/topic/711186 .