Microsoft KB Archive/113117

From BetaArchive Wiki

BUG: Bad Code for Case 0xFFFFFFFF in Switch on Unsigned Long

Q113117

7.00 | 1.00 1.50 MS-DOS | WINDOWS kbtool kbbuglist ---------------------------------------------------------------------- The information in this article applies to: - The Microsoft C/C++ Compiler (CL.EXE), included with: - Microsoft C/C++ for MS-DOS, version 7.0 - Microsoft Visual C++ for Windows, versions 1.0 and 1.5 ---------------------------------------------------------------------- SYMPTOMS ======== The compiler generates incorrect code for a switch statement on an unsigned long variable involving a case 0xFFFFFFFF. The generated code may crash or behave unpredictably if the code is compiled with the /f- compiler switch. CAUSE ===== In switch statements involving a case 0xFFFFFFFF or case -1L, the compiler may generate incorrect code when the /f- option is used. RESOLUTION ========== To avoid the problem, one option is to use the /f compiler switch instead of the /f- compiler switch. Another option is to change the switch statement to switch on a signed long instead of an unsigned long. STATUS ====== Microsoft has confirmed this to be a problem in C/C++ for MS-DOS versions 7.0, 8.0, and 8.0c. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available. Sample Code ----------- /* Compile options needed: /f- */ #include void func (unsigned long dVar) { switch (dVar) { case 0: printf ("Error - switch on 0xFFFFFFFF went to 0\n"); break; case 0xFFFFFFFFUL: printf ("Switch statement was successful\n"); break; default: printf ("Error - switch on 0xFFFFFFFF went to default\n"); break; } } void main () { func (0xFFFFFFFFUL); } Additional reference words: 1.00 1.50 7.00 8.00 8.00c fast compile KBCategory: kbtool kbbuglist KBSubcategory: CodeGen

Keywords : kb16bitonly
Issue type : kbbug
Technology : kbVCsearch kbAudDeveloper kbCVCComp


Last Reviewed: May 5, 2001
© 2001 Microsoft Corporation. All rights reserved. Terms of Use.