[quote user="jianzhongxu"]
That symbol is defined in another source file. There were no problems when I didn't use program level optimization and call_assumptions=2.
[/quote]
If you use program-level optimisation (-pm), then you need to list all the source files together on the command line. What -pm does is to combine all the source files into a single translation unit before compiling; using it separately for separate files is not meaningful.
In other words, "cl6x -o a.c b.c c.c -pm -op2" is meaningful, because it sees and combines all three source files and then compiles them, expecting that they make up the whole program and thus there are no outside callers.
But "cl6x -o a.c -pm -op2" followed by "cl6x -o b.c -pm -op2" does not make sense, because it will compile each file in isolation as if it were the whole program.