My application is crashing when building with O2, but it runs with O0 and O3. Is there a list of options that O2 and O3 turn on? I'd like to test the individual optimizations to see which is causing the problem, and which option in O3 is "fixing" it. This crash doesn't occur with intel 15 or 16.
No, there is not such a list. Most of the optimizations don't have individual controls.
Have you tried version 18? If it still fails, submit a problem report to Intel and attach everything they need to reproduce the problem.
Since you did not attach a test case, there is little anyone here can do for you. Try 18 and if it still fails, use the Intel Online Service Center to report it.
>>My application is crashing when building with O2, but it runs with O0 and O3.
Check the results between O0 and O3. Lack of crash does not mean your program is running correctly. Have you run with all compiler warnings (especially interface checking) and runtime checks (array out of bounds checking, uninitialized variables, ...). Any errors in either can yield a program with undefined behavior (including the appearance of it running correctly).
Note, in a multi-file application, you can build with each file having different optimization levels.
And, don't forget to experiment between using/not using IPO, single file IPO, multi-file IPO.