From 20275aa647c5733bc5b1929cba3fd1094c67fb1d Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 1 Dec 2016 03:53:23 -0800 Subject: fix permissive C++ code (MSVC /permissive-) (#8337) * fix permissive C++ code (MSVC /permissive-) These were found by the C++ compiler group when doing "Real world code" build tests using /permissive-. We are sharing these with you to help you clean up your code before the new version of the compiler comes out. For more information on /permissive- see https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/. ---------------------------- Under /permissive-, skipping the initialization of a variable is not allowed. As an extension the compiler allowed this when there was no destructor for the type. void func(bool b) { if(b) goto END; int value = 0; //error C2362: initialization of 'value' is skipped by 'goto END' int array[10]; //Okay, not initialized. //... value used here END: return; } Fix 1) Limit the scope of value: { int value = 0; //... value used here } END: Fix 2) Initialize/declare value before the 'goto' int value = 0; if(b) goto END; //... value used here END: Fix 3) Don't initialize value in the variable declaration. int value; value = 0 //... value used here END: ------------------- Alternative token representations. The following are reserved as alternative representations for operators: and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq //Can't use reserved names for variables: static int and = 0; // Change name (possibly to 'and_') void func() { _asm { xor edx,edx // xor is reserved, change to uppercase XOR or eax,eax // or is reserved, change to uppercase OR } } * Apply formatting patch. * fixes from code review. I addressed @janvorli requests from the pull request code review. --- src/vm/util.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'src/vm/util.cpp') diff --git a/src/vm/util.cpp b/src/vm/util.cpp index a7c264fb67..a96a56cd58 100644 --- a/src/vm/util.cpp +++ b/src/vm/util.cpp @@ -1950,17 +1950,18 @@ size_t GetLogicalProcessorCacheSizeFromOS() // Crack the information. Iterate through all the SLPI array entries for all processors in system. // Will return the greatest of all the processor cache sizes or zero - - size_t last_cache_size = 0; - - for (DWORD i=0; i < nEntries; i++) { - if (pslpi[i].Relationship == RelationCache) + size_t last_cache_size = 0; + + for (DWORD i=0; i < nEntries; i++) { - last_cache_size = max(last_cache_size, pslpi[i].Cache.Size); - } - } - cache_size = last_cache_size; + if (pslpi[i].Relationship == RelationCache) + { + last_cache_size = max(last_cache_size, pslpi[i].Cache.Size); + } + } + cache_size = last_cache_size; + } Exit: if(pslpi) @@ -1991,6 +1992,9 @@ DWORD GetLogicalCpuCountFromOS() DWORD nEntries = 0; + DWORD prevcount = 0; + DWORD count = 1; + // Try to use GetLogicalProcessorInformation API and get a valid pointer to the SLPI array if successful. Returns NULL // if API not present or on failure. SYSTEM_LOGICAL_PROCESSOR_INFORMATION *pslpi = IsGLPISupported(&nEntries) ; @@ -2001,9 +2005,6 @@ DWORD GetLogicalCpuCountFromOS() goto lDone; } - DWORD prevcount = 0; - DWORD count = 1; - for (DWORD j = 0; j < nEntries; j++) { if (pslpi[j].Relationship == RelationProcessorCore) -- cgit v1.2.3