c++ - code generation bug?
- Scott Mayo (40/40) Mar 17 2006 My first day using dmc. I fed it some C++ code that was known to be
- Heinz Saathoff (8/23) Mar 20 2006 Mybe an uninitialized pointer p? What makes me think it's this kind of
- Scott Mayo (2/4) Mar 20 2006 No, but it was my error - I went off the end of an array and clobbered t...
My first day using dmc. I fed it some C++ code that was known to be well-behaved; the resulting .exe crashed. I couldn't get the assembler listing working, but I was able to move code and get the correct behaviour. The crashing code: switch (p->cmd) //dies around here { case CMD_Set: setpins(p->pinset, p->set.onV); return 0; case CMD_SetFreq: for (i = 0; i < 5; ++i) ..etc The working code, which is equivalent: //DigitalMars compiler generates a jump to address 0 //if this is a case in the switch //no problem as an If, though. #if 01 if (p->cmd == CMD_Set) { setpins(p->pinset, p->set.onV); return 0; } #endif switch (p->cmd) { case CMD_Set: setpins(p->pinset, p->set.onV); return 0; case CMD_SetFreq: for (i = 0; i < 5; ++i) I'm new here - does anyone do support? I can make the source available; the compile command line was just dmc mycode.cpp The code uses no explicit new/delete/malloc/stl/iostreams/overloading or any interesting trickery. There is some inline asembler, but when I compile and run it as a console app using the microsoft IDE, that same assmbler runs just fine, so I don't think it's doing any damage. Really looks like a compiler issue to me. Help? Another trick that worked, then the code was part of the switch statement, was to put a fprintf in the case.
Mar 17 2006
Hello, Scott Mayo wrote...My first day using dmc. I fed it some C++ code that was known to be well-behaved; the resulting .exe crashed. I couldn't get the assembler listing working, but I was able to move code and get the correct behaviour. The crashing code: switch (p->cmd) //dies around here { case CMD_Set: setpins(p->pinset, p->set.onV); return 0; case CMD_SetFreq: for (i = 0; i < 5; ++i) ..etcMybe an uninitialized pointer p? What makes me think it's this kind of error is that your code works when adding the extra statements. I know that adding/deleting portions of code can influence the data arrangement on the stack and make uninitialized pointers crash/not crash the program. - Heinz
Mar 20 2006
Mybe an uninitialized pointer p? What makes me think it's this kind of error is that your code works when adding the extra statements.No, but it was my error - I went off the end of an array and clobbered the first entry of the switch jump table. The compiler is not to blame.
Mar 20 2006