Undefined behaviour in command line parser

In these days I’ve integrated llc code into my compiler.

I had an undefined behaviour because when cl::AddExtraVersionPrinter(TargetRegistry::printRegisteredTargetsForVersion) is called, the modules I give to the code in input to compile got somehow “corrupted" by this function.
It is definitely an undefined behaviour because every debug I do, modules gets different changes, producing different assertions every run:

  • Target triple string gets changes with null characters (“\0\0\0\0\0\0\0\0\0\0\0”), or other values that have nothing to do with an llvm triple
  • Head of the function list contained in the module becomes NULL (I said functions but maybe other components may be nullified as well)

I tried to see where the modules change, and I figured out that 6/10 times the target triple is ok before that instruction, then it takes weird changes after it.
The problem is that function because when I removed it, everything worked fine.

I didn’t figure out how that function may change modules that way, so I just report this bug here.

Hi Lorenzo,

Thanks for the report. Can you create a new entry in Bugzilla? With
steps to reproduce (command line options, etc) and how you're getting
the value of the triple (debugger?).

http://llvm.org/bugs/

cheers,
--renato

Done, I added as much info as I could that describes how I got that behavior.

Thanks! Just for reference, this is the bug:

https://llvm.org/bugs/show_bug.cgi?id=27089

cheers,
--renato