diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index df9cde1db34bb7729d4157bc665250e5b149a735..fbacc4fdd6a4a21a650b78eb5414055d33e30f56 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,18 @@
+2013-02-06  Rainer Emrich  <rainer@emrich-ebersheim.de>
+
+	PR target/52123
+	* adaint.c (__gnat_check_OWNER_ACL): Cast from pointer via
+	SECURITY_DESCRIPTOR *
+	(__gnat_set_OWNER_ACL): Cast from DWORD to ACCESS_MODE
+	(__gnat_portable_spawn): Fix cast to char* const*
+	(add_handle): Cast from pointer via void **
+	(add_handle): Cast from pointer via int *
+	(__gnat_locate_exec_on_path): Cast from pointer via TCHAR *
+	(__gnat_locate_exec_on_path): Cast from pointer via char *
+	* initialize.c (append_arg): Cast from pointer via LPWSTR
+	(__gnat_initialize): Cast from pointer via LPWSTR
+	* seh_init.c (__gnat_map_SEH): Cast from pointer via FARPROC
+
 2013-02-06  Hristian Kirtchev  <kirtchev@adacore.com>
 
 	* gcc-interface/Make-lang.in: Enable System.Stack_Checking.Operations
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index 4b8ce5341effe674babb315ccfde9b4ad681c25d..dc94d63d5566ba53875a84f3f5127697db9c22a5 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -1982,7 +1982,7 @@ __gnat_check_OWNER_ACL
      GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,
      NULL, 0, &nLength);
 
-  if ((pSD = (PSECURITY_DESCRIPTOR) HeapAlloc
+  if ((pSD = (SECURITY_DESCRIPTOR *) HeapAlloc
        (GetProcessHeap (), HEAP_ZERO_MEMORY, nLength)) == NULL)
     return 0;
 
@@ -2059,7 +2059,7 @@ __gnat_set_OWNER_ACL
     return;
 
   BuildExplicitAccessWithName
-    (&ea, username, AccessPermissions, AccessMode, NO_INHERITANCE);
+    (&ea, username, AccessPermissions, (ACCESS_MODE) AccessMode, NO_INHERITANCE);
 
   if (AccessMode == SET_ACCESS)
     {
@@ -2384,7 +2384,7 @@ __gnat_portable_spawn (char *args[])
   strcat (args[0], args_0);
   strcat (args[0], "\"");
 
-  status = spawnvp (P_WAIT, args_0, (const char* const*)args);
+  status = spawnvp (P_WAIT, args_0, (char* const*)args);
 
   /* restore previous value */
   free (args[0]);
@@ -2540,9 +2540,9 @@ add_handle (HANDLE h, int pid)
     {
       plist_max_length += 1000;
       HANDLES_LIST =
-        xrealloc (HANDLES_LIST, sizeof (HANDLE) * plist_max_length);
+        (void **) xrealloc (HANDLES_LIST, sizeof (HANDLE) * plist_max_length);
       PID_LIST =
-        xrealloc (PID_LIST, sizeof (int) * plist_max_length);
+        (int *) xrealloc (PID_LIST, sizeof (int) * plist_max_length);
     }
 
   HANDLES_LIST[plist_length] = h;
@@ -2931,7 +2931,7 @@ __gnat_locate_exec_on_path (char *exec_name)
 
   #define EXPAND_BUFFER_SIZE 32767
 
-  wapath_val = alloca (EXPAND_BUFFER_SIZE);
+  wapath_val = (TCHAR *) alloca (EXPAND_BUFFER_SIZE);
 
   wapath_val [0] = '.';
   wapath_val [1] = ';';
@@ -2941,7 +2941,7 @@ __gnat_locate_exec_on_path (char *exec_name)
 
   if (!res) wapath_val [0] = _T('\0');
 
-  apath_val = alloca (EXPAND_BUFFER_SIZE);
+  apath_val = (char *) alloca (EXPAND_BUFFER_SIZE);
 
   WS2SC (apath_val, wapath_val, EXPAND_BUFFER_SIZE);
   return __gnat_locate_exec (exec_name, apath_val);
diff --git a/gcc/ada/initialize.c b/gcc/ada/initialize.c
index 6b92d27cb134ee73472177924acc28e63ba3ee36..00c4d04e13bc4db4473431fc5d4a7c2cec262aa0 100644
--- a/gcc/ada/initialize.c
+++ b/gcc/ada/initialize.c
@@ -88,14 +88,14 @@ append_arg (int *index, LPWSTR dir, LPWSTR value,
     {
       /* no dir prefix */
       dirlen = 0;
-      fullvalue = xmalloc ((vallen + 1) * sizeof(TCHAR));
+      fullvalue = (LPWSTR) xmalloc ((vallen + 1) * sizeof(TCHAR));
     }
   else
     {
       /* Add dir first */
       dirlen = _tcslen (dir);
 
-      fullvalue = xmalloc ((dirlen + vallen + 1) * sizeof(TCHAR));
+      fullvalue = (LPWSTR) xmalloc ((dirlen + vallen + 1) * sizeof(TCHAR));
       _tcscpy (fullvalue, dir);
     }
 
@@ -203,7 +203,7 @@ __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
 		     if (ldir != NULL)
 		       {
 			 int n = ldir - wargv[k] + 1;
-			 dir = xmalloc ((n + 1) * sizeof (TCHAR));
+			 dir = (LPWSTR) xmalloc ((n + 1) * sizeof (TCHAR));
 			 _tcsncpy (dir, wargv[k], n);
 			 dir[n] = _T('\0');
 		       }
diff --git a/gcc/ada/seh_init.c b/gcc/ada/seh_init.c
index 9b3c081081da095e1dc4bd669f399a48a2fe9d28..3a2cb516b23a7a2da0e344ec7487994c2f5bb884 100644
--- a/gcc/ada/seh_init.c
+++ b/gcc/ada/seh_init.c
@@ -91,7 +91,7 @@ __gnat_map_SEH (EXCEPTION_RECORD* ExceptionRecord, const char **msg)
       */
       if ((ExceptionRecord->ExceptionInformation[1] & 3) != 0
 	  || IsBadCodePtr
-	  ((void *)(ExceptionRecord->ExceptionInformation[1] + 4096)))
+	  ((FARPROC)(ExceptionRecord->ExceptionInformation[1] + 4096)))
 	{
 	  *msg = "EXCEPTION_ACCESS_VIOLATION";
 	  return &program_error;