digitalmars.D.dtl - MinTL segfault.
- Bastiaan Veelo (39/39) Sep 13 2004 This is likely a bug in dmd, probably related to
- Ben Hinkle (9/48) Sep 13 2004 Bummer. It looks like TypeInfo compare functions are busted for interfac...
This is likely a bug in dmd, probably related to http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D.bugs/1810 dmd 0.101 on Linux. #import mintl.util; # #/* Segmentation fault when Base is an interface. Okay when Base is a #class. */ #interface Base #//class Base #{ # int id(); #// int id() { return 0; } #} # #class Foo : Base #{ # int id() { return 123; } #} # #class Bar : Base #{ # int id() { return 987; } #} # #int main() #{ # Foo foo = new Foo; // Declaring foo and bar as Base # Bar bar = new Bar; // does not help. # # SortedSet!(Base) set; # # set[foo] = foo; # set[bar] = bar; # # printf("Length set = %d.\n", set.length()); # # foreach( Base b; set ) printf("id: = %d.\n", b.id() ); # return 0; #}
Sep 13 2004
Bummer. It looks like TypeInfo compare functions are busted for interfaces. If you try to run TypeInfo ti = typeid(foo); ti.compare(&foo,&bar); you'll error out. On win32 I get a Win32 Exception. Probably since the declaration of compare is with void* instead of a specific type it gets all confused about calling opCmp. Nasty. I'm cross-posting to bugs. "Bastiaan Veelo" <Bastiaan.N.Veelo ntnu.no> wrote in message news:ci495h$1alr$1 digitaldaemon.com...This is likely a bug in dmd, probably related to http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D.bugs/1810 dmd 0.101 on Linux. #import mintl.util; # #/* Segmentation fault when Base is an interface. Okay when Base is a #class. */ #interface Base #//class Base #{ # int id(); #// int id() { return 0; } #} # #class Foo : Base #{ # int id() { return 123; } #} # #class Bar : Base #{ # int id() { return 987; } #} # #int main() #{ # Foo foo = new Foo; // Declaring foo and bar as Base # Bar bar = new Bar; // does not help. # # SortedSet!(Base) set; # # set[foo] = foo; # set[bar] = bar; # # printf("Length set = %d.\n", set.length()); # # foreach( Base b; set ) printf("id: = %d.\n", b.id() ); # return 0; #}
Sep 13 2004