diff --git a/src/array.c b/src/array.c index e2aba3abc6c6e6523b3556d6cde8d8ff0b325f6b..f6ffdf9057722a85261ceac4031a5a41e668ccd2 100644 --- a/src/array.c +++ b/src/array.c @@ -1056,7 +1056,7 @@ static int obj_or_func_cmp (const struct svalue *a, const struct svalue *b) return a->u.object->prog < b->u.object->prog ? -1 : 1; } - return res == 2 ? 0 : res; + return res == 2 ? -1 : res; } int set_svalue_cmpfun(const struct svalue *a, const struct svalue *b) diff --git a/src/testsuite.in b/src/testsuite.in index f6870284a47e1cb96dafa3f056669b45dd788f36..3356cd526a444df4a682045c5145e585105fb940 100644 --- a/src/testsuite.in +++ b/src/testsuite.in @@ -5435,6 +5435,18 @@ test_any_equal([[ return sort ((array) (m - (<>))); ]], ({"2", "Stone"})) +test_any([[ + class X (int i) { + int `< (mixed o) {return 0;} + int `== (mixed o) {return 0;} + }; + multiset m = (<X(2)>); + m[X(4)] = 1; + m[X(1)] = 1; + m[X(3)] = 1; + return sizeof (m); +]], 4) + // mapping tests test_any([[mapping m=([]);int e;