Optimization Help

I am working on a program which links with the FTDI USB driver (ftd2xx.dylib). Prior to a couple of hours ago I had only worked with Debug builds of my code (no compiler optimizations). In testing a production build, I found that using anything other than -O0 results in the FTDI driver returning bad data; just a lot of zeroes. I tested and re-tested to make sure that changing just that one option was the issue. And I have absolutely no idea how to go about figuring out what the actual issue is; or what a reasonable remedy is.

If the likely cause isn't obvious based on the little bit of information I've provided, please tell me what details I can provide that would be useful. I don't know where to begin.

Any help would be appreciated.


It's impossible to tell without more information, but the most likely cause of this is if your code has undefined behavior. For example, if it uses variables without initializing them, reads off the end of an array, etc, the code may significantly change behavior after optimization. Tools like valgrind are often helpful tracking these sorts of things down. If you're building with clang head, you can try the experimental -fcatch-undefined-behavior flag.