Possible bug in std.algorithm.map

Magnus Lie Hetland mlh at idi.ntnu.no
Sat Jan 29 08:12:28 PST 2011


Hi!

Just read Andrei Alexandrescu's new book, and I'm starting to  
experiment with using D in my algorithms research. Loved the book, and  
I'm loving the language so far :D

I just hit a snag, though ... I was doing something simple, for which  
my prototype code (in Python) was

   d, u = max((D(u,v), v) for v in V)

I first started writing it explicitly with loops, but it got a bit too  
verbose for my taste. Thought I'd use map and reduce, perhaps  
(although I'm still not sure if that's practical, as I'm reducing with  
max, but I'd like the argmax as well...).

Anyway -- while using attempting to use map, I suddenly got a  
segfault. As I hadn't really done any crazy stuff with pointers, or  
circumvented the bounds checks or the like, I was a bit surprised. I  
have now boiled things down to the following little program:

import std.algorithm;
void f() {
     auto x = 0;
     double g(int z) { // Alt. 1: return int
         auto y = x;   // Alt. 2: remove this
         return 0;
     }
     auto seq = [1, 2, 3];
     auto res = map!(g)(seq);
}
void main() {
     f();
}

When I compile and run this (dmd 2.051, OS X 10.5.8), I get a  
segmentation fault.

Oddly enough, if I *either* change the return type to int *or* remove  
the "y = x" line, things work just fine.

Am I correct in assuming this is a bug?

-- 
Magnus Lie Hetland
http://hetland.org




More information about the Digitalmars-d mailing list