BUG: Incorrect C4762 Generated with Optimizing Compiler

Last reviewed: July 22, 1997
Article ID: Q113061
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

When compiling in compact, large, or huge memory model, the optimizing compiler incorrectly generates the warning:

   warning C4762: Near/far mismatch in argument: conversion supplied

The warning appears when generating far pointer references to near variables and then passing those references to functions that explicitly expect near pointers.

STATUS

Microsoft has confirmed this to be a problem in C/C++ 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.

MORE INFORMATION

Code demonstrating this problem is shown below. When building under large or compact model, cases 1 and 2 will force a near/far conversion. Because the compiler does not know where the pointer reference to the near variables will be used, it produces a far pointer to conform with the model chosen. The compiler then converts the far pointer into a near pointer again because func1 expects a near pointer. Despite these warnings, the code is correct and the two function calls execute correctly.

In the Case 3, the variable is already a near pointer. No conversions are necessary, and therefore no warning occurs.

Sample Code

/* Compile options needed:   /AL ( or /AC or /AH) /f-   */
/* Any type for "testtype" produces the error where noted */

typedef int testtype;

 testtype _near narrtype[ 100 ];
 testtype _near ntype;
 testtype _near *nptype;

void _near func1( testtype _near *np_funcvar)
{}

void main(void)
{
   func1(narrtype);   // Causes C4762
   func1(&ntype);     // Causes C4762

   nptype  = narrtype;
   func1(nptype);     //Does NOT cause C4762
}


Additional reference words: 1.00 1.50 7.00 8.00 8.00c
KBCategory: kbtool kbbuglist
KBSubcategory: CLIss
Keywords : kb16bitonly


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: July 22, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.