KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q319797: BUG: An Access Violation Occurs When You Use the /Og Switch for

Article: Q319797
Product(s): Microsoft C Compiler
Version(s): 3.0,4.0
Operating System(s): 
Keyword(s): 
Last Modified: 08-APR-2002

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Windows CE eMbedded Visual C++, version 3.0, on platform(s):
   - x86 
- Microsoft Windows CE Platform Builder, versions 3.0, 4.0, on platform(s):
   - x86 
-------------------------------------------------------------------------------

SYMPTOMS
========

When an application makes a call and uses a parameter that is the result of a
static member function, or uses a parameter that is a result of a non-member
function that is returning an object, the application may generate an access
violation.

CAUSE
=====

Global optimization may push an incorrect pointer for the object parameter in
the call. Subsequent use of this object pointer in the callee may result in
corrupted memory.

RESOLUTION
==========

Turn off global optimization for the module or function that encounters these
problems.

To turn off global optimization, use one of the following methods:

- Use the /Og- switch.

- Do not include /Og or switches that use it, such as /Ox.

- Use the IDE compiler optimization project settings.

- Use #pragma optimize.

STATUS
======

Microsoft has confirmed this to be a bug in the Microsoft products listed at the
beginning of this article.

MORE INFORMATION
================

Steps to Reproduce Behavior
---------------------------

  struct ClassA
  {
  	virtual ~ClassA()
  	{
  	}

  	static ClassA CreateObject() 
  	{ 
  		return ClassA(); 
  	}
  };

  void fn2( ClassA a , int* pi )
  {
  	*pi = -1;
  }

  void main()
  {
  	int i;

  	fn2( ClassA::CreateObject(), &i);
  }

Additional query words:

======================================================================
Keywords          :  
Technology        : kbVCsearch kbAudDeveloper kbWinCEETKSearch kbWinCESearch
Version           : :3.0,4.0
Issue type        : kbbug
Solution Type     : kbpending

=============================================================================

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.

Copyright Microsoft Corporation 1986-2002.