The macro EXCEPTION_REGISTRATION has to be replaced by TCL_EXCEPTION_REGISTRATION in the files tclWin32Dll.c, tclWinChan.c and tclWinFCmd.c

Otherwise make stops with an error.

Alexey Pavlov has created an appropriate patch for Tcl 8.6.1


For a 8.5.15 patch see the lines below:

--- tclWin32Dll.c.orig	2013-08-30 17:58:40.000000000 +0200
+++ tclWin32Dll.c	2013-11-08 08:55:00.742333794 +0100
@@ -53,14 +53,14 @@ static int platformId;		/* Running under
  * them by creating an EXCEPTION_REGISTRATION within the activation record.
  */

-typedef struct EXCEPTION_REGISTRATION {
-    struct EXCEPTION_REGISTRATION *link;
+typedef struct TCL_EXCEPTION_REGISTRATION {
+    struct TCL_EXCEPTION_REGISTRATION *link;
     EXCEPTION_DISPOSITION (*handler)(
 	    struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
     void *ebp;
     void *esp;
     int status;
-} EXCEPTION_REGISTRATION;
+} TCL_EXCEPTION_REGISTRATION;
 #endif

 /*
@@ -1086,7 +1086,7 @@ TclWinCPUID(

 #   else

-    EXCEPTION_REGISTRATION registration;
+    TCL_EXCEPTION_REGISTRATION registration;

     /*
      * Execute the CPUID instruction with the given index, and store results
--- tclWinChan.c.orig	2013-08-30 17:58:40.000000000 +0200
+++ tclWinChan.c	2013-11-08 09:05:57.237807102 +0100
@@ -127,14 +127,14 @@ static Tcl_ChannelType fileChannelType =
  * them by creating an EXCEPTION_REGISTRATION within the activation record.
  */

-typedef struct EXCEPTION_REGISTRATION {
-    struct EXCEPTION_REGISTRATION* link;
+typedef struct TCL_EXCEPTION_REGISTRATION {
+    struct TCL_EXCEPTION_REGISTRATION *link;
     EXCEPTION_DISPOSITION (*handler)(
 	    struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
     void* ebp;
     void* esp;
     int status;
-} EXCEPTION_REGISTRATION;
+} TCL_EXCEPTION_REGISTRATION;
 #endif

 /*
@@ -1027,7 +1027,7 @@ Tcl_MakeFileChannel(
 				 * TCL_WRITABLE to indicate file mode. */
 {
 #if defined(HAVE_NO_SEH) && !defined(_WIN64)
-    EXCEPTION_REGISTRATION registration;
+    TCL_EXCEPTION_REGISTRATION registration;
 #endif
     char channelName[16 + TCL_INTEGER_SPACE];
     Tcl_Channel channel = NULL;
--- tclWinFCmd.c.orig	2013-08-30 17:58:40.000000000 +0200
+++ tclWinFCmd.c	2013-11-08 09:09:19.541771741 +0100
@@ -72,17 +72,17 @@ CONST TclFileAttrProcs tclpFileAttrProcs
 /*
  * Unlike Borland and Microsoft, we don't register exception handlers by
  * pushing registration records onto the runtime stack. Instead, we register
- * them by creating an EXCEPTION_REGISTRATION within the activation record.
+ * them by creating an TCL_EXCEPTION_REGISTRATION within the activation record.
  */

-typedef struct EXCEPTION_REGISTRATION {
-    struct EXCEPTION_REGISTRATION *link;
+typedef struct TCL_EXCEPTION_REGISTRATION {
+    struct TCL_EXCEPTION_REGISTRATION *link;
     EXCEPTION_DISPOSITION (*handler)(
 	    struct _EXCEPTION_RECORD *, void *, struct _CONTEXT *, void *);
     void *ebp;
     void *esp;
     int status;
-} EXCEPTION_REGISTRATION;
+} TCL_EXCEPTION_REGISTRATION;

 #endif

@@ -176,7 +176,7 @@ DoRenameFile(
 				 * (native). */
 {
 #if defined(HAVE_NO_SEH) && !defined(_WIN64)
-    EXCEPTION_REGISTRATION registration;
+    TCL_EXCEPTION_REGISTRATION registration;
 #endif
     DWORD srcAttr, dstAttr;
     int retval = -1;
@@ -568,7 +568,7 @@ DoCopyFile(
     CONST TCHAR *nativeDst)	/* Pathname of file to copy to (native). */
 {
 #if defined(HAVE_NO_SEH) && !defined(_WIN64)
-    EXCEPTION_REGISTRATION registration;
+    TCL_EXCEPTION_REGISTRATION registration;
 #endif
     int retval = -1;