diff --git a/dlls/msvcrt/cppexcept.c b/dlls/msvcrt/cppexcept.c
index 52b17a4..c4679c3 100644
--- a/dlls/msvcrt/cppexcept.c
+++ b/dlls/msvcrt/cppexcept.c
@@ -45,8 +45,8 @@
 
 DWORD CDECL cxx_frame_handler( PEXCEPTION_RECORD rec, cxx_exception_frame* frame,
                                PCONTEXT context, EXCEPTION_REGISTRATION_RECORD** dispatch,
-                               cxx_function_descr *descr, EXCEPTION_REGISTRATION_RECORD* nested_frame,
-                               int nested_trylevel );
+                               const cxx_function_descr *descr,
+                               EXCEPTION_REGISTRATION_RECORD* nested_frame, int nested_trylevel );
 
 /* call a function with a given ebp */
 inline static void *call_ebp_func( void *func, void *ebp )
@@ -112,7 +112,7 @@
     }
 }
 
-static void dump_function_descr( const cxx_function_descr *descr, const cxx_exception_type *info )
+static void dump_function_descr( const cxx_function_descr *descr )
 {
     UINT i;
     int j;
@@ -133,7 +133,7 @@
                  descr->tryblock[i].catchblock_count );
         for (j = 0; j < descr->tryblock[i].catchblock_count; j++)
         {
-            catchblock_info *ptr = &descr->tryblock[i].catchblock[j];
+            const catchblock_info *ptr = &descr->tryblock[i].catchblock[j];
             TRACE( "        %d: flags %x offset %d handler %p type %p %s\n",
                      j, ptr->flags, ptr->offset, ptr->handler,
                      ptr->type_info, dbgstr_type_info( ptr->type_info ) );
@@ -142,7 +142,8 @@
 }
 
 /* check if the exception type is caught by a given catch block, and return the type that matched */
-static const cxx_type_info *find_caught_type( cxx_exception_type *exc_type, catchblock_info *catchblock )
+static const cxx_type_info *find_caught_type( cxx_exception_type *exc_type,
+                                              const catchblock_info *catchblock )
 {
     UINT i;
 
@@ -168,7 +169,7 @@
 
 /* copy the exception object where the catch block wants it */
 static void copy_exception( void *object, cxx_exception_frame *frame,
-                            catchblock_info *catchblock, const cxx_type_info *type )
+                            const catchblock_info *catchblock, const cxx_type_info *type )
 {
     void **dest_ptr;
 
@@ -197,7 +198,7 @@
 }
 
 /* unwind the local function up to a given trylevel */
-static void cxx_local_unwind( cxx_exception_frame* frame, cxx_function_descr *descr, int last_level)
+static void cxx_local_unwind( cxx_exception_frame* frame, const cxx_function_descr *descr, int last_level)
 {
     void (*handler)();
     int trylevel = frame->trylevel;
@@ -227,7 +228,7 @@
     EXCEPTION_REGISTRATION_RECORD frame;     /* standard exception frame */
     EXCEPTION_RECORD             *prev_rec;  /* previous record to restore in thread data */
     cxx_exception_frame          *cxx_frame; /* frame of parent exception */
-    cxx_function_descr           *descr;     /* descriptor of parent exception */
+    const cxx_function_descr     *descr;     /* descriptor of parent exception */
     int                           trylevel;  /* current try level */
     EXCEPTION_RECORD             *rec;       /* rec associated with frame */
 };
@@ -276,7 +277,7 @@
 /* find and call the appropriate catch block for an exception */
 /* returns the address to continue execution to after the catch block was called */
 inline static void call_catch_block( PEXCEPTION_RECORD rec, cxx_exception_frame *frame,
-                                     cxx_function_descr *descr, int nested_trylevel,
+                                     const cxx_function_descr *descr, int nested_trylevel,
                                      cxx_exception_type *info )
 {
     UINT i;
@@ -289,7 +290,7 @@
 
     for (i = 0; i < descr->tryblock_count; i++)
     {
-        tryblock_info *tryblock = &descr->tryblock[i];
+        const tryblock_info *tryblock = &descr->tryblock[i];
 
         if (trylevel < tryblock->start_level) continue;
         if (trylevel > tryblock->end_level) continue;
@@ -297,7 +298,7 @@
         /* got a try block */
         for (j = 0; j < tryblock->catchblock_count; j++)
         {
-            catchblock_info *catchblock = &tryblock->catchblock[j];
+            const catchblock_info *catchblock = &tryblock->catchblock[j];
             if(info)
             {
                 const cxx_type_info *type = find_caught_type( info, catchblock );
@@ -357,7 +358,8 @@
  */
 DWORD CDECL cxx_frame_handler( PEXCEPTION_RECORD rec, cxx_exception_frame* frame,
                                PCONTEXT context, EXCEPTION_REGISTRATION_RECORD** dispatch,
-                               cxx_function_descr *descr, EXCEPTION_REGISTRATION_RECORD* nested_frame,
+                               const cxx_function_descr *descr,
+                               EXCEPTION_REGISTRATION_RECORD* nested_frame,
                                int nested_trylevel )
 {
     cxx_exception_type *exc_type;
@@ -390,7 +392,7 @@
             TRACE("handling C++ exception rec %p frame %p trylevel %d descr %p nested_frame %p\n",
                   rec, frame, frame->trylevel, descr, nested_frame );
             dump_exception_type( exc_type );
-            dump_function_descr( descr, exc_type );
+            dump_function_descr( descr );
         }
     }
     else
