Ticket #1872 (closed bug: fixed)

Opened 4 years ago

Last modified 4 years ago

t/pmc/fixedstringarray.t fails coretest 64 bit with g++-4.5

Reported by: mikehh Owned by: bacek
Priority: normal Milestone: 2.11
Component: core Version: master
Severity: medium Keywords: Segmentation Fault
Cc: Language:
Patch status: Platform: linux

Description

I first got this failure with Kubuntu 10.10 amd64 (g++-4.5) - (RELEASE_2_10_1-477-gfa56f62)

make corevm/make coretest:

t/pmc/fixedstringarray.t ............ Failed 10/50 subtests

Test Summary Report
-------------------
t/pmc/fixedstringarray.t          (Wstat: 11 Tests: 40 Failed: 0)
  Non-zero wait status: 11
  Parse errors: Bad plan.  You planned 50 tests but ran 40.
Files=217, Tests=6641, 40 wallclock secs ( 3.37 usr  0.83 sys + 72.65 cusr 15.20 csys = 92.05 CPU)
Result: FAIL
make: *** [coretest] Error 1

(status 11 indicates a Segmentation Fault)

prove -v t/pmc/fixedstringarray.t
t/pmc/fixedstringarray.t ..
1..50
ok 1 - Fresh array has 0 elements
ok 2 - Size was set correctly
ok 3 - Can't resize
ok 4 - First element set to integer properly
ok 5 - First element set to number properly
ok 6 - First element set to string properly
ok 7 - Second element set to integer properly
ok 8 - Second element set to number properly
ok 9 - Second element set to string properly
ok 10 - Can't set out-of-bounds element
ok 11 - Can't set element on negative index
ok 12 - Can't get out-of-bounds element
ok 13 - Can't get element with negative index
ok 14 - Set INTVAL via PMC Key works
ok 15 - Set FLOATVAL via PMC Key works
ok 16 - Set STRING via PMC Key works
ok 17 - Get INTVAL via Key works
ok 18 - Get FLOATVAL via Key works
ok 19 - Get STRING via Key works
ok 20 - Get INTVAL for stored PMC via Key works
ok 21 - Does not scalar
ok 22 - Does array
ok 23 - Does not no_interface
ok 24 - First element cloned
ok 25 - Second element cloned
ok 26 - Third element cloned
ok 27 - Resize of uninitialized clone successful
ok 28 - Resize of initialization not successful
ok 29 - Empty array is false
ok 30 - Non-empty array is true
ok 31 - Iteration works
ok 32 - get_iter works
ok 33 - Array stringified properly
ok 34 - Empty arrays are equal
ok 35 - Not equal to other type
ok 36 - Different size arrays aren't equal
ok 37 - Equal with first element set
ok 38 - Not equal when second element differ
ok 39 - Equal when second element same
ok 40 - Not equal when second element is null
Failed 10/50 subtests

Test Summary Report
-------------------
t/pmc/fixedstringarray.t (Wstat: 11 Tests: 40 Failed: 0)
  Non-zero wait status: 11
  Parse errors: Bad plan.  You planned 50 tests but ran 40.
Files=1, Tests=40,  0 wallclock secs ( 0.04 usr  0.00 sys +  0.48 cusr  0.00 csys =  0.52 CPU)
Result: FAIL
mhk@mhk-desktop:~/parrot$ date
Wed Nov 24 12:37:09 GMT 2010

subtest 41..44 are in sub 'test_gc'

I extracted these and ran them separately - PASS

subtests 34..40 are in sub 'test_equality'

I added these (so 34..44 became 1..11) - PASS

The test passes after running make world/make test. It also passes make corevm/make coretest using g++-4.5 with --optimize and with gcc-4.5 (with or without --optimize) and on i386 (32 bit) versions of Ubuntu and also with Ubuntu 10.04 amd64 with g++-4.4

So it only fails on 64-bit Ubuntu and Kubuntu 10.10 with g++-4.5 after running make corevm, before running make (world).

At this stage I am not sure if this is a bug in the compiler (?), something in my setup, or a fundamental problem that it is picking up in parrot.

I did a new clone of parrot just in case and I got the same results with Ubuntu 10.10 amd64 (g++-4.5) - RELEASE_2_10_1-477-gfa56f62 and again with RELEASE_2_10_1-490-g3cfeb72

Comments Welcome.

Change History

Changed 4 years ago by chromatic

On Wednesday 24 November 2010 at 18:30, Parrot  wrote:

>  I did a new clone of parrot just in case and I got the same results with
>  Ubuntu 10.10 amd64 (g++-4.5) - RELEASE_2_10_1-477-gfa56f62 and again with
>  RELEASE_2_10_1-490-g3cfeb72

If you can reproduce it, a backtrace with debugging symbols is helpful.

I suspect--but cannot prove without evidence--that it's a premature collection 
problem.

-- c

Changed 4 years ago by bacek

It is definitely GC bug. Tests 41-44 are GC tests.

ok 41 - 1000th element survived ok 42 - 2000th element survived ok 43 - 4000th element survived ok 44 - 8000th element survived

Unfortunately, I couldn't reproduce it on Debian/amd64 + gcc-4.5.1-11.

-- Bacek

Changed 4 years ago by bacek

Side note - "echo 0 > /proc/sys/kernel/randomize_va_space" as root usually helps debugging GC failures.

Changed 4 years ago by mikehh

I ran

./parrot --runcore=gcdebug t/pmc/fixedstringarray.t

took a couple of minutes - big pause after ok 40, but it ran to completion.

running

./parrot  t/pmc/fixedstringarray.t
...
ok 40 - Not equal when second element is null
Segmentation fault

I then tried

gdb ./parrot
...
(gdb) run t/pmc/fixedstringarray.t
...
ok 40 - Not equal when second element is null

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff79dd318 in Parrot_pa_remove (interp=0x60b080, self=0x74b9a0, ptr=0xce) at src/pointer_array.c:144
144         *(UINTVAL*)ptr = ((UINTVAL)self->next_free) | 1;
(gdb)

So what do I do next to give you meaningful results? How do I generate a backtrace or whatever, I am not that proficient in the use of gdb.

Cheers, Michael (mikehh)

Changed 4 years ago by mikehh

ok following from the last post:

(gdb) backtrace
#0  0x00007ffff79dd318 in Parrot_pa_remove (interp=0x60b080, self=0x74b9a0, ptr=0xce) at src/pointer_array.c:144
#1  0x00007ffff79c353c in gc_ms2_mark_pmc_header (interp=0x60b080, pmc=0x74b938) at src/gc/gc_ms2.c:753
#2  0x00007ffff79bd806 in Parrot_gc_mark_PMC_alive_fun (interp=0x60b080, obj=0x74b938) at src/gc/api.c:156
#3  0x00007ffff79c696e in trace_mem_block (interp=0x60b080, mem_pools=0x0, lo_var_ptr=140737488347416, hi_var_ptr=140737488345968) at src/gc/system.c:473
#4  0x00007ffff79c64ef in trace_system_stack (interp=0x60b080, mem_pools=0x0) at src/gc/system.c:247
#5  0x00007ffff79c6464 in trace_system_areas (interp=0x60b080, mem_pools=0x0) at src/gc/system.c:216
#6  0x00007ffff79c535d in Parrot_gc_trace_root (interp=0x60b080, mem_pools=0x0, trace=GC_TRACE_FULL) at src/gc/mark_sweep.c:226
#7  0x00007ffff79c3ede in gc_ms2_mark_live_objects (interp=0x60b080, self=0x60b940, flags=2) at src/gc/gc_ms2.c:1026
#8  0x00007ffff79c4126 in gc_ms2_mark_and_sweep (interp=0x60b080, flags=2) at src/gc/gc_ms2.c:1068
#9  0x00007ffff79be6e3 in Parrot_gc_mark_and_sweep (interp=0x60b080, flags=2) at src/gc/api.c:658
#10 0x00007ffff796794b in Parrot_sweep_ic (cur_opcode=0x74eda0, interp=0x60b080) at src/ops/core_ops.c:15984
#11 0x00007ffff7a19737 in runops_slow_core (interp=0x60b080, runcore_unused=0x6eda60, pc=0x74eda0) at src/runcore/cores.c:646
#12 0x00007ffff7a18697 in runops_int (interp=0x60b080, offset=891) at src/runcore/main.c:218
#13 0x00007ffff79d58d0 in runops (interp=0x60b080, offs=0) at src/call/ops.c:126
#14 0x00007ffff79cf4ef in Parrot_pcc_invoke_from_sig_object (interp=0x60b080, sub_obj=0x6f19e8, call_object=0x737ae0) at src/call/pcc.c:323
#15 0x00007ffff79b4cde in Parrot_ext_call (interp=0x60b080, sub_pmc=0x6f19e8, signature=0x7ffff7b3ca8a "P->") at src/extend.c:321
#16 0x00007ffff79b1535 in Parrot_runcode (interp=0x60b080, argc=1, argv=0x7fffffffe210) at src/embed.c:837
#17 0x00007ffff7b151db in imcc_run_pbc (interp=0x60b080, output_file=0x0, argc=1, argv=0x7fffffffe210) at compilers/imcc/main.c:413
#18 0x000000000040136f in main (argc=2, argv=0x7fffffffe208) at src/main.c:155

don't know if this helps, let me know if I can do anything else.

I am assuming that the seg fault occurs somewhere on the loop starting at line 268-272 of t/pmc/fixedstringarray.t. - at line 271.-> sweep 1

Changed 4 years ago by bacek

  • owner set to bacek

Changed 4 years ago by bacek

Hello.

>  #0  0x00007ffff79dd318 in Parrot_pa_remove (interp=0x60b080,
>  self=0x74b9a0, ptr=0xce) at src/pointer_array.c:144
>  #1  0x00007ffff79c353c in gc_ms2_mark_pmc_header (interp=0x60b080,
>  pmc=0x74b938) at src/gc/gc_ms2.c:753
>  #2  0x00007ffff79bd806 in Parrot_gc_mark_PMC_alive_fun (interp=0x60b080,
>  obj=0x74b938) at src/gc/api.c:156
>  #3  0x00007ffff79c696e in trace_mem_block (interp=0x60b080, mem_pools=0x0,

Excellent! Thanks, it's enough info to fix it.

-- 
Bacek

Changed 4 years ago by bacek

Hello.

Fix for this bug (and #1871) is something like this:

diff --git a/include/parrot/pointer_array.h b/include/parrot/pointer_array.h
index 7c0277f..35be87a 100644
--- a/include/parrot/pointer_array.h
+++ b/include/parrot/pointer_array.h
@@ -20,7 +20,8 @@ Lower bit in cell masked to indicate pointer-to-free-cell.
 #define PARROT_POINTER_ARRAY_H_GUARD
 
 /* Calculate size of chunk data     "header"  */
-#define CELL_PER_CHUNK ((4096 - 2 * sizeof(size_t) / sizeof (void *)))
+#define CHUNK_SIZE 4096
+#define CELL_PER_CHUNK ((CHUNK_SIZE - 2 * sizeof(size_t) / sizeof (void *)))
 
 typedef struct Parrot_Pointer_Array_Chunk {
     size_t   num_free;
@@ -76,6 +77,15 @@ void * Parrot_pa_insert(PARROT_INTERP,
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+int Parrot_pa_is_owned(PARROT_INTERP,
+    ARGIN(Parrot_Pointer_Array *self),
+    ARGIN(void *orig),
+    ARGIN_NULLOK(void *ref))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 Parrot_Pointer_Array * Parrot_pa_new(PARROT_INTERP)
         __attribute__nonnull__(1);
@@ -95,6 +105,10 @@ void Parrot_pa_remove(PARROT_INTERP,
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(self) \
     , PARROT_ASSERT_ARG(ptr))
+#define ASSERT_ARGS_Parrot_pa_is_owned __attribute__unused__ int _ASSERT_ARGS_C
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(orig))
 #define ASSERT_ARGS_Parrot_pa_new __attribute__unused__ int _ASSERT_ARGS_CHECK 
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_pa_remove __attribute__unused__ int _ASSERT_ARGS_CHE
diff --git a/src/gc/gc_ms2.c b/src/gc/gc_ms2.c
index 90d7952..b651ee7 100644
--- a/src/gc/gc_ms2.c
+++ b/src/gc/gc_ms2.c
@@ -638,6 +638,7 @@ Parrot_gc_ms2_init(PARROT_INTERP)
         self->fixed_size_allocator = Parrot_gc_fixed_allocator_new(interp);
 
         self->gc_threshold = Parrot_sysmem_amount(interp) / 8;
+        //self->gc_threshold = 1024 * 1024;
     }
 
     interp->gc_sys->gc_private = self;
@@ -1242,7 +1243,11 @@ gc_ms2_is_ptr_owned(PARROT_INTERP, ARGIN_NULLOK(void *ptr
     if (PObj_is_live_or_free_TESTALL(obj))
         return 0;
 
-    return 1;
+    /* Pool.is_owned isn't precise enough (yet) */
+    if (Parrot_pa_is_owned(interp, self->objects, item, item->ptr))
+        return 1;
+
+    return 0;
 }
 
 
diff --git a/src/pointer_array.c b/src/pointer_array.c
index 811ec97..2f5096f 100644
--- a/src/pointer_array.c
+++ b/src/pointer_array.c
@@ -147,6 +147,42 @@ Parrot_pa_remove(PARROT_INTERP, ARGIN(Parrot_Pointer_Array 
 
 /*
 
+=item C<int Parrot_pa_is_owned(PARROT_INTERP, Parrot_Pointer_Array *self, void
+*orig, void *ref)>
+
+Check that C<orig> pointer is stored in C<ref> cell. Used during system stack t
+
+=cut
+
+*/
+PARROT_EXPORT
+int
+Parrot_pa_is_owned(PARROT_INTERP, ARGIN(Parrot_Pointer_Array *self),
+        ARGIN(void *orig), ARGIN_NULLOK(void *ref))
+{
+    ASSERT_ARGS(Parrot_pa_is_owned)
+    size_t i;
+
diff --git a/include/parrot/pointer_array.h b/include/parrot/pointer_array.h
index 7c0277f..35be87a 100644
--- a/include/parrot/pointer_array.h
+++ b/include/parrot/pointer_array.h
@@ -20,7 +20,8 @@ Lower bit in cell masked to indicate pointer-to-free-cell.
 #define PARROT_POINTER_ARRAY_H_GUARD
 
 /* Calculate size of chunk data     "header"  */
-#define CELL_PER_CHUNK ((4096 - 2 * sizeof(size_t) / sizeof (void *)))
+#define CHUNK_SIZE 4096
+#define CELL_PER_CHUNK ((CHUNK_SIZE - 2 * sizeof(size_t) / sizeof (void *)))
 
 typedef struct Parrot_Pointer_Array_Chunk {
     size_t   num_free;
@@ -76,6 +77,15 @@ void * Parrot_pa_insert(PARROT_INTERP,
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+int Parrot_pa_is_owned(PARROT_INTERP,
+    ARGIN(Parrot_Pointer_Array *self),
+    ARGIN(void *orig),
+    ARGIN_NULLOK(void *ref))
+        __attribute__nonnull__(1)
~/src/parrot (master)$ git diff > fix.patch
~/src/parrot (master)$ git diff
diff --git a/include/parrot/pointer_array.h b/include/parrot/pointer_array.h
index 7c0277f..35be87a 100644
--- a/include/parrot/pointer_array.h
+++ b/include/parrot/pointer_array.h
@@ -20,7 +20,8 @@ Lower bit in cell masked to indicate pointer-to-free-cell.
 #define PARROT_POINTER_ARRAY_H_GUARD
 
 /* Calculate size of chunk data     "header"  */
-#define CELL_PER_CHUNK ((4096 - 2 * sizeof(size_t) / sizeof (void *)))
+#define CHUNK_SIZE 4096
+#define CELL_PER_CHUNK ((CHUNK_SIZE - 2 * sizeof(size_t) / sizeof (void *)))
 
 typedef struct Parrot_Pointer_Array_Chunk {
     size_t   num_free;
@@ -76,6 +77,15 @@ void * Parrot_pa_insert(PARROT_INTERP,
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+int Parrot_pa_is_owned(PARROT_INTERP,
+    ARGIN(Parrot_Pointer_Array *self),
+    ARGIN(void *orig),
+    ARGIN_NULLOK(void *ref))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 Parrot_Pointer_Array * Parrot_pa_new(PARROT_INTERP)
         __attribute__nonnull__(1);
@@ -95,6 +105,10 @@ void Parrot_pa_remove(PARROT_INTERP,
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(self) \
     , PARROT_ASSERT_ARG(ptr))
+#define ASSERT_ARGS_Parrot_pa_is_owned __attribute__unused__ int _ASSERT_ARGS_C
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(orig))
 #define ASSERT_ARGS_Parrot_pa_new __attribute__unused__ int _ASSERT_ARGS_CHECK 
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_pa_remove __attribute__unused__ int _ASSERT_ARGS_CHE
diff --git a/src/gc/gc_ms2.c b/src/gc/gc_ms2.c
index 90d7952..b651ee7 100644
--- a/src/gc/gc_ms2.c
+++ b/src/gc/gc_ms2.c
@@ -638,6 +638,7 @@ Parrot_gc_ms2_init(PARROT_INTERP)
         self->fixed_size_allocator = Parrot_gc_fixed_allocator_new(interp);
 
         self->gc_threshold = Parrot_sysmem_amount(interp) / 8;
+        //self->gc_threshold = 1024 * 1024;
     }
 
     interp->gc_sys->gc_private = self;
@@ -1242,7 +1243,11 @@ gc_ms2_is_ptr_owned(PARROT_INTERP, ARGIN_NULLOK(void *ptr
     if (PObj_is_live_or_free_TESTALL(obj))
         return 0;
 
-    return 1;
+    /* Pool.is_owned isn't precise enough (yet) */
+    if (Parrot_pa_is_owned(interp, self->objects, item, item->ptr))
+        return 1;
+
+    return 0;
 }
 
 
diff --git a/src/pointer_array.c b/src/pointer_array.c
index 811ec97..2f5096f 100644
--- a/src/pointer_array.c
+++ b/src/pointer_array.c
@@ -147,6 +147,42 @@ Parrot_pa_remove(PARROT_INTERP, ARGIN(Parrot_Pointer_Array 
 
 /*
 
+=item C<int Parrot_pa_is_owned(PARROT_INTERP, Parrot_Pointer_Array *self, void
+*orig, void *ref)>
+
+Check that C<orig> pointer is stored in C<ref> cell. Used during system stack t
+
+=cut
+
+*/
+PARROT_EXPORT
+int
+Parrot_pa_is_owned(PARROT_INTERP, ARGIN(Parrot_Pointer_Array *self),
+        ARGIN(void *orig), ARGIN_NULLOK(void *ref))
+{
+    ASSERT_ARGS(Parrot_pa_is_owned)
+    size_t i;
+
+    /* Return early if ref is null */
+    if (!ref)
+        return 0;
+
+    /* We can't just deref pointer. It can be garbage */
+    /* So, ensure that C<ref> is looks like real pointer */
+    for (i = 0; i < self->total_chunks; i++) {
+        Parrot_Pointer_Array_Chunk *chunk = self->chunks[i];
+        if (PTR2UINTVAL(ref) < PTR2UINTVAL(chunk->data))
+            continue;
+        if (PTR2UINTVAL(ref) > PTR2UINTVAL(chunk) + CHUNK_SIZE)
+            continue;
+        return (*(void **)ref == orig);
+    }
+
+    return 0;
+}
+
+/*
+
 =item C<static void allocate_more_chunks(PARROT_INTERP, Parrot_Pointer_Array
 *self)>
 

Unfortunatelly I will not have time to test and finish it till next week. If someone can finish patch it will be very helpful.

-- Bacek

Changed 4 years ago by mikehh

applied the patch (modified) to pass tests in  https://github.com/parrot/parrot/commit/a34696c8d8

it seems to pass for me on Ubuntu 10.10 amd64 - both gcc-4.5 and g++-4.5, with and without --optimize

going to do some further tests on i386 version

if anyone experiences any problems please report them

Changed 4 years ago by bacek

Hello.

Build failed on my Linux/amd64 box.

./parrot-nqp --target=pir --output=compilers/opsc/gen/Ops/Trans/C.pir compilers/opsc/src/Ops/Trans/C.pm
too few positional arguments: 0 passed, 1 (or more) expected
current instr.: 'parrot;Regex;Cursor;' pc -1 ((unknown file):-1)
called from Sub 'parrot;HLL;Grammar;EXPR' pc 1172 (ext/nqp-rx/src/stage0/HLL-s0.pir:647)
called from Sub 'parrot;HLL;Grammar;EXPR' pc 1393 (ext/nqp-rx/src/stage0/HLL-s0.pir:742)
called from Sub 'parrot;NQP;Grammar;statement' pc 7670 (ext/nqp-rx/src/stage0/NQP-s0.pir:2350)
called from Sub 'parrot;NQP;Grammar;statementlist' pc 7155 (ext/nqp-rx/src/stage0/NQP-s0.pir:2226)
called from Sub 'parrot;NQP;Grammar;comp_unit' pc 6698 (ext/nqp-rx/src/stage0/NQP-s0.pir:2105)
called from Sub 'parrot;NQP;Grammar;package_def' pc 26921 (ext/nqp-rx/src/stage0/NQP-s0.pir:7508)
called from Sub 'parrot;NQP;Grammar;package_declarator:sym<class>' pc 26195 (ext/nqp-rx/src/stage0/NQP-s0.pir:7263)
called from Sub 'parrot;Regex;Cursor;!protoregex' pc 2516 (ext/nqp-rx/src/stage0/Regex-s0.pir:1295)
called from Sub 'parrot;NQP;Grammar;package_declarator' pc 25528 (ext/nqp-rx/src/stage0/NQP-s0.pir:7130)
called from Sub 'parrot;NQP;Grammar;term:sym<package_declarator>' pc 21016 (ext/nqp-rx/src/stage0/NQP-s0.pir:5865)
called from Sub 'parrot;Regex;Cursor;!protoregex' pc 2516 (ext/nqp-rx/src/stage0/Regex-s0.pir:1295)
called from Sub 'parrot;NQP;Grammar;term' pc 39847 (ext/nqp-rx/src/stage0/NQP-s0.pir:10687)
called from Sub 'parrot;HLL;Grammar;termish' pc 2979 (ext/nqp-rx/src/stage0/HLL-s0.pir:1292)
called from Sub 'parrot;HLL;Grammar;EXPR' pc 1228 (ext/nqp-rx/src/stage0/HLL-s0.pir:674)
called from Sub 'parrot;NQP;Grammar;statement' pc 7670 (ext/nqp-rx/src/stage0/NQP-s0.pir:2350)
called from Sub 'parrot;NQP;Grammar;statementlist' pc 7155 (ext/nqp-rx/src/stage0/NQP-s0.pir:2226)
called from Sub 'parrot;NQP;Grammar;comp_unit' pc 6698 (ext/nqp-rx/src/stage0/NQP-s0.pir:2105)
called from Sub 'parrot;NQP;Grammar;TOP' pc 1326 (ext/nqp-rx/src/stage0/NQP-s0.pir:495)
called from Sub 'parrot;Regex;Cursor;parse' pc 371 (ext/nqp-rx/src/stage0/Regex-s0.pir:230)
called from Sub 'parrot;HLL;Compiler;parse' pc 96 (ext/nqp-rx/src/stage0/HLL-s0.pir:63)
called from Sub 'parrot;PCT;HLLCompiler;compile' pc 464 (compilers/pct/src/PCT/HLLCompiler.pir:331)
called from Sub 'parrot;HLL;Compiler;eval' pc 24780 (ext/nqp-rx/src/stage0/HLL-s0.pir:8268)
called from Sub 'parrot;PCT;HLLCompiler;evalfiles' pc 1499 (compilers/pct/src/PCT/HLLCompiler.pir:764)
called from Sub 'parrot;PCT;HLLCompiler;command_line' pc 1710 (compilers/pct/src/PCT/HLLCompiler.pir:873)
called from Sub 'parrot;NQP;Compiler;main' pc 92779 (ext/nqp-rx/src/stage0/NQP-s0.pir:26402)

-- Bacek

Changed 4 years ago by bacek

Changed 4 years ago by bacek

Hello.

mikehh, can you confirm and close this bug?

-- Bacek

Changed 4 years ago by mikehh

  • status changed from new to closed
  • resolution set to fixed

Seems to be fixed, haven't seen the problem again. Closing

Note: See TracTickets for help on using tickets.