Re: [perl #44353] [BUG] Configure.pl: verbose-step option not working with named step

2007-08-03 Thread James E Keenan

Joshua Hoblitt wrote:

The issue is here is that there is nothing in Configure.pl's output to
correlate the package name of the step with the output seen from a
typical run.

For example, say the test that outputs Determining architecture, OS and
JIT capability... is failing for some reason so you
want to run it verbosely?  Unless you are one of the PI number of people
in the world that has fiddled with the configure steps your not going to
know that steps package name is 'auto::jit'.  


I suspect, however, that the number of people in the world who at any 
moment *do* fiddle with the configure steps is a low multiple of PI -- 
and that they know where to look up the names of the steps 
(Parrot::Configure::Step::List).


The current system lets

you run that step verbosely with just `perl Configure.pl
--verbose-step=jit` and it just works.



But what if you say:  'perl Configure.pl --verbose-step=Determining' ? 
Then you get more than you want.  There's no requirement that the 
author/maintainer of a config/*/*.pm package provide a $description that 
unambiguously distinguishes that step from all others.



Possible ways forward:

1) Do nothing and document the behavior

2) add an additional test for a step with a package name matching the
string passed to --verbose-step



This is what particle was expecting to happen.  It's what I thought 
should have been happening -- even though upon re-reading the output of 
--help I can see that your interpretation is not unreasonable.



3) remove the description matching functionality

4) 2  3

5) remove --verbose-step altogether

6) remove the --verbose* options and just write a 'config.log'
on every run that can be searched with your text editor for choice.
This:
- removes code
- removes complexity
- is helpful for user support, please send me your config.log file



This, of course, is not so much a fix for the current problem as a 
request for a new feature, which should go into a separate RT.  It 
sounds both desirable and feasible.  (My recent addition of 
Parrot::Configure::Trace works somewhat the same way, logging the 
internal development of the P::C object over the course of the steps.)



7) have ever[y] configure step print its package name as part of its
output



I'm thinking that this is a happy compromise between the 'provide the 
step::name only' and 'provide something that appears in the description' 
position.  What the user would type to request verbosity would be fairly 
self-evident.



kid51


[perl #44363] [PATCH] -D80 + bad luck = segfault

2007-08-03 Thread via RT
# New Ticket Created by  Bram Geron 
# Please include the string:  [perl #44363]
# in the subject line of all future correspondence about this issue. 
# URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44363 


At Parrot exit, we force-destroy all PObjs. It can happen that a context
is destroyed after its sub is destroyed. Usually that's not a problem,
but if you run with -D80 (show when contexts are destroyed, and print
out the name of the sub) we may segfault, because the Parrot_sub
structure is already freed.

This patch fixes the segfault by turning off -D80 just before
force-freeing all PObjs.

 inter_create.c |8 
 1 file changed, 8 insertions(+)

This patch is unified after applying the patch from bug #44351. You
probably want to apply that first, or you will get warnings from patch(1).

-- 
Bram Geron | GPG 0xE7B9E65E




diff --git a/src/inter_create.c b/src/inter_create.c
index 307fa71..6a6c4aa 100644
--- a/src/inter_create.c
+++ b/src/inter_create.c
@@ -315,6 +315,14 @@ Parrot_really_destroy(PARROT_INTERP, SHIM(int exit_code), SHIM(void *arg))
 interp-arena_base-DOD_block_level =
 interp-arena_base-GC_block_level = 0;
 
+if (Interp_debug_TEST(interp, PARROT_CTX_DESTROY_DEBUG_FLAG)) {
+PIO_eprintf(interp, We are about to exit and force-free subs, so turning off -D%x. It might\n
+generate segfaults when we destroy a context of which the sub is already\n
+dead.\n,
+PARROT_CTX_DESTROY_DEBUG_FLAG);
+Interp_debug_CLEAR(interp, PARROT_CTX_DESTROY_DEBUG_FLAG);
+}
+
 if (Interp_trace_TEST(interp, ~0)) {
 PIO_eprintf(interp, ParrotIO objects (like stdout and stderr) are about to be closed, so clearing trace flags.\n);
 Interp_trace_CLEAR(interp, ~0);






[svn ci] increased warnings levels for msvc

2007-08-03 Thread jerry gay
if you windows developers suddenly notice that your build output is
full of warnings, it's because we've increased the warnings level from
-W3 to -W4. since some level four warnings are so noisy, we've
disabled a few of them, until we get the others under control.

if you have msvc and an eye for fixing warnings in c code, please dive
in and help. output of a recent make session can be found here:
http://nopaste.snit.ch:8001/10794

~jerry


Re: [svn:parrot] r20446 - trunk/config/auto

2007-08-03 Thread Andy Lester


On Aug 3, 2007, at 8:19 AM, [EMAIL PROTECTED] wrote:


Modified:
   trunk/config/auto/gcc.pm

Log:
[config] Started doing some cleaning of the warnings setting code  
for gcc


I'm going to be gutting all this gcc code  in a day or two anyway,  
making it autosniff capabilities like the autosniffing I've done on  
the HASATTRIBUTE flags.


xoxo,
Andy

--
Andy Lester = [EMAIL PROTECTED] = www.petdance.com = AIM:petdance






[perl #44351] [PATCH] GC_VERBOSE=1 + tracing = segfault

2007-08-03 Thread via RT
# New Ticket Created by  Bram Geron 
# Please include the string:  [perl #44351]
# in the subject line of all future correspondence about this issue. 
# URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44351 


When GC_VERBOSE=1 and tracing is on, Parrot spits out messages about
PObjs getting destroyed. These messages are getting spit out with
PIO_eprintf, which accesses the ParrotIO object for stderr. The problem
is that at Parrot_exit, all PObjs are destroyed (including ParrotIO
objects), and trying to spit out such messages will fail with a SIGSEGV.

This patch turns off such tracing with a notice just before
force-destroying all PObjs (no matter the setting of GC_VERBOSE).
Without tracing enabled, it does nothing.

 include/parrot/dod.h |3 ++-
 src/inter_create.c   |8 
 2 files changed, 10 insertions(+), 1 deletion(-)

-- 
Bram Geron | GPG 0xE7B9E65E

diff --git a/include/parrot/dod.h b/include/parrot/dod.h
index 79c1831..15df0e0 100644
--- a/include/parrot/dod.h
+++ b/include/parrot/dod.h
@@ -44,7 +44,8 @@
 #define DOD_trace_stack_FLAG(UINTVAL)(1  0)   /* trace system areads and stack */
 #define DOD_trace_normal(UINTVAL)(1  0)   /* the same */
 #define DOD_lazy_FLAG   (UINTVAL)(1  1)   /* timely destruction run */
-#define DOD_finish_FLAG (UINTVAL)(1  2)   /* run async past sweep */
+#define DOD_finish_FLAG (UINTVAL)(1  2)   /* on Parrot exit: mark (almost) all PMCs dead and */
+/* garbage collect. */
 #define DOD_no_trace_volatile_roots (UINTVAL)(1  3)
 /* trace all but volatile root set, i.e. registers */
 
diff --git a/src/inter_create.c b/src/inter_create.c
index 51c355d..307fa71 100644
--- a/src/inter_create.c
+++ b/src/inter_create.c
@@ -314,6 +314,14 @@ Parrot_really_destroy(PARROT_INTERP, SHIM(int exit_code), SHIM(void *arg))
  */
 interp-arena_base-DOD_block_level =
 interp-arena_base-GC_block_level = 0;
+
+if (Interp_trace_TEST(interp, ~0)) {
+PIO_eprintf(interp, ParrotIO objects (like stdout and stderr) are about to be closed, so clearing trace flags.\n);
+Interp_trace_CLEAR(interp, ~0);
+}
+
+/* Destroys all PMCs, even constants and the ParrotIO objects for
+ * std{in,out,err}. So we better not try to be verbose about DOD'ing. */
 Parrot_do_dod_run(interp, DOD_finish_FLAG);
 
 #if STM_PROFILE



Re: [perl #44345] [PATCH] Add NQP to docs/glossary.pod

2007-08-03 Thread Colin Kuskie
The attached patch adds NQP to the glossary in the docs directory. 
  

The attached, corrected patch gives the correct definition
for NQP.

Colin   
Index: docs/glossary.pod
===
--- docs/glossary.pod   (revision 20449)
+++ docs/glossary.pod   (working copy)
@@ -221,6 +221,12 @@
 
 Acronym for Native Call Interface.
 
+=head2 NQP
+
+Acronym for Not Quite Perl (6).  NQP is designed to be a very small compiler 
for
+quickly generating PIR routines to create transformers for Parrot (especially
+HLL compilers).
+
 =head2 Packfile
 
 Another name for a PBC file, due to the names used for data structures in one



[perl #44213] docs/faq.pod - fix Lfoo|http://... pod abuse

2007-08-03 Thread Will Coleda via RT
Seems like a pretty straightforward patch, but isn't the L syntax 
used currently proper? Is there a particular pod reader we're trying 
to make happy?




[perl #44393] something funny in dod/gc blocking macros

2007-08-03 Thread via RT
# New Ticket Created by  Jerry Gay 
# Please include the string:  [perl #44393]
# in the subject line of all future correspondence about this issue. 
# URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44393 


i'm having trouble on x86_64. when running a 32bit parrot, i get
occasional deadlock at the OS level, after Parrot_exit. when running a
64bit parrot, it segfaults within Parrot_exit, while running the exit
handlers. if i run with -G, no segfault.

a comment in the source notes that disabling dod/gc may be a good
thing to do, since gc during interpreter teardown could lead to Bad
Things. sounds like that's a valid note, and addressing it will fix my
problems.

so, i try a patch:

===
Index: src/exit.c
===
--- src/exit.c  (revision 20461)
+++ src/exit.c  (working copy)
@@ -70,6 +70,9 @@
  * and: interp-exit_handler_list is gone, after the last exit handler
  *  (Parrot_really_destroy) has run
  */
+Parrot_block_DOD(interp);
+Parrot_block_GC(interp);
+
 handler_node_t *node = interp-exit_handler_list;
 while (node) {
 handler_node_t * const next = node-next;

===

but that gives me compile errors:

===
src\exit.c
src\exit.c(76) : error C2275: 'handler_node_t' : illegal use of this type as an
expression
c:\usr\local\parrot\trunk\include\parrot/exit.h(25) : see declaration of
 'handler_node_t'
src\exit.c(76) : error C2065: 'node' : undeclared identifier
src\exit.c(78) : error C2223: left of '-next' must point to struct/union
src\exit.c(80) : error C2223: left of '-function' must point to struct/union
src\exit.c(80) : error C2223: left of '-arg' must point to struct/union
src\exit.c(81) : warning C4022: 'mem_sys_free' : pointer mismatch for actual par
ameter 1
src\exit.c(82) : warning C4047: '=' : 'int' differs in levels of indirection fro
m 'handler_node_t *const '
===

huh? something must be funny in these macros. a naive workaround:

===
Index: src/exit.c
===
--- src/exit.c  (revision 20461)
+++ src/exit.c  (working copy)
@@ -70,6 +70,10 @@
  * and: interp-exit_handler_list is gone, after the last exit handler
  *  (Parrot_really_destroy) has run
  */
+Parrot_block_DOD(interp);
+Parrot_block_GC(interp);
+
+{
 handler_node_t *node = interp-exit_handler_list;
 while (node) {
 handler_node_t * const next = node-next;
@@ -78,7 +82,7 @@
 mem_sys_free(node);
 node = next;
 }
-
+}
 exit(status);
 }

===

compiles without error.

what's going on here? i have i feeling i'm close to fixing this
annoying bug, but now i've got to dive into two or three levels of
hate, and i really want to start my weekend.

so, that's what i'm going to do. feel free to beat me to fixing this
before i pick up on it again next week, please!
~jerry


[perl #44393] something funny in dod/gc blocking macros

2007-08-03 Thread Jerry Gay via RT
hi, i'm a blockhead. ron reminded me that i'm not following C89, since
node was not defined at the top of a block. duh.

anyway, this doesn't seem to fix the problem. rats. i must misunderstand
the comment, because i find it hard to believe that adding these few
lines of code is enough to address a whole paragraph of comments.

your input is most welcome.
~jerry


Re: [perl #44393] something funny in dod/gc blocking macros

2007-08-03 Thread chromatic
On Friday 03 August 2007 13:29:53 Jerry Gay wrote:

 i'm having trouble on x86_64. when running a 32bit parrot, i get
 occasional deadlock at the OS level, after Parrot_exit. when running a
 64bit parrot, it segfaults within Parrot_exit, while running the exit
 handlers. if i run with -G, no segfault.

Bram Geron's patches in RT #44363 and RT #44351 look reasonable to me.  I 
think they might work for you.

-- c


Re: [perl #44213] docs/faq.pod - fix Lfoo|http://... pod abuse

2007-08-03 Thread Ron Blaschke
Will Coleda via RT wrote:
 Seems like a pretty straightforward patch, but isn't the L syntax 
 used currently proper? Is there a particular pod reader we're trying 
 to make happy?

I tripped over this recently too.

From perlpod:

*   Lscheme:...

Links to an absolute URL. For example,
Lhttp://www.perl.org/. But note that there is no
corresponding Ltext|scheme:... syntax, for various reasons.


Re: [perl #44213] docs/faq.pod - fix Lfoo|http://... pod abuse

2007-08-03 Thread Eric Wilhelm
# from Will Coleda via RT
# on Friday 03 August 2007 01:40 pm:

Seems like a pretty straightforward patch, but isn't the L syntax
used currently proper? 

The L doesn't support named http:// links.

from perlpod:

'
Lscheme:... 

Links to an absolute URL. For example, Lhttp://www.perl.org/. But note 
that there is no corresponding Ltext|scheme:... syntax, for various 
reasons.
'

Is there a particular pod reader we're trying 
to make happy?

I'm assuming the website uses combust, so mostly whatever combust uses.  
The 68K emulator and April Fool's Joke links here are broken 
because of it:

  http://www.parrotcode.org/faq/

Also, pod2html (Pod::HTML) and Pod::Simple::HTML.

Thanks,
Eric
-- 
It is impossible to make anything foolproof because fools are so 
ingenious.
--Murphy's Second Corollary
---
http://scratchcomputing.com
---


Re: [perl #44379] config/auto/attributes.pm ought to use its own test_c.in

2007-08-03 Thread jerry gay
On 8/3/07, via RT Andy Dougherty [EMAIL PROTECTED] wrote:
 # New Ticket Created by  Andy Dougherty
 # Please include the string:  [perl #44379]
 # in the subject line of all future correspondence about this issue.
 # URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44379 


 The new attributes scanning ought to use its own test_c.in file, instead
 of trying to piggy-back off existing test_c.in files.  The scheme in place
 has several problems:

 1.  It has no fallback.  From attributes.pm, the following snippet:

 if ( $cc =~ /gcc/ ) {
 cc_gen('config/auto/gcc/test_c.in');
 }
 elsif ( $cc eq 'cl' ) {
 cc_gen('config/auto/msvc/test_c.in');
 }
 does nothing for other compilers.  Obviously, all the compiles fail,
 since no test.c file is generated.  I don't know, for example, if 'icc'
 handles attributes, or if it might in the future.

 2.  The name of the compiler is not the best test of whether you are
 using gcc.  On Linux, for example, if you use Configure.pl --cc=cc, then
 this test,
 if ( $cc =~ /gcc/ ) {
 fails, even though you are using gcc.  A better test is to check
 gccversion.

 3.  The attributes testing is now duplicated in two test files,
 gcc/test_c.in and msvc/test_c.in.

 4.  It's now potentially more difficult to use gcc/test_c.in for its
 intended use.  For example, the Solaris hints file needs to know if
 we're using gcc, and it used to try to compile the gcc/test_c.in
 program.  Now, it has to add in -Iinclude/ to pick up
 parrot/compilers.h which does the #ifdef dance around all the
 attributes.  All this compilication just to see if we're using gcc.

 A much better plan, in my humble opinion, is to revert most of these
 changes and simply make a *new* test_c.in file,
 config/auto/attributes/test_c.in.  Each test file can then concentrate
 on doing one test.

 Thanks for listening,

you're right, on all points. i hacked that code in to get msvc
working, and figured i'd clean up the damage later. sorry, i didn't
think of testing icc before i committed--of course it'll break.

i don't expect to have the tuits until monday, though. hopefully
somebody will step in before then and clean up the mess andy and i
made. otherwise, i'll get to it first when i'm available.
~jerry


[perl #44379] config/auto/attributes.pm ought to use its own test_c.in

2007-08-03 Thread via RT
# New Ticket Created by  Andy Dougherty 
# Please include the string:  [perl #44379]
# in the subject line of all future correspondence about this issue. 
# URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44379 


The new attributes scanning ought to use its own test_c.in file, instead 
of trying to piggy-back off existing test_c.in files.  The scheme in place 
has several problems:

1.  It has no fallback.  From attributes.pm, the following snippet:

if ( $cc =~ /gcc/ ) {
cc_gen('config/auto/gcc/test_c.in');
}
elsif ( $cc eq 'cl' ) {
cc_gen('config/auto/msvc/test_c.in');
}
does nothing for other compilers.  Obviously, all the compiles fail,
since no test.c file is generated.  I don't know, for example, if 'icc'
handles attributes, or if it might in the future.

2.  The name of the compiler is not the best test of whether you are
using gcc.  On Linux, for example, if you use Configure.pl --cc=cc, then
this test,
if ( $cc =~ /gcc/ ) {
fails, even though you are using gcc.  A better test is to check
gccversion.

3.  The attributes testing is now duplicated in two test files,
gcc/test_c.in and msvc/test_c.in.

4.  It's now potentially more difficult to use gcc/test_c.in for its
intended use.  For example, the Solaris hints file needs to know if
we're using gcc, and it used to try to compile the gcc/test_c.in
program.  Now, it has to add in -Iinclude/ to pick up
parrot/compilers.h which does the #ifdef dance around all the
attributes.  All this compilication just to see if we're using gcc.

A much better plan, in my humble opinion, is to revert most of these
changes and simply make a *new* test_c.in file,
config/auto/attributes/test_c.in.  Each test file can then concentrate
on doing one test.

Thanks for listening,

-- 
Andy Dougherty  [EMAIL PROTECTED]


[perl #44381] Should Configure.pl scan for __attribute__ at all?

2007-08-03 Thread via RT
# New Ticket Created by  Andy Dougherty 
# Please include the string:  [perl #44381]
# in the subject line of all future correspondence about this issue. 
# URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44381 


Thinking *way* ahead, I wonder if Configure.pl should even bother scanning 
for __attribute__ at all.  Perhaps it should just be hardcoded somewhere
in parrot/*.h.  In perl5, we're moving in that direction.  Here's the
relevant excerpt from perl.h:

/* In case Configure was not used (we are using a canned config
 * such as Win32, or a cross-compilation setup, for example) try going
 * by the gcc major and minor versions.  One useful URL is
 * http://www.ohse.de/uwe/articles/gcc-attributes.html,
 * but contrary to this information warn_unused_result seems
 * not to be in gcc 3.3.5, at least. --jhi
 * Also, when building extensions with an installed perl, this allows
 * the user to upgrade gcc and get the right attributes, rather than
 * relying on the list generated at Configure time.  --AD
 * Set these up now otherwise we get confused when some of the *thread.h
 * includes below indirectly pull in perlio.h (which needs to know if we
 * have HASATTRIBUTE_FORMAT).
 */

#if defined __GNUC__  !defined(__INTEL_COMPILER)
#  if __GNUC__ = 3 /* 3.0 - */ /* XXX Verify this version */
#define HASATTRIBUTE_FORMAT
#if defined __MINGW32__
#  define PRINTF_FORMAT_NULL_OK
#endif
#  endif
#  if __GNUC__ = 3 /* 3.0 - */
#define HASATTRIBUTE_MALLOC
#  endif
#  if __GNUC__ == 3  __GNUC_MINOR__ = 3 || __GNUC__  3 /* 3.3 - */
#define HASATTRIBUTE_NONNULL
#  endif
#  if __GNUC__ == 2  __GNUC_MINOR__ = 5 || __GNUC__  2 /* 2.5 - */
#define HASATTRIBUTE_NORETURN
#  endif
#  if __GNUC__ = 3 /* gcc 3.0 - */
#define HASATTRIBUTE_PURE
#  endif
#  if __GNUC__ == 3  __GNUC_MINOR__ = 4 || __GNUC__  3 /* 3.4 - */
#define HASATTRIBUTE_UNUSED
#  endif
#  if __GNUC__ == 3  __GNUC_MINOR__ == 3  !defined(__cplusplus)
#define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */
#  endif
#  if __GNUC__ == 3  __GNUC_MINOR__ = 4 || __GNUC__  3 /* 3.4 - */
#define HASATTRIBUTE_WARN_UNUSED_RESULT
#  endif
#endif


-- 
Andy Dougherty  [EMAIL PROTECTED]


[perl #44395] Lexical scopes are too coarse-grained for loops.

2007-08-03 Thread via RT
# New Ticket Created by  Bob Rogers 
# Please include the string:  [perl #44395]
# in the subject line of all future correspondence about this issue. 
# URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44395 


The problem arises when blocks with closed-over lexical bindings are
executed more than once, as can happen inside loops.  Here is an example
in Perl 5:

sub make_closures_loop {
# Return $n closures, each with lexical references to $i and $n.
my $n = shift;

my @result;
for (1..$n) {
my $i = $_;
push(@result, sub { print Called sub $i out of $n.\n; });
}
return @result;
}

Here there is only one $n binding, but a new and independent $i binding
is created every time through the loop, as running the first attachment
clearly shows.  It makes no difference if you say for my $i ... or
replace the loop with map instead.

   A naive PIR implementation of this loop is included as the second
attachment.  It fails miserably, because PIR can't distinguish between
the different scopes for $i and $n.

   Currently, the only way to get a distinct binding for each $i in
PIR is to factor the loop body out into a separate lexical sub.  This is
far from ideal, not least because it is not transparent to the HLL user.
It is also painful for compilers to optimize away:  In order to decide
whether the extra sub is really needed, the compiler must find all the
closed-over variables first, which (for me at least) requires breaking
lexical analysis into two passes.

   Parrot should do better, IMHO.  The easiest way, it seems, would be
to resurrect the push_pad and pop_pad instructions in some form.  After
the lexical analysis, the compiler can simply use the same is this
closed-over binding inside a loop? analysis to decide whether or not it
needs to emit push_pad/pop_pad at the appropriate places.  It then
becomes purely a question of merging lexical scopes during optimization,
and doesn't affect semantic correctness.

   FWIW, I do remember waaay back when Leo got rid of the explicit pad
manipulation instructions (r10240 on 2005-11-29 and thereabouts).  At
the time, it went right over my head that I might ever need these (my
compiler didn't even support closures until three weeks later), for
which I am now very sorry.  I am hoping that others will have a similar
reaction, and that push_pad etc. weren't flushed due to some fundamental
problem.

   For the record, continuations are also broken in this respect; not
surprisingly, they'll take you back to the right context, but with
whatever value of $i was stored last.  So whatever solution is
adopted, we need to make sure that continuations capture the detailed
lexical state.

   Any objection if I start working on this?

   TIA,

-- Bob Rogers
   http://rgrjr.dyndns.org/

#! /usr/bin/perl -w

use strict;
use warnings;

sub make_closures_loop {
# Return n closures, each with lexical references to $i and $n.
my $n = shift;

my @result;
for (1..$n) {
my $i = $_;
push(@result, sub { print Called sub $i out of $n.\n; });
}
return @result;
}

# Make three closures and call them in turn.
for my $c (make_closures_loop(3)) {
$c-();
}

## Return n closures, each with lexical references to I and N'.
.sub make_closures_loop
.param pmc n
.lex $n, n
.lex $i, $P42
.local pmc result
result = new .FixedPMCArray
$I1 = n
result = $I1
.const .Sub $P53 = 'internal_make_closures_loop_0'
$I0 = 0
next:
if $I0 = $I1 goto done
$P42 = new .Integer
$P42 = $I0
inc $P42
newclosure $P52, $P53
result[$I0] = $P52
inc $I0
goto next
done:
.return (result)
.end

.sub internal_make_closures_loop_0 :outer('make_closures_loop')
find_lex $P42, $i
find_lex $P43, $n
print Called sub 
print $P42
print  out of 
print $P43
print .\n
.end

## Make three closures and call them in turn.
.sub test_closures :main
.local pmc closures
$I1 = 3
closures = make_closures_loop($I1)
$I0 = 0
next:
if $I0 = $I1 goto done
$P52 = closures[$I0]
$P52()
inc $I0
goto next
done:
.end


[perl #44391] r19820 breaks other JITs

2007-08-03 Thread via RT
# New Ticket Created by  Joshua Isom 
# Please include the string:  [perl #44391]
# in the subject line of all future correspondence about this issue. 
# URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44391 


After a fair amount of headaches, I finally discovered some of my 
trouble with my jit.  It seems as though r19820 changed the API for 
preserving and restoring parrot's registers to cpu registers.  The 
cause was to convert internal_exceptions(fatal) to 
real_exceptions(maybe fatal), and since internal_exceptions need 
interp, interp gets passed around.  Only i386 was fixed to handle the 
API change, and PPC's broken.  In this case, real_exception could be 
appropriate to prevent executing bad/incomplete machine code that would 
crash parrot.  If you look at the exceptions used, in i386's 
jit_emit.h, it's more a bad jit_emit.h than anything caused by a user.



[svn:perl6-synopsis] r14432 - doc/trunk/design/syn

2007-08-03 Thread larry
Author: larry
Date: Fri Aug  3 18:27:52 2007
New Revision: 14432

Modified:
   doc/trunk/design/syn/S05.pod
   doc/trunk/design/syn/S06.pod

Log:
Clarification of meaning of foo: string form as non-interpolating
Restriction of placeholder names to lowercase to help us catch $^O et al.


Modified: doc/trunk/design/syn/S05.pod
==
--- doc/trunk/design/syn/S05.pod(original)
+++ doc/trunk/design/syn/S05.podFri Aug  3 18:27:52 2007
@@ -14,9 +14,9 @@
Maintainer: Patrick Michaud [EMAIL PROTECTED] and
Larry Wall [EMAIL PROTECTED]
Date: 24 Jun 2002
-   Last Modified: 10 Jul 2007
+   Last Modified: 3 Jul 2007
Number: 5
-   Version: 61
+   Version: 62
 
 This document summarizes Apocalypse 5, which is about the new regex
 syntax.  We now try to call them Iregex rather than regular
@@ -1000,7 +1000,8 @@
 
 foo: bar
 
-To pass a string with leading whitespace you must use the parenthesized form.
+To pass a string with leading whitespace, or to interpolate any values
+into the string, you must use the parenthesized form.
 
 If the first character is a plus or minus, the initial identifier
 is taken as a character class, so the first character after the

Modified: doc/trunk/design/syn/S06.pod
==
--- doc/trunk/design/syn/S06.pod(original)
+++ doc/trunk/design/syn/S06.podFri Aug  3 18:27:52 2007
@@ -13,9 +13,9 @@
 
   Maintainer: Larry Wall [EMAIL PROTECTED]
   Date: 21 Mar 2003
-  Last Modified: 2 Jun 2007
+  Last Modified: 3 Aug 2007
   Number: 6
-  Version: 88
+  Version: 89
 
 
 This document summarizes Apocalypse 6, which covers subroutines and the
@@ -1397,6 +1397,8 @@
 Note that placeholder variables syntactically cannot have type constraints.
 Also, it is illegal to use placeholder variables in a block that already
 has a signature, because the autogenerated signature would conflict with that.
+Placeholder names may only be lowercase, not because we're mean, but
+because it helps us catch references to obsolete Perl 5 variables such as $^O.
 
 =head1 Properties and traits
 


[svn:perl6-synopsis] r14433 - doc/trunk/design/syn

2007-08-03 Thread larry
Author: larry
Date: Fri Aug  3 18:40:13 2007
New Revision: 14433

Modified:
   doc/trunk/design/syn/S05.pod

Log:
date typo


Modified: doc/trunk/design/syn/S05.pod
==
--- doc/trunk/design/syn/S05.pod(original)
+++ doc/trunk/design/syn/S05.podFri Aug  3 18:40:13 2007
@@ -14,7 +14,7 @@
Maintainer: Patrick Michaud [EMAIL PROTECTED] and
Larry Wall [EMAIL PROTECTED]
Date: 24 Jun 2002
-   Last Modified: 3 Jul 2007
+   Last Modified: 3 Aug 2007
Number: 5
Version: 62
 


[perl #44389] Excessive warnings on Apple's gcc 3.3 wrt attributes

2007-08-03 Thread via RT
# New Ticket Created by  Joshua Isom 
# Please include the string:  [perl #44389]
# in the subject line of all future correspondence about this issue. 
# URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44389 


The new attribute configure code seems to get a false positive with 
warn_unused_result on Apple's gcc 3.3.

Here's the configure output from the attribute checking code.

Detecting compiler attributes (-DHASATTRIBUTE_xxx)...
trying attribute 'HASATTRIBUTE_CONST'
   cc: cc
   cc -o test -Iinclude -fno-common -no-cpp-precomp  -pipe -pipe 
-fno-common -Wno-long-double  -DHASATTRIBUTE_CONST test.c
   exit code: 1
trying attribute 'HASATTRIBUTE_DEPRECATED'
   cc: cc
   cc -o test -Iinclude -fno-common -no-cpp-precomp  -pipe -pipe 
-fno-common -Wno-long-double  -DHASATTRIBUTE_DEPRECATED test.c
   exit code: 1
trying attribute 'HASATTRIBUTE_FORMAT'
   cc: cc
   cc -o test -Iinclude -fno-common -no-cpp-precomp  -pipe -pipe 
-fno-common -Wno-long-double  -DHASATTRIBUTE_FORMAT test.c
   exit code: 1
trying attribute 'HASATTRIBUTE_MALLOC'
   cc: cc
   cc -o test -Iinclude -fno-common -no-cpp-precomp  -pipe -pipe 
-fno-common -Wno-long-double  -DHASATTRIBUTE_MALLOC test.c
   exit code: 1
trying attribute 'HASATTRIBUTE_NONNULL'
   cc: cc
   cc -o test -Iinclude -fno-common -no-cpp-precomp  -pipe -pipe 
-fno-common -Wno-long-double  -DHASATTRIBUTE_NONNULL test.c
   exit code: 1
trying attribute 'HASATTRIBUTE_NORETURN'
   cc: cc
   cc -o test -Iinclude -fno-common -no-cpp-precomp  -pipe -pipe 
-fno-common -Wno-long-double  -DHASATTRIBUTE_NORETURN test.c
   exit code: 1
trying attribute 'HASATTRIBUTE_PURE'
   cc: cc
   cc -o test -Iinclude -fno-common -no-cpp-precomp  -pipe -pipe 
-fno-common -Wno-long-double  -DHASATTRIBUTE_PURE test.c
   exit code: 1
trying attribute 'HASATTRIBUTE_UNUSED'
   cc: cc
   cc -o test -Iinclude -fno-common -no-cpp-precomp  -pipe -pipe 
-fno-common -Wno-long-double  -DHASATTRIBUTE_UNUSED test.c
   exit code: 1
trying attribute 'HASATTRIBUTE_WARN_UNUSED_RESULT'
   cc: cc
   cc -o test -Iinclude -fno-common -no-cpp-precomp  -pipe -pipe 
-fno-common -Wno-long-double  -DHASATTRIBUTE_WARN_UNUSED_RESULT test.c
   exit code: 1
trying attribute 'HASATTRIBUTE_NEVER_WORKS'
   cc: cc
   cc -o test -Iinclude -fno-common -no-cpp-precomp  -pipe -pipe 
-fno-common -Wno-long-double  -DHASATTRIBUTE_NEVER_WORKS test.c
   exit code: 1

My CC:

ccache gcc -I./include -fno-common -no-cpp-precomp -pipe -pipe 
-fno-common -Wno-long-double -DHASATTRIBUTE_CONST 
-DHASATTRIBUTE_DEPRECATED -DHASATTRIBUTE_MALLOC -DHASATTRIBUTE_NORETURN 
-DHASATTRIBUTE_PURE -DHASATTRIBUTE_UNUSED 
-DHASATTRIBUTE_WARN_UNUSED_RESULT -I/sw/include -I/sw/include -I 
/sw/include -g -W -Wall -Wundef -Wmissing-declarations 
-Wstrict-prototypes -Wmissing-prototypes -Winline -Wpointer-arith 
-Wcast-qual -Wwrite-strings -Waggregate-return -Winline -Wno-unused 
-Wnested-externs -Wsign-compare -falign-functions=16 
-Wformat-nonliteral -Wformat-security -Wpacked -Wdisabled-optimization 
-Wno-shadow -DHAS_JIT -DPPC -DHAVE_COMPUTED_GOTO -I. -o xx.o -c xx.c


And some of gcc's output.

include/parrot/stacks.h:56: warning: `warn_unused_result' attribute 
directive ignored
include/parrot/stacks.h:56: warning: `warn_unused_result' attribute 
directive ignored
include/parrot/stacks.h:68: warning: `warn_unused_result' attribute 
directive ignored
include/parrot/stacks.h:80: warning: `warn_unused_result' attribute 
directive ignored



Re: [perl #44389] Excessive warnings on Apple's gcc 3.3 wrt attributes

2007-08-03 Thread James E Keenan

Joshua Isom wrote:
# New Ticket Created by  Joshua Isom 
# Please include the string:  [perl #44389]
# in the subject line of all future correspondence about this issue. 
# URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44389 



The new attribute configure code seems to get a false positive with 
warn_unused_result on Apple's gcc 3.3.




Confirmed.  Over the last few weeks, my log of my 'make' output on 
Darwin has tended to run in the range of 70-73K.  Tonight it ran to

over 7.1M.

-rw-r--r--   1 jimk  jimk70806 Jul 14 17:43 14.07.2007.make.04.txt
-rw-r--r--   1 jimk  jimk71898 Jul 15 10:30 15.07.2007.make.txt
-rw-r--r--   1 jimk  jimk73181 Jul 22 21:17 21.07.2007.make.txt
-rw-r--r--   1 jimk  jimk  7167507 Aug  3 21:43 03.08.2007.make.txt

I certainly hope someone can patch this; it's not an area in which I 
have any expertise.   Thank you very much.
Summary of my parrot 0.4.14 (r20463) configuration:
  configdate='Sat Aug  4 01:28:41 2007 GMT'
  Platform:
osname=darwin, archname=darwin-2level
jitcapable=1, jitarchname=ppc-darwin,
jitosname=DARWIN, jitcpuarch=ppc
execcapable=1
perl=/usr/local/bin/perl
  Compiler:
cc='/usr/bin/gcc-3.3', ccflags='-fno-common -no-cpp-precomp  -pipe 
-I/usr/local/include -pipe -fno-common -Wno-long-double  -DHASATTRIBUTE_CONST 
-DHASATTRIBUTE_DEPRECATED -DHASATTRIBUTE_MALLOC -DHASATTRIBUTE_NORETURN 
-DHASATTRIBUTE_PURE -DHASATTRIBUTE_UNUSED -DHASATTRIBUTE_WARN_UNUSED_RESULT',
  Linker and Libraries:
ld='/usr/bin/g++-3.3', ldflags=' -L/usr/local/lib 
-L/Users/jimk/work/parrot/blib/lib -flat_namespace ',
cc_ldflags='',
libs='-lm'
  Dynamic Linking:
share_ext='.dylib', ld_share_flags='-dynamiclib -undefined suppress',
load_ext='.bundle', ld_load_flags='-bundle -undefined suppress'
  Types:
iv=long, intvalsize=4, intsize=4, opcode_t=long, opcode_t_size=4,
ptrsize=4, ptr_alignment=1 byteorder=4321, 
nv=double, numvalsize=8, doublesize=8


Re: [perl #44395] Lexical scopes are too coarse-grained for loops.

2007-08-03 Thread Patrick R. Michaud
On Fri, Aug 03, 2007 at 03:37:39PM -0700, Bob Rogers wrote:
A naive PIR implementation of this loop is included as the second
 attachment.  It fails miserably, because PIR can't distinguish between
 the different scopes for $i and $n.
 
 sub make_closures_loop {
 # Return n closures, each with lexical references to $i and $n.
 my $n = shift;
 
 my @result;
 for (1..$n) {
   my $i = $_;
   push(@result, sub { print Called sub $i out of $n.\n; });
 }
 return @result;
 }

 [...]

 ## Return n closures, each with lexical references to I and N'.
 .sub make_closures_loop
   .param pmc n
   .lex $n, n
   .lex $i, $P42
 [...]
 
 .sub internal_make_closures_loop_0 :outer('make_closures_loop')
   find_lex $P42, $i
   find_lex $P43, $n
 [...]

This seems wrong to me -- shouldn't $i be scoped to the internal
loop instead of the outer one?  In other words, I think the PIR
code should read:

.sub make_closures_loop
.param pmc n
.lex $n, n
...

and then

.sub internal_make_closures_loop_0 :outer('make_closures_loop')
.lex $i, $P42
find_lex $P43, $n
...

Otherwise, the reason that PIR isn't able to distinguish the
scopes is because in PIR you're actually defining them to be
in the same scope.

However, I must confess that I still haven't grokked all of the
ramifications of lexicals and closures in PIR yet -- and I may
even be interpreting the p5 translation incorrectly.  It just
looks to me as though the naive translation isn't being faithful
to the original p5 source, and so perhaps that's causing the
problem you're seeing.

Hope this helps,

Pm


Re: [perl #44395] Lexical scopes are too coarse-grained for loops

2007-08-03 Thread Patrick R. Michaud
Perhaps ignore my earlier message -- this one is more coherent.

On Fri, Aug 03, 2007 at 03:37:39PM -0700, Bob Rogers wrote:
   sub make_closures_loop {
   # Return $n closures, each with lexical references to $i and $n.
   my $n = shift;
 
   my @result;
   for (1..$n) {
   my $i = $_;
   push(@result, sub { print Called sub $i out of $n.\n; });
   }
   return @result;
   }
 
Currently, the only way to get a distinct binding for each $i in
 PIR is to factor the loop body out into a separate lexical sub.  This is
 far from ideal, not least because it is not transparent to the HLL user.

Factoring the loop body out into a separate lexical sub is _exactly_
how Chip described to me that the above needed to be done.
Or, phrased differently, every lexical scope ends up requiring
its own parrot sub (with appropriate :outer pragmas), and the
compiler can optimize out such subs when it determines that there
aren't any new lexicals being declared within the loop body
(which somewhat comes down to keeping track of whether the loop
body contains any my declarations).

I'm not sure why this separate lexical sub has to be visible
to the HLL user -- the compiler ought to be able to make it appear
as though the sub isn't present.  (But I also bet that we can
come up with an example that makes it really hard to do that.)

Parrot should do better, IMHO.  The easiest way, it seems, would be
 to resurrect the push_pad and pop_pad instructions in some form.  [...]

I'd like for Parrot to be able to do better, yes, but I'm not
yet enough of an expert on closure handling to be able to
refute Chip's reasons for designing things this way.  I also
found the push_pad and pop_pad model somewhat easier to grasp
conceptually, but I recall Chip was fairly certain that they
wouldn't handle things in the generic case.

FWIW, the perl6 compiler currently treats _every_ block as a new 
lexical scope, and generates a separate Parrot sub for each.
At some point we will add an optimization so that blocks can
be inlined when the compiler determines that it's safe to do
so (based in part on the absence of any lexical declarations
within the block).

Hope this helps somewhat more than my previous message... :-)

Pm


Re: [perl #44395] Lexical scopes are too coarse-grained for loops

2007-08-03 Thread Patrick R. Michaud
On Fri, Aug 03, 2007 at 09:51:53PM -0500, Patrick R. Michaud wrote:
 Currently, the only way to get a distinct binding for each $i in
  PIR is to factor the loop body out into a separate lexical sub.  This is
  far from ideal, not least because it is not transparent to the HLL user.
 
 Factoring the loop body out into a separate lexical sub is _exactly_
 how Chip described to me that the above needed to be done.

Just for completeness, attached is a PIR version that I think
is slightly more faithful to the original test-closures.pl 
program.  It appears to work:

  $ ./parrot test-closures-3.pir
  Called sub 1 out of 3.
  Called sub 2 out of 3.
  Called sub 3 out of 3.
  $

Pm



## Return n closures, each with lexical references to I and N'.
.sub make_closures_loop
.param pmc n
.lex $n, n
.lex @result, $P0
$P0 = new 'ResizablePMCArray'
$I0 = 1
$I1 = n
  next:
if $I0  $I1 goto done
'internal_loop_body'($I0)
inc $I0
goto next
  done:
.return ($P0)
.end


.sub 'internal_loop_body' :outer('make_closures_loop')
.param pmc topic
.lex '$_', topic
$P0 = clone topic
.lex '$i', $P0
.const .Sub $P1 = 'internal_sub'
newclosure $P2, $P1
find_lex $P3, '@result'
push $P3, $P2
.return ($P3)
.end

.sub 'internal_sub' :outer('internal_loop_body')
find_lex $P0, '$i'
find_lex $P1, '$n'
print Called sub 
print $P0
print  out of 
print $P1
print .\n
.end


## Make three closures and call them in turn.
.sub test_closures :main
.local pmc closures
$I1 = 3
closures = make_closures_loop($I1)
$I0 = 0
  next:
if $I0 = $I1 goto done
$P52 = closures[$I0]
$P52()
inc $I0
goto next
  done:
.end


Re: [perl #44395] Lexical scopes are too coarse-grained for loops

2007-08-03 Thread Bob Rogers
   From: Patrick R. Michaud [EMAIL PROTECTED]
   Date: Fri, 3 Aug 2007 21:51:53 -0500

   Perhaps ignore my earlier message -- this one is more coherent.

I haven't gotten that one yet.  (Must have been via RT.  Now if I could
only remember to send all my incoherent posts via RT.  ;-)

   On Fri, Aug 03, 2007 at 03:37:39PM -0700, Bob Rogers wrote:
   sub make_closures_loop {
   # Return $n closures, each with lexical references to $i and $n.
   my $n = shift;

   my @result;
   for (1..$n) {
   my $i = $_;
   push(@result, sub { print Called sub $i out of $n.\n; });
   }
   return @result;
   }

   Currently, the only way to get a distinct binding for each $i in
PIR is to factor the loop body out into a separate lexical sub.  This is
far from ideal, not least because it is not transparent to the HLL user.

   Factoring the loop body out into a separate lexical sub is _exactly_
   how Chip described to me that the above needed to be done.
   Or, phrased differently, every lexical scope ends up requiring
   its own parrot sub . . .

Bummer.

   I'm not sure why this separate lexical sub has to be visible
   to the HLL user -- the compiler ought to be able to make it appear
   as though the sub isn't present.  (But I also bet that we can
   come up with an example that makes it really hard to do that.)

It will show up in backtraces, if nothing else.  This may complicate the
user's debugging session slightly, because what the user assumed would
be one call frame is actually two, and inner functions may not have the
expected compiler-assigned names, but that's hardly a show-stopper.

   Parrot should do better, IMHO.  The easiest way, it seems, would be
to resurrect the push_pad and pop_pad instructions in some form.  [...]

   I'd like for Parrot to be able to do better, yes, but I'm not
   yet enough of an expert on closure handling to be able to
   refute Chip's reasons for designing things this way.

The current model has the advantage of being more declarative, which is
good; things that can be nailed down at compile time should be.  But the
same thing could be done for multiple loop scopes as well.  Consider the
following alternative:

## Return n closures, each with lexical references to I and N'.
.sub make_closures_loop
.param pmc n
.lex $n, n
.local pmc result
result = new .FixedPMCArray
$I1 = n
result = $I1
.const .Sub $P53 = 'internal_make_closures_loop_0'
$I0 = 0
next:
if $I0 = $I1 goto done
.push_scope
.lex $i, $P42
$P42 = new .Integer
$P42 = $I0
inc $P42
newclosure $P52, $P53
result[$I0] = $P52
inc $I0
.pop_scope
goto next
done:
.return (result)
.end

Every .lex belongs to the immediately enclosing .push_scope/.pop_scope
group (or the sub top-level scope).  .push_scope needs to expand into
push_pad, and .pop_scope needs to do a pop_pad, but the pseudo-ops serve
to delimit scopes so that the PIR compiler can build a LexInfo object
for each scope.  (But the inner .lex ops may require an explicit
store_lex, since they are not being stored in the Parrot_Context.
(Which is a good thing.))

   I also found the push_pad and pop_pad model somewhat easier to grasp
   conceptually, but I recall Chip was fairly certain that they wouldn't
   handle things in the generic case.

They would certainly permit more to be handled than is handled now.  And
re-adding them should be monotonic in terms of Parrot functionality.
Which means that Chip's statement (IYRC) seems to make no sense.  ???

   FWIW, the perl6 compiler currently treats _every_ block as a new 
   lexical scope, and generates a separate Parrot sub for each . . .

Hmm.  The lexical scope == Parrot sub worldview seems backwards to me.
But probably I'm just grumbling because I've realized I'm going to have
to rewrite a fair-sized chunk of my compiler to cope with this.  Oh,
well; so be it.

   
   From: Patrick R. Michaud [EMAIL PROTECTED]
   Date: Fri, 3 Aug 2007 22:13:25 -0500

   Just for completeness, attached is a PIR version that I think
   is slightly more faithful to the original test-closures.pl 
   program.  It appears to work:

 $ ./parrot test-closures-3.pir
 Called sub 1 out of 3.
 Called sub 2 out of 3.
 Called sub 3 out of 3.
 $

   Pm

Makes sense; looks like what map would compile into, if the block were
not inlined.

   Thanks for explaining the situation.

-- Bob


Re: [perl #37287] [TODO] pdb - don't die on exceptions

2007-08-03 Thread Mark Glines
 This patch makes parrot stop execution of the vm when running as a
 debugger.
 
 This makes the pdb stop executing and shows the exception message
 instead of silently exiting.

Hi, pancake!

I have tried to update your patch to svn r20469, see attached patch.
Unfortunately, it doesn't work any longer.

I wrote a simple test file (see attached test.pir) that just generates
an exception.  Then I tried to run it under parrot, and it generated
an exception, as expected.

[EMAIL PROTECTED] ~/parrot $ ./parrot test.pir
Null PMC access in get_string()
current instr.: 'main' pc 0 (test.pir:3)


Problem is, when I then ran it under pdb, it died pretty horribly.


[EMAIL PROTECTED] ~/parrot $ ./pdb test.pir
Parrot Debugger 0.4.x

Please note: the debugger is currently under reconstruction

(pdb) r
Restarting
Hijacked exception: Null PMC access in get_string()
Restarting
*** glibc detected *** ./pdb: free(): invalid pointer: 0xb6f191b8 ***
=== Backtrace: =
/lib/libc.so.6[0xb6e4efaf]
/lib/libc.so.6(__libc_free+0x89)[0xb6e4fce9]
/home/paranoid/parrot/blib/lib/libparrot.so.0.4.14(mem_sys_free+0x23)[0xb7c3b9b3]
/home/paranoid/parrot/blib/lib/libparrot.so.0.4.14(PDB_free_file+0x98)[0xb7c2eb38]
/home/paranoid/parrot/blib/lib/libparrot.so.0.4.14(PDB_disassemble+0x62)[0xb7c2e712]
/home/paranoid/parrot/blib/lib/libparrot.so.0.4.14(Parrot_debug+0x65)[0xb7c31c85]
/home/paranoid/parrot/blib/lib/libparrot.so.0.4.14(runops_slow_core+0x60)[0xb7c76130]
/home/paranoid/parrot/blib/lib/libparrot.so.0.4.14(runops_int+0x190)[0xb7c46b80]
/home/paranoid/parrot/blib/lib/libparrot.so.0.4.14(runops+0xfd)[0xb7c474cd]
/home/paranoid/parrot/blib/lib/libparrot.so.0.4.14[0xb7c476e6]
/home/paranoid/parrot/blib/lib/libparrot.so.0.4.14(Parrot_runops_fromc_args+0x36)[0xb7c477f6]
/home/paranoid/parrot/blib/lib/libparrot.so.0.4.14(Parrot_runcode+0x22f)[0xb7c31c0f]
./pdb(main+0x2d2)[0x8048f22]
/lib/libc.so.6(__libc_start_main+0xe2)[0xb6dfe9d2]
./pdb[0x8048bb1]
=== Memory map: 
08048000-0804a000 r-xp  fe:03 636705 /home/paranoid/parrot/pdb
0804a000-0804b000 rw-p 1000 fe:03 636705 /home/paranoid/parrot/pdb
0804b000-0841 rw-p 0804b000 00:00 0  [heap]
b5b0-b5b21000 rw-p b5b0 00:00 0
b5b21000-b5c0 ---p b5b21000 00:00 0
b5cca000-b5d0c000 rw-p b5cca000 00:00 0
b5d0c000-b5d0d000 ---p b5d0c000 00:00 0
b5d0d000-b650d000 rw-p b5d0d000 00:00 0
b650d000-b650e000 ---p b650d000 00:00 0
b650e000-b6d1 rw-p b650e000 00:00 0
b6d1-b6d18000 r-xp  fe:00 292092 
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.4.6/libgcc_s.so.1
b6d18000-b6d19000 rw-p 7000 fe:00 292092 
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.4.6/libgcc_s.so.1
b6d19000-b6ddf000 r-xp  fe:00 292103 
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.4.6/libstdc++.so.6.0.3
b6ddf000-b6de4000 rw-p 000c6000 fe:00 292103 
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.4.6/libstdc++.so.6.0.3
b6de4000-b6de9000 rw-p b6de4000 00:00 0
b6de9000-b6f16000 r-xp  03:01 40041  /lib/libc-2.6.so
b6f16000-b6f17000 r--p 0012d000 03:01 40041  /lib/libc-2.6.so
b6f17000-b6f19000 rw-p 0012e000 03:01 40041  /lib/libc-2.6.so
b6f19000-b6f1c000 rw-p b6f19000 00:00 0
b6f1c000-b6f57000 r-xp  03:01 6397   /lib/libncurses.so.5.6
b6f57000-b6f6 rw-p 0003a000 03:01 6397   /lib/libncurses.so.5.6
b6f6-b6f8c000 r-xp  03:01 20277  /lib/libreadline.so.5.2
b6f8c000-b6f9 rw-p 0002b000 03:01 20277  /lib/libreadline.so.5.2
b6f9-b6f92000 rw-p b6f9 00:00 0
b6f92000-b6fc3000 r-xp  fe:00 7746   /usr/lib/libgmp.so.3.4.1
b6fc3000-b6fc4000 rw-p 00031000 fe:00 7746   /usr/lib/libgmp.so.3.4.1
b6fc4000-b6fcb000 r-xp  03:01 35535  /lib/librt-2.6.so
b6fcb000-b6fcd000 rw-p 6000 03:01 35535  /lib/librt-2.6.so
b6fcd000-b6fcf000 r-xp  03:01 40037  /lib/libutil-2.6.so
b6fcf000-b6fd1000 rw-p 1000 03:01 40037  /lib/libutil-2.6.so
b6fd1000-b6fd6000 r-xp  03:01 40035  /lib/libcrypt-2.6.so
b6fd6000-b6fd8000 rw-p 4000 03:01 40035  /lib/libcrypt-2.6.so
b6fd8000-b6fff000 rw-p b6fd8000 00:00 0
b6fff000-b7001000 r-xp  03:01 40028  /lib/libdl-2.6.so
b7001000-b7003000 rw-p 1000 03:01 40028  /lib/libdl-2.6.so
b7003000-b7016000 r-xp  03:01 6394   /lib/libnsl-2.6.so
b7016000-b7018000 rw-p 00012000 03:01 6394   /lib/libnsl-2.6.so
b7018000-b701b000 rw-p b7018000 00:00 0
b701b000-b79ca000 r--p  fe:00 384232 /usr/lib/libicudata.so.36.0
b79ca000-b79cb000 rw-p 009ae000 fe:00 384232 /usr/lib/libicudata.so.36.0
b79cb000-b7adc000 r-xp  fe:00 403052 /usr/lib/libicuuc.so.36.0
b7adc000-b7ae3000 rw-p 00111000 fe:00 403052 /usr/lib/libicuuc.so.36.0
b7ae3000-b7ae5000 rw-p b7ae3000 00:00 0
b7ae5000-b7b08000 r-xp  03:01 40040  /lib/liAborted
[EMAIL PROTECTED] ~/parrot $


It's a useful patch, and I think it *almost* works.  Maybe pdb itself
is broken.

Also note I've created a test program[1] for pdb, at 

Re: [perl #44389] Excessive warnings on Apple's gcc 3.3 wrt attributes

2007-08-03 Thread chromatic
On Friday 03 August 2007 18:45:37 James E Keenan wrote:

 Confirmed.  Over the last few weeks, my log of my 'make' output on
 Darwin has tended to run in the range of 70-73K.  Tonight it ran to
 over 7.1M.

r20454 doesn't help.  Of course, it looks like that's papering over the fact 
that the noreturn attribute expands (for me on x86 Linux, that is) to:

#define PARROT_DOES_NOT_RETURN  /[EMAIL PROTECTED]@*/ 
__attribute__noreturn__

... when it looks like it should be:

#define PARROT_DOES_NOT_RETURN  /[EMAIL PROTECTED]@*/ 
__attribute__((noreturn))

So I'm not sure what went weird.

-- c