#551: t/pmc/nci.t:  2 test failures
---------------------+------------------------------------------------------
 Reporter:  jkeenan  |       Owner:                 
     Type:  bug      |      Status:  new            
 Priority:  normal   |   Milestone:                 
Component:  none     |     Version:                 
 Severity:  medium   |    Keywords:  pmc nci pointer
     Lang:           |       Patch:                 
 Platform:           |  
---------------------+------------------------------------------------------
 These two tests began to fail after r38036; bisection suggests r38037.
 Here are some pastes:

 1.  Output of my run on Linux/i386 of `prove -v t/pmc/nci.t`:
 {{{
 ok 65 - arity
 not ok 66 - nci_vVi - void** out parameter

 #   Failed test 'nci_vVi - void** out parameter'
 #   at t/pmc/nci.t line 2650.
 # Exited with error code: [SIGNAL 6]
 # Received:
 # src/call/pcc.c:978: failed assertion '(st->dest.sig &
 PARROT_ARG_TYPE_MASK) == PARROT_ARG_PMC'
 # Backtrace - Obtained 18 stack frames (max trace depth is 32).
 #   (unknown)
 #     Parrot_confess
 #       Parrot_fetch_arg_nci
 #         (unknown)
 #           (unknown)
 #             Parrot_NCI_invoke
 #               Parrot_invokecc_p
 #                 (unknown)
 #                   (unknown)
 #                     (unknown)
 #                       (unknown)
 #                         Parrot_runops_fromc_args
 #                           Parrot_runcode
 #                             (unknown)
 #                               imcc_run
 #                                 (unknown)
 #                                   __libc_start_main
 #                                     (unknown)
 #
 # Expected:
 # got 10
 #
 ok 67 - nci_ttt - t_tt parameter
 ok 68 - nci_vfff - v_fff parameter
 not ok 69 - nci_vV - char** out parameter

 #   Failed test 'nci_vV - char** out parameter'
 #   at t/pmc/nci.t line 2709.
 # Exited with error code: [SIGNAL 11]
 # Received:
 #
 # Expected:
 # Hello bright new world
 #
 # Looks like you failed 2 tests of 69.
  Dubious, test returned 2 (wstat 512, 0x200)
  Failed 2/69 subtests

 Test Summary Report
 -------------------
 t/pmc/nci (Wstat: 512 Tests: 69 Failed: 2)
   Failed tests:  66, 69
   Non-zero exit status: 2
 Files=1, Tests=69,  6 wallclock secs ( 0.00 usr  0.00 sys +  1.30 cusr
 0.18 csys =  1.48 CPU)
 Result: FAIL
 }}}
 2. mikehh's direct call:
 {{{
 m...@mhk-desktop:~/parrot.t$ ./parrot -t t/pmc/nci_66.pir
      0 set S0, "libnci_test"
 S0="(null)"
      3 loadlib P1, S0                                        P1=PMCNULL
 S0="libnci_test"
      6 dlfunc P3, P1, "nci_vVi", "vVi"
 P3=PMCNULL P1=ParrotLibrary=PMC(0x9c25538)
     11 dlfunc P2, P1, "nci_vp", "vp"
 P2=PMCNULL P1=ParrotLibrary=PMC(0x9c25538)
     16 new P0, PC14                                        P0=PMCNULL
 PC14=Key=PMC(0x9c25550)
     19 set I0, 10                                        I0=0
     22 set_args PC9 (2), P0, I0
 PC9=FixedIntegerArray=PMC(0x9c25580) P0=Pointer=PMC(0x9c1e960) I0=10
     26 get_results PC11
     28 invokecc P3
 P3=NCI=PMC(0x9c1ec60)
 Segmentation fault

 m...@mhk-desktop:~/parrot.t$ ./parrot -t t/pmc/nci_69.pir
      0 set S1, "libnci_test"
 S1="(null)"
      3 loadlib P0, S1                                        P0=PMCNULL
 S1="libnci_test"
      6 dlfunc P1, P0, "nci_vV", "vV"
 P1=PMCNULL P0=ParrotLibrary=PMC(0x97c8550)
     11 new P2, PC10                                        P2=PMCNULL
 PC10=Key=PMC(0x97c8568)
     14 set_args PC4 (1), P2
 PC4=FixedIntegerArray=PMC(0x97c8598) P2=Pointer=PMC(0x97c1990)
     17 get_results PC7
     19 invokecc P1
 P1=NCI=PMC(0x97c1c60)
 Segmentation fault
 }}}
 3.  A diff
 {{{
 cat ~/learn/parrot/38036.38037.diff
 Index: src/pmc/pointer.pmc
 ===================================================================
 --- src/pmc/pointer.pmc (revision 38036)
 +++ src/pmc/pointer.pmc (revision 38037)
 @@ -23,6 +23,8 @@
  #include "parrot/parrot.h"

  pmclass Pointer need_ext {
 +    ATTR void * mark_function;
 +    ATTR void * pointer;

  /*

 @@ -36,6 +38,7 @@

      VTABLE void init() {
          PObj_custom_mark_SET(SELF);
 +        PMC_data(SELF) =
 mem_allocate_zeroed_typed(Parrot_Pointer_attributes);
      }

  /*
 @@ -50,10 +53,10 @@

      VTABLE void mark() {
          void (*mark_function)(Interp *, void *) =
 -            (void (*)(Interp *, void *))D2FPTR(PMC_struct_val(SELF));
 -
 -        if (PMC_data(SELF) && PMC_struct_val(SELF))
 -            (*mark_function)(INTERP, PMC_data(SELF));
 +            (void (*)(Interp *, void
 *))D2FPTR(PARROT_POINTER(SELF)->mark_function);
 +        void * data = PARROT_POINTER(SELF)->pointer;
 +        if (data && mark_function)
 +            (*mark_function)(INTERP,data);
      }

  /*
 @@ -84,7 +87,7 @@
  */

      VTABLE void *get_pointer() {
 -        return PMC_data(SELF);
 +        return PARROT_POINTER(SELF)->pointer;
      }

  /*
 @@ -98,7 +101,7 @@
  */

      VTABLE INTVAL get_integer() {
 -        return (INTVAL)PMC_data(SELF);
 +        return (INTVAL)(PARROT_POINTER(SELF)->pointer);
      }

  /*
 @@ -112,7 +115,7 @@
  */

      VTABLE FLOATVAL get_number() {
 -        return (FLOATVAL)(INTVAL)PMC_data(SELF);
 +        return (FLOATVAL)(INTVAL)(PARROT_POINTER(SELF)->pointer);
      }

  /*
 @@ -126,7 +129,7 @@
  */

      VTABLE STRING *get_repr() {
 -        return Parrot_sprintf_c(INTERP, "Pointer = 0x%p",
 PMC_data(SELF));
 +        return Parrot_sprintf_c(INTERP, "Pointer = 0x%p",
 PARROT_POINTER(SELF)->pointer);
      }


 @@ -141,7 +144,7 @@
  */

      VTABLE STRING *get_string() {
 -        return Parrot_sprintf_c(INTERP, "%s", PMC_data(SELF));
 +        return Parrot_sprintf_c(INTERP, "%s",
 PARROT_POINTER(SELF)->pointer);
      }

  /*
 @@ -170,7 +173,7 @@

      VTABLE INTVAL is_same(PMC *pmc2) {
          return (INTVAL)(SELF->vtable   == pmc2->vtable &&
 -                        PMC_data(SELF) == PMC_data(pmc2));
 +                        PARROT_POINTER(SELF)->pointer ==
 PARROT_POINTER(pmc2)->pointer);
      }
  }

 Index: tools/build/nativecall.pl
 ===================================================================
 --- tools/build/nativecall.pl   (revision 38036)
 +++ tools/build/nativecall.pl   (revision 38037)
 @@ -197,6 +197,7 @@
  #include "parrot/oplib/ops.h"
  #include "pmc/pmc_managedstruct.h"
  #include "pmc/pmc_nci.h"
 +#include "pmc/pmc_pointer.h"
  #include "nci.str"
  #include "jit.h"

 @@ -353,7 +354,7 @@
      /V/ && do {
          push @{$temps_ref},          "PMC *t_$temp_num;";
          push @{$extra_preamble_ref}, "t_$temp_num =
 GET_NCI_P($reg_num);";
 -        return "(void**)&PMC_data(t_$temp_num)";
 +        return "(void**)&PARROT_POINTER(t_$temp_num)->pointer";
      };
      /[ilIscfdNS]/ && do {
          my $ret_type = $sig_table{$_}{return_type};
 }}}

-- 
Ticket URL: <https://trac.parrot.org/parrot/ticket/551>
Parrot <https://trac.parrot.org/parrot/>
Parrot Development
_______________________________________________
parrot-tickets mailing list
[email protected]
http://lists.parrot.org/mailman/listinfo/parrot-tickets

Reply via email to