# New Ticket Created by  Matt Kraai 
# Please include the string:  [perl #51798]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=51798 >


Howdy,

The attached patch fixes the following warnings:

make[1]: Entering directory `/home/kraai/src/parrot/languages'
Makefile:352: warning: overriding commands for target `dotnet.realclean'
Makefile:242: warning: ignoring old commands for target `dotnet.realclean'

src/hash.c: In function ‘parrot_mark_hash’:
src/hash.c:334: warning: comparison between signed and unsigned

src/interpreter.c: In function ‘dynop_register’:
src/interpreter.c:1013: warning: assignment from incompatible pointer type

src/mmd.c: In function ‘mmd_sort_candidates’:
src/mmd.c:1599: warning: passing argument 2 of ‘Parrot_quicksort’ from 
incompatible pointer type

src/exec.c: In function ‘Parrot_exec’:
src/exec.c:101: warning: cast discards qualifiers from pointer target type

src/io/io.c: In function ‘PIO_dup’:
src/io/io.c:201: warning: return from incompatible pointer type

./src/pmc/parrotio.pmc: In function ‘Parrot_ParrotIO_clone’:
./src/pmc/parrotio.pmc:411: warning: initialization from incompatible pointer 
type

compilers/imcc/imclexer.c:55:5: warning: "__STDC_VERSION__" is not defined

compilers/imcc/instructions.c: In function ‘ins_print’:
compilers/imcc/instructions.c:748: warning: comparison between pointer and 
integer

compilers/imcc/reg_alloc.c: In function ‘ig_test’:
compilers/imcc/reg_alloc.c:213: warning: passing argument 4 of ‘ig_get_word’ 
discards qualifiers from pointer target type

./md2.pmc: In function ‘Parrot_MD2_nci_MD2_Update’:
./md2.pmc:112: warning: pointer targets in passing argument 2 of ‘MD2_Update’ 
differ in signedness
./md2.pmc: In function ‘Parrot_MD2_nci_MD2_Final’:
./md2.pmc:127: warning: pointer targets in passing argument 2 of 
‘string_from_cstring’ differ in signedness

./md4.pmc: In function ‘Parrot_MD4_nci_MD4_Final’:
./md4.pmc:127: warning: pointer targets in passing argument 2 of 
‘string_from_cstring’ differ in signedness

./md5.pmc: In function ‘Parrot_MD5_nci_MD5_Final’:
./md5.pmc:127: warning: pointer targets in passing argument 2 of 
‘string_from_cstring’ differ in signedness

./ripemd160.pmc: In function ‘Parrot_RIPEMD160_nci_RIPEMD160_Final’:
./ripemd160.pmc:127: warning: pointer targets in passing argument 2 of 
‘string_from_cstring’ differ in signedness

./sha.pmc: In function ‘Parrot_SHA_nci_SHA_Final’:
./sha.pmc:127: warning: pointer targets in passing argument 2 of 
‘string_from_cstring’ differ in signedness

./sha1.pmc: In function ‘Parrot_SHA1_nci_SHA1_Final’:
./sha1.pmc:127: warning: pointer targets in passing argument 2 of 
‘string_from_cstring’ differ in signedness

./sha256.pmc: In function ‘Parrot_SHA256_nci_SHA256_Final’:
./sha256.pmc:127: warning: pointer targets in passing argument 2 of 
‘string_from_cstring’ differ in signedness

./sha512.pmc: In function ‘Parrot_SHA512_nci_SHA512_Final’:
./sha512.pmc:127: warning: pointer targets in passing argument 2 of 
‘string_from_cstring’ differ in signedness

There are 30 warnings remaining, but I'm not sure how to fix them.

The patch contains changes to imclexer.c, which was regenerated using
the Debian version of flex, so you may want to regenerate it using the
standard version before committing.

-- 
Matt
diff --git a/compilers/imcc/imc.h b/compilers/imcc/imc.h
index d69c05e..5baf3ae 100644
--- a/compilers/imcc/imc.h
+++ b/compilers/imcc/imc.h
@@ -108,7 +108,7 @@ void graph_coloring_reg_alloc(PARROT_INTERP, 
ARGMOD(IMC_Unit *unit))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*unit);
 
-int ig_test(int i, int j, int N, ARGIN(const unsigned int *graph))
+int ig_test(int i, int j, int N, ARGIN(unsigned int *graph))
         __attribute__nonnull__(4);
 
 void imc_reg_alloc(PARROT_INTERP, ARGIN_NULLOK(IMC_Unit *unit))
diff --git a/compilers/imcc/imcc.l b/compilers/imcc/imcc.l
index ae6067e..61d54b5 100644
--- a/compilers/imcc/imcc.l
+++ b/compilers/imcc/imcc.l
@@ -13,8 +13,8 @@
 /* HEADERIZER HFILE: none */
 /* HEADERIZER STOP */
 
-#ifndef __STDC_VERSION_
-#  define __STDC_VERSION_
+#ifndef __STDC_VERSION__
+#  define __STDC_VERSION__ 0
 #endif
 
 }
diff --git a/compilers/imcc/imclexer.c b/compilers/imcc/imclexer.c
index 7fc08b9..8297c51 100644
--- a/compilers/imcc/imclexer.c
+++ b/compilers/imcc/imclexer.c
@@ -14,8 +14,8 @@
 /* HEADERIZER HFILE: none */
 /* HEADERIZER STOP */
 
-#ifndef __STDC_VERSION_
-#  define __STDC_VERSION_
+#ifndef __STDC_VERSION__
+#  define __STDC_VERSION__ 0
 #endif
 
 
@@ -30,7 +30,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
+#define YY_FLEX_SUBMINOR_VERSION 34
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -52,7 +52,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -115,11 +115,12 @@ typedef unsigned int flex_uint32_t;
 
 #else  /* ! __cplusplus */
 
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif /* __STDC__ */
+#endif /* defined (__STDC__) */
 #endif /* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -155,8 +156,6 @@ typedef void* yyscan_t;
 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
 #define yy_flex_debug yyg->yy_flex_debug_r
 
-int yylex_init (yyscan_t* scanner);
-
 /* Enter a start condition.  This macro really ought to take a parameter,
  * but we do it the disgusting crufty way forced on us by the ()-less
  * definition of BEGIN.
@@ -217,11 +216,13 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE;
 /* The following is because we cannot portably get our hands on size_t
  * (without autoconf's help, which isn't available because we want
  * flex-generated scanners to compile on their own).
+ * Given that the standard has decreed that size_t exists since 1989,
+ * I guess we can afford to depend on it. Manoj.
  */
 
 #ifndef YY_TYPEDEF_YY_SIZE_T
 #define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int yy_size_t;
+typedef size_t yy_size_t;
 #endif
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -2772,7 +2773,7 @@ static void include_file(PARROT_INTERP, char *file_name, 
ARGMOD(void *yyscanner)
 
 
 
-#line 2776 "compilers/imcc/imclexer.c"
+#line 2777 "compilers/imcc/imclexer.c"
 
 #define INITIAL 0
 #define emit 1
@@ -2834,6 +2835,10 @@ struct yyguts_t
 
 static int yy_init_globals (yyscan_t yyscanner );
 
+int yylex_init (yyscan_t* scanner);
+
+int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
@@ -2911,7 +2916,7 @@ static int input (yyscan_t yyscanner );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -2922,7 +2927,7 @@ static int input (yyscan_t yyscanner );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               size_t n; \
+               int n; \
                for ( n = 0; n < max_size && \
                             (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
@@ -3027,7 +3032,7 @@ YY_DECL
             return 0;
         }
 
-#line 3031 "compilers/imcc/imclexer.c"
+#line 3036 "compilers/imcc/imclexer.c"
 
        if ( !yyg->yy_init )
                {
@@ -4195,7 +4200,7 @@ YY_RULE_SETUP
 #line 729 "compilers/imcc/imcc.l"
 ECHO;
        YY_BREAK
-#line 4199 "compilers/imcc/imclexer.c"
+#line 4204 "compilers/imcc/imclexer.c"
 case YY_STATE_EOF(pod):
 case YY_STATE_EOF(cmt1):
 case YY_STATE_EOF(cmt2):
@@ -4435,7 +4440,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
 
                /* Read in more data. */
                YY_INPUT( 
(&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-                       yyg->yy_n_chars, num_to_read );
+                       yyg->yy_n_chars, (size_t) num_to_read );
 
                YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
                }
@@ -4459,6 +4464,14 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
 
+       if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > 
YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+               /* Extend the array by 50%, plus the number we really need. */
+               yy_size_t new_size = yyg->yy_n_chars + number_to_move + 
(yyg->yy_n_chars >> 1);
+               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void 
*) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
+               if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+                       YY_FATAL_ERROR( "out of dynamic memory in 
yy_get_next_buffer()" );
+       }
+
        yyg->yy_n_chars += number_to_move;
        YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = 
YY_END_OF_BUFFER_CHAR;
        YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = 
YY_END_OF_BUFFER_CHAR;
@@ -4886,7 +4899,9 @@ static void yyensure_buffer_stack (yyscan_t yyscanner)
                yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc
                                                                (num_to_alloc * 
sizeof(struct yy_buffer_state*)
                                                                , yyscanner);
-               
+               if ( ! yyg->yy_buffer_stack )
+                       YY_FATAL_ERROR( "out of dynamic memory in 
yyensure_buffer_stack()" );
+                                                                 
                memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct 
yy_buffer_state*));
                                
                yyg->yy_buffer_stack_max = num_to_alloc;
@@ -4904,6 +4919,8 @@ static void yyensure_buffer_stack (yyscan_t yyscanner)
                                                                
(yyg->yy_buffer_stack,
                                                                num_to_alloc * 
sizeof(struct yy_buffer_state*)
                                                                , yyscanner);
+               if ( ! yyg->yy_buffer_stack )
+                       YY_FATAL_ERROR( "out of dynamic memory in 
yyensure_buffer_stack()" );
 
                /* zero only the new slots.*/
                memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, 
grow_size * sizeof(struct yy_buffer_state*));
@@ -4948,7 +4965,7 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  
size , yyscan_t yyscann
 
 /** Setup the input buffer state to scan a string. The next call to yylex() 
will
  * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
+ * @param yystr a NUL-terminated string to scan
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
@@ -5014,8 +5031,7 @@ YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, 
int  _yybytes_len , yysc
                        yyg->yy_start_stack = (int *) yyrealloc((void *) 
yyg->yy_start_stack,new_size ,yyscanner );
 
                if ( ! yyg->yy_start_stack )
-                       YY_FATAL_ERROR(
-                       "out of memory expanding start-condition stack" );
+                       YY_FATAL_ERROR( "out of memory expanding 
start-condition stack" );
                }
 
        yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START;
@@ -5239,6 +5255,42 @@ int yylex_init(yyscan_t* ptr_yy_globals)
     return yy_init_globals ( *ptr_yy_globals );
 }
 
+/* yylex_init_extra has the same functionality as yylex_init, but follows the
+ * convention of taking the scanner as the last argument. Note however, that
+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
+ * is the reason, too, why this function also must handle its own declaration).
+ * The user defined value in the first argument will be available to yyalloc in
+ * the yyextra field.
+ */
+
+int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+
+{
+    struct yyguts_t dummy_yyguts;
+
+    yyset_extra (yy_user_defined, &dummy_yyguts);
+
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+       
+    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), 
&dummy_yyguts );
+       
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+    
+    /* By setting to 0xAA, we expose bugs in
+    yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+    
+    yyset_extra (yy_user_defined, *ptr_yy_globals);
+    
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
 static int yy_init_globals (yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
diff --git a/compilers/imcc/instructions.c b/compilers/imcc/instructions.c
index 7105f34..c6cbd3c 100644
--- a/compilers/imcc/instructions.c
+++ b/compilers/imcc/instructions.c
@@ -743,10 +743,8 @@ ins_print(PARROT_INTERP, ARGMOD(FILE *fd), ARGIN(const 
Instruction *ins))
                 else
                     strncat(regb[i], k->name, REGB_SIZE - used - 1);
 
-                /* XXX This comparison of a pointer to an int is wrong */
-
-                if (k->nextkey && regb[i] + 1 < REGB_SIZE)
-                    strcat(regb[i], ";");
+                if (k->nextkey)
+                    strncat(regb[i], ";", REGB_SIZE - strlen(regb[i]) - 1);
             }
 
             regstr[i] = regb[i];
diff --git a/compilers/imcc/reg_alloc.c b/compilers/imcc/reg_alloc.c
index 2421d2c..0643a53 100644
--- a/compilers/imcc/reg_alloc.c
+++ b/compilers/imcc/reg_alloc.c
@@ -123,7 +123,7 @@ static void make_stat(
 static void map_colors(
     ARGIN(const IMC_Unit* unit),
     int x,
-    ARGIN(const unsigned int *graph),
+    ARGIN(unsigned int *graph),
     ARGMOD(char *avail),
     int typ,
     int already_allocated)
@@ -171,7 +171,8 @@ RT#48260: Not yet documented!!!
 
 PARROT_CANNOT_RETURN_NULL
 static unsigned int*
-ig_get_word(int i, int j, int N, ARGIN(unsigned int *graph), ARGMOD(int 
*bit_ofs))
+ig_get_word(int i, int j, int N, ARGIN(unsigned int *graph),
+        ARGMOD(int *bit_ofs))
 {
     unsigned int bit = i * N + j;
     *bit_ofs = bit % sizeof (*graph);
@@ -207,7 +208,7 @@ RT#48260: Not yet documented!!!
 */
 
 int
-ig_test(int i, int j, int N, ARGIN(const unsigned int *graph))
+ig_test(int i, int j, int N, ARGIN(unsigned int *graph))
 {
     int bit_ofs;
     unsigned int* word = ig_get_word(i, j, N, graph, &bit_ofs);
@@ -977,7 +978,7 @@ map_colors: calculates what colors can be assigned to the 
x-th symbol.
 */
 
 static void
-map_colors(ARGIN(const IMC_Unit* unit), int x, ARGIN(const unsigned int 
*graph),
+map_colors(ARGIN(const IMC_Unit* unit), int x, ARGIN(unsigned int *graph),
         ARGMOD(char *avail), int typ, int already_allocated)
 {
     const int n_symbols = unit->n_symbols;
diff --git a/config/gen/makefiles/languages.in 
b/config/gen/makefiles/languages.in
index 3198295..c422ff6 100644
--- a/config/gen/makefiles/languages.in
+++ b/config/gen/makefiles/languages.in
@@ -345,7 +345,7 @@ perl6.test:
        - $(MAKE) perl6 test
 perl6.clean:
        - $(MAKE) perl6 clean
-dotnet.realclean:
+perl6.realclean:
        - $(MAKE) perl6 realclean
 
 pheme : pheme.dummy
diff --git a/include/parrot/io.h b/include/parrot/io.h
index 3372ce8..eb8736d 100644
--- a/include/parrot/io.h
+++ b/include/parrot/io.h
@@ -197,7 +197,7 @@ void PIO_destroy(SHIM_INTERP, ARGMOD(PMC * pmc))
 PARROT_API
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-ParrotIO * PIO_dup(PARROT_INTERP, ARGIN(PMC *pmc))
+PMC * PIO_dup(PARROT_INTERP, ARGIN(PMC *pmc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
diff --git a/src/dynpmc/mdx.pmc b/src/dynpmc/mdx.pmc
index e5a945d..59db1f1 100644
--- a/src/dynpmc/mdx.pmc
+++ b/src/dynpmc/mdx.pmc
@@ -109,7 +109,7 @@ pmclass MDx
 */
     METHOD void MDx_Update(STRING *buf) {
         MDx_CTX *c = PMC_data_typed(SELF, MDx_CTX *);
-        (void)MDx_Update(c, buf->strstart, buf->bufused);
+        (void)MDx_Update(c, (unsigned char *)buf->strstart, buf->bufused);
     }
 
 /*
@@ -124,7 +124,7 @@ pmclass MDx
         MDx_CTX *c = PMC_data_typed(SELF, MDx_CTX *);
         STRING *retval;
         (void)MDx_Final(digest, c);
-        retval = string_from_cstring(INTERP, digest, MDx_DIGEST_LENGTH);
+        retval = string_from_cstring(INTERP, (char *)digest, 
MDx_DIGEST_LENGTH);
         RETURN(STRING *retval);
     }
 
diff --git a/src/exec.c b/src/exec.c
index 017e620..1c41a6f 100644
--- a/src/exec.c
+++ b/src/exec.c
@@ -34,7 +34,7 @@ src/exec.c - Generate an object file
 
 static void add_data_member(
     ARGMOD(Parrot_exec_objfile_t *obj),
-    ARGIN_NULLOK(void *src),
+    ARGIN_NULLOK(const void *src),
     size_t len)
         __attribute__nonnull__(1)
         FUNC_MODIFIES(*obj);
@@ -98,7 +98,7 @@ Parrot_exec(PARROT_INTERP, ARGIN(opcode_t *pc),
     /* TODO Go zero the calls to jited opcodes. */
     /* Place the program code in the data section. */
     /* program_code */
-    add_data_member(obj, (void *)interp->code->base.pf->src,
+    add_data_member(obj, interp->code->base.pf->src,
             interp->code->base.pf->size);
     /* opcode_map */
     add_data_member(obj, jit_info->arena.op_map, (jit_info->arena.map_size+1) *
@@ -146,7 +146,8 @@ C<< obj->data_size[N] >>.
 */
 
 static void
-add_data_member(ARGMOD(Parrot_exec_objfile_t *obj), ARGIN_NULLOK(void *src), 
size_t len)
+add_data_member(ARGMOD(Parrot_exec_objfile_t *obj),
+        ARGIN_NULLOK(const void *src), size_t len)
 {
     char *cp;
 
diff --git a/src/hash.c b/src/hash.c
index c83a235..dac9079 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -312,7 +312,8 @@ parrot_mark_hash(PARROT_INTERP, ARGIN(Hash *hash))
     int mark_key   = 0;
     int mark_value = 0;
 
-    INTVAL i, entries;
+    INTVAL i;
+    UINTVAL entries;
 
     if (hash->entry_type == enum_hash_string
     ||  hash->entry_type == enum_hash_pmc)
diff --git a/src/interpreter.c b/src/interpreter.c
index 9a62c8b..9bed182 100644
--- a/src/interpreter.c
+++ b/src/interpreter.c
@@ -1010,7 +1010,8 @@ dynop_register(PARROT_INTERP, PMC* lib_pmc)
         interp->all_op_libs = (op_lib_t **)mem_sys_allocate(
                 sizeof (op_lib_t *) * (interp->n_libs + 1));
     else
-        mem_realloc_n_typed(interp->all_op_libs, interp->n_libs + 1, op_lib_t);
+        mem_realloc_n_typed(interp->all_op_libs, interp->n_libs + 1,
+                op_lib_t *);
 
     init_func = get_dynamic_op_lib_init(interp, lib_pmc);
     lib       = init_func(1);
diff --git a/src/io/io.c b/src/io/io.c
index 4fb6115..5bd521c 100644
--- a/src/io/io.c
+++ b/src/io/io.c
@@ -162,7 +162,7 @@ PIO_new(PARROT_INTERP, SHIM(INTVAL iotype), INTVAL flags, 
INTVAL mode)
 
 /*
 
-=item C<ParrotIO * PIO_dup>
+=item C<PMC * PIO_dup>
 
 Duplicates an IO stream.
 
@@ -173,7 +173,7 @@ Duplicates an IO stream.
 PARROT_API
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-ParrotIO *
+PMC *
 PIO_dup(PARROT_INTERP, ARGIN(PMC *pmc))
 {
     ParrotIO * const io   = PMC_data_typed(pmc, ParrotIO *);
diff --git a/src/mmd.c b/src/mmd.c
index 04e3028..a9764c3 100644
--- a/src/mmd.c
+++ b/src/mmd.c
@@ -1596,7 +1596,7 @@ mmd_sort_candidates(PARROT_INTERP, ARGIN(PMC *arg_tuple), 
ARGIN(PMC *cl))
     PMC_struct_val(nci) = F2DPTR(distance_cmp);
 
     /* sort it */
-    Parrot_quicksort(interp, helper, n, nci);
+    Parrot_quicksort(interp, (void **)helper, n, nci);
 
     /*
      * now helper has a sorted list of indices in the upper 16 bits

Reply via email to