Fix building CoreCLR with Clang 3.9 (dotnet/coreclr#8311)
authorJan Vorlicek <janvorli@microsoft.com>
Sun, 27 Nov 2016 04:34:03 +0000 (05:34 +0100)
committerJan Kotas <jkotas@microsoft.com>
Sun, 27 Nov 2016 04:34:03 +0000 (20:34 -0800)
There were few constructs that Clang 3.9 didn't like due to its strict
C++ standard conformance rules.

Commit migrated from https://github.com/dotnet/coreclr/commit/9f4bf341ad236df7d16bbdba0c4111393ea141d2

src/coreclr/src/debug/daccess/dacdbiimpl.cpp
src/coreclr/src/debug/di/rsmain.cpp
src/coreclr/src/debug/di/rspriv.h
src/coreclr/src/debug/ee/debugger.cpp
src/coreclr/src/debug/ee/debugger.h
src/coreclr/src/debug/ildbsymlib/symwrite.h
src/coreclr/src/debug/inc/dacdbiinterface.h
src/coreclr/src/pal/src/exception/seh.cpp
src/coreclr/tests/src/Common/Platform/platformdefines.cpp
src/coreclr/tests/src/Common/Platform/platformdefines.h
src/coreclr/tests/src/Interop/common/types.h

index 26e3d6c..ae266e8 100644 (file)
@@ -90,7 +90,7 @@ IDacDbiInterface::IAllocator * g_pAllocator = NULL;
 //
 
 // Need a class to serve as a tag that we can use to overload New/Delete.
-#define forDbi (*(forDbiWorker *)NULL)
+forDbiWorker forDbi;
 
 void * operator new(size_t lenBytes, const forDbiWorker &)
 {
index b568575..0f57787 100644 (file)
@@ -40,6 +40,8 @@
 RSDebuggingInfo g_RSDebuggingInfo_OutOfProc = {0 }; // set to NULL
 RSDebuggingInfo * g_pRSDebuggingInfo = &g_RSDebuggingInfo_OutOfProc;
 
+// The following instances are used for invoking overloaded new/delete
+forDbiWorker forDbi;
 
 #ifdef _DEBUG
 // For logs, we can print the string name for the debug codes.
index bc0ea59..18920ad 100644 (file)
@@ -177,7 +177,7 @@ private:
     USHORT m_usPort;
 };
 
-#define forDbi (*(forDbiWorker *)NULL)
+extern forDbiWorker forDbi;
 
 // for dbi we just default to new, but we need to have these defined for both dac and dbi
 inline void * operator new(size_t lenBytes, const forDbiWorker &)
index a06811c..d67cb41 100644 (file)
@@ -75,6 +75,9 @@ SVAL_IMPL_INIT(BOOL, Debugger, s_fCanChangeNgenFlags, TRUE);
 
 bool g_EnableSIS = false;
 
+// The following instances are used for invoking overloaded new/delete
+InteropSafe interopsafe;
+InteropSafeExecutable interopsafeEXEC;
 
 #ifndef DACCESS_COMPILE
 
index 6368647..9cdf546 100644 (file)
@@ -3512,10 +3512,10 @@ public:
  * ------------------------------------------------------------------------ */
 
 class InteropSafe {};
-#define interopsafe (*(InteropSafe*)NULL)
+extern InteropSafe interopsafe;
 
 class InteropSafeExecutable {};
-#define interopsafeEXEC (*(InteropSafeExecutable*)NULL)
+extern InteropSafeExecutable interopsafeEXEC;
 
 #ifndef DACCESS_COMPILE
 inline void * __cdecl operator new(size_t n, const InteropSafe&)
index 055b8ec..54ab11a 100644 (file)
@@ -839,7 +839,8 @@ public:
         {
             // Help mitigate the impact of buffer overflow
             // Fail fast with a null-reference AV
-            return *(static_cast<T*>(0)) ;
+            volatile char* nullPointer = nullptr;
+            *nullPointer;
         }
         return m_array[ i ];
     }
index e61e240..569ccba 100644 (file)
@@ -32,7 +32,7 @@
 template<class T> void DeleteDbiMemory(T *p);
 // Need a class to serve as a tag that we can use to overload New/Delete.
 class forDbiWorker {};
-#define forDbi (*(forDbiWorker *)NULL)
+extern forDbiWorker forDbi;
 extern void * operator new(size_t lenBytes, const forDbiWorker &);
 extern void * operator new[](size_t lenBytes, const forDbiWorker &);
 extern void operator delete(void *p, const forDbiWorker &);
index 473c490..ad09e02 100644 (file)
@@ -274,7 +274,7 @@ SEHProcessException(PAL_SEHException* exception)
                     {
                         // The exception happened in the page right below the stack limit,
                         // so it is a stack overflow
-                        write(STDERR_FILENO, StackOverflowMessage, sizeof(StackOverflowMessage) - 1);
+                        (void)write(STDERR_FILENO, StackOverflowMessage, sizeof(StackOverflowMessage) - 1);
                         PROCAbort();
                     }
                 }
index 4bef170..82061ac 100644 (file)
@@ -277,7 +277,7 @@ DWORD TP_GetFullPathName(LPWSTR fileName, DWORD nBufferLength, LPWSTR lpBuffer)
        return GetFullPathNameW(fileName, nBufferLength, lpBuffer, NULL);
 #else
        char nativeFullPath[MAX_PATH];
-       realpath(HackyConvertToSTR(fileName), nativeFullPath);
+       (void)realpath(HackyConvertToSTR(fileName), nativeFullPath);
        LPWSTR fullPathForCLR = HackyConvertToWSTR(nativeFullPath);
        wcscpy_s(lpBuffer, MAX_PATH, fullPathForCLR);
        return wcslen(lpBuffer);
index 49e8f88..c196b0c 100644 (file)
@@ -87,7 +87,7 @@ typedef void* HMODULE;
 typedef void* ULONG_PTR;
 typedef unsigned error_t;
 typedef void* LPVOID;
-typedef char BYTE;
+typedef unsigned char BYTE;
 typedef WCHAR OLECHAR;
 #endif
 
index 7d7f776..cb59c42 100755 (executable)
@@ -28,7 +28,7 @@ typedef void* HMODULE;
 typedef void* ULONG_PTR;
 typedef unsigned error_t;
 typedef void* LPVOID;
-typedef char BYTE;
+typedef unsigned char BYTE;
 typedef WCHAR OLECHAR;
 
 typedef unsigned int UINT_PTR;
@@ -54,4 +54,4 @@ typedef int*  DWORD_PTR;
 #define FALSE 0
 #endif
 
-#endif //_INTEROP_TYPES__H
\ No newline at end of file
+#endif //_INTEROP_TYPES__H