05.02.2010
/Wp64 switch and template processing error
While maintaining the analyzer Viva64 (included into PVS-Studio) we often comment upon the switch /Wp64 of Microsoft Visual C++.»
03.02.2010
Parallel notes N1 - OpenMP technology
In the next few posts we will tell you about using multi-core processors in practice.»
29.01.2010
64-bit technologies - one more trend in the modern software
In the blogs and forums, there is much discussion of multi-core processors as an evident step of computer system development.»
2.02.2010 "Lessons of 64-bit C/C++ software development" are now available on our site.»
1.02.2010 PVS-Studio 3.45 New Version Released!»
21.01.2010 PVS-Studio 3.44 New Version Released!»
10.12.2009
PVS-Studio FAQ
This paper contains some questions and answers about PVS-Studio code analyzer by OOO "Program Verification Systems".»
09.12.2009
VivaCore FAQ
This paper contains some questions and answers about VivaCore C/C++ code analysis library by OOO "Program Verification Systems"»
23.11.2009
PVS-Studio: using the function "Mark as False Alarm"
The article describes and demonstrates by an example the use of PVS-Studio 3.40 new function "Mark as False Alarm". »
/Wp64 (Detect 64-Bit Portability Issues) is the key of Visual C++ compiler. The key appeared in Visual Studio 2003 and was intended for preparing migration of applications on 64-bit systems. In Visual Studio 2008 /Wp64 key is considered obsolete for it is high time we began to compile 64-bit applications and not to prepare for them.
When defining /Wp64 key the compiler detects some potential errors which can occur when compiling C/C++ code for 64-bit systems. Test of the code consists in that the types marked by the key word __w64 in 32-bit code are interpreted as 64-bit types during the test.
For example, we have the following code:
typedef int MyInt32; #ifdef _WIN64 typedef __int64 MySSizet; #else typedef int MySSizet; #endif void foo() { MyInt32 value32 = 10; MySSizet size = 20; value32 = size; } |
"value32 = size;" expression on a 64-bit system will cause value cutoff and, consequently, to a potential error. We want to diagnose it. But when compiling a 32-bit application everything is correct and we won't get a warning message.
To prepare for 64-bit systems we should add /Wp64 key and insert the key word __w64 when defining MySSizet type in a 32-bit version. As the result we have the following code:
typedef int MyInt32; #ifdef _WIN64 typedef __int64 MySSizet; #else typedef int __w64 MySSizet; // Add __w64 keyword #endif void foo() { MyInt32 value32 = 10; MySSizet size = 20; value32 = size; // C4244 64-bit int assigned to 32-bit int } |
Now we'll get the warning message C4244 which will help us to prepare for porting the code on a 64-bit platform.
You should understand that /Wp64's abilities are rather limited. A more detailed and specialized code test can be performed by the commercial tool Viva64 developed specially for simplifying port of applications on 64-bit systems.