summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/semcall.nim7
-rw-r--r--tests/concepts/t3330.nim34
-rw-r--r--tests/concepts/texplain.nim28
-rw-r--r--tests/errmsgs/tsigmatch.nim14
-rw-r--r--tests/errmsgs/tsigmatch2.nim8
-rw-r--r--tests/errmsgs/tunknown_named_parameter.nim10
6 files changed, 54 insertions, 47 deletions
diff --git a/compiler/semcall.nim b/compiler/semcall.nim
index c0227db19..55ff80b6c 100644
--- a/compiler/semcall.nim
+++ b/compiler/semcall.nim
@@ -10,6 +10,8 @@
 ## This module implements semantic checking for calls.
 # included from sem.nim
 
+from algorithm import sort
+
 proc sameMethodDispatcher(a, b: PSym): bool =
   result = false
   if a.kind == skMethod and b.kind == skMethod:
@@ -178,9 +180,11 @@ proc presentFailedCandidates(c: PContext, n: PNode, errors: CandidateErrors):
 
   var maybeWrongSpace = false
 
+  var candidatesAll: seq[string]
   var candidates = ""
   var skipped = 0
   for err in errors:
+    candidates.setLen 0
     if filterOnlyFirst and err.firstMismatch.arg == 1:
       inc skipped
       continue
@@ -225,6 +229,9 @@ proc presentFailedCandidates(c: PContext, n: PNode, errors: CandidateErrors):
         maybeWrongSpace = true
     for diag in err.diagnostics:
       candidates.add(diag & "\n")
+    candidatesAll.add candidates
+  candidatesAll.sort # fix #13538
+  candidates = join(candidatesAll)
   if skipped > 0:
     candidates.add($skipped & " other mismatching symbols have been " &
         "suppressed; compile with --showAllMismatches:on to see them\n")
diff --git a/tests/concepts/t3330.nim b/tests/concepts/t3330.nim
index 067e81133..9de71f3ac 100644
--- a/tests/concepts/t3330.nim
+++ b/tests/concepts/t3330.nim
@@ -1,6 +1,5 @@
 discard """
 errormsg: "type mismatch: got <Bar[system.int]>"
-disabled: "32bit"
 nimout: '''
 t3330.nim(78, 4) Error: type mismatch: got <Bar[system.int]>
 but expected one of:
@@ -9,33 +8,33 @@ proc test(foo: Foo[int])
   required type for foo: Foo[int]
   but expression 'bar' is of type: Bar[system.int]
 t3330.nim(63, 8) Hint: Non-matching candidates for add(k, string, T)
-proc add(x: var string; y: string)
-  first type mismatch at position: 1
-  required type for x: var string
-  but expression 'k' is of type: Alias
-proc add[T](x: var seq[T]; y: openArray[T])
+proc add(result: var string; x: float)
   first type mismatch at position: 1
-  required type for x: var seq[T]
+  required type for result: var string
   but expression 'k' is of type: Alias
-proc add(result: var string; x: float)
+proc add(result: var string; x: int64)
   first type mismatch at position: 1
   required type for result: var string
   but expression 'k' is of type: Alias
-proc add[T](x: var seq[T]; y: T)
+proc add(x: var string; y: char)
   first type mismatch at position: 1
-  required type for x: var seq[T]
+  required type for x: var string
   but expression 'k' is of type: Alias
 proc add(x: var string; y: cstring)
   first type mismatch at position: 1
   required type for x: var string
   but expression 'k' is of type: Alias
-proc add(x: var string; y: char)
+proc add(x: var string; y: string)
   first type mismatch at position: 1
   required type for x: var string
   but expression 'k' is of type: Alias
-proc add(result: var string; x: int64)
+proc add[T](x: var seq[T]; y: T)
   first type mismatch at position: 1
-  required type for result: var string
+  required type for x: var seq[T]
+  but expression 'k' is of type: Alias
+proc add[T](x: var seq[T]; y: openArray[T])
+  first type mismatch at position: 1
+  required type for x: var seq[T]
   but expression 'k' is of type: Alias
 
 t3330.nim(63, 8) template/generic instantiation of `add` from here
@@ -46,10 +45,11 @@ t3330.nim(71, 6) Foo: 'bar.x' cannot be assigned to
 expression: test(bar)'''
 """
 
-# Note: currently disabled on 32bit because the candidates are presented in
-# different order on travis with `NIM_COMPILE_TO_CPP=false CPU=i386`;
-# a possible fix would be to sort the candidates by proc signature or
-# declaration location
+
+
+
+
+
 
 
 
diff --git a/tests/concepts/texplain.nim b/tests/concepts/texplain.nim
index 2b19c8b4d..344b6d53f 100644
--- a/tests/concepts/texplain.nim
+++ b/tests/concepts/texplain.nim
@@ -37,20 +37,24 @@ texplain.nim(124, 5) ExplainedConcept: concept predicate failed
 
 texplain.nim(168, 20) Error: type mismatch: got <NonMatchingType>
 but expected one of:
+proc e(i: int): int
+  first type mismatch at position: 1
+  required type for i: int
+  but expression 'n' is of type: NonMatchingType
 proc e(o: ExplainedConcept): int
   first type mismatch at position: 1
   required type for o: ExplainedConcept
   but expression 'n' is of type: NonMatchingType
 texplain.nim(168, 9) template/generic instantiation of `assert` from here
 texplain.nim(124, 5) ExplainedConcept: concept predicate failed
-proc e(i: int): int
-  first type mismatch at position: 1
-  required type for i: int
-  but expression 'n' is of type: NonMatchingType
 
 expression: e(n)
 texplain.nim(169, 20) Error: type mismatch: got <NonMatchingType>
 but expected one of:
+proc r(i: string): int
+  first type mismatch at position: 1
+  required type for i: string
+  but expression 'n' is of type: NonMatchingType
 proc r(o: RegularConcept): int
   first type mismatch at position: 1
   required type for o: RegularConcept
@@ -61,21 +65,17 @@ proc r[T](a: SomeNumber; b: T; c: auto)
   first type mismatch at position: 1
   required type for a: SomeNumber
   but expression 'n' is of type: NonMatchingType
-proc r(i: string): int
-  first type mismatch at position: 1
-  required type for i: string
-  but expression 'n' is of type: NonMatchingType
 
 expression: r(n)
 texplain.nim(170, 20) Hint: Non-matching candidates for r(y)
-proc r[T](a: SomeNumber; b: T; c: auto)
-  first type mismatch at position: 1
-  required type for a: SomeNumber
-  but expression 'y' is of type: MatchingType
 proc r(i: string): int
   first type mismatch at position: 1
   required type for i: string
   but expression 'y' is of type: MatchingType
+proc r[T](a: SomeNumber; b: T; c: auto)
+  first type mismatch at position: 1
+  required type for a: SomeNumber
+  but expression 'y' is of type: MatchingType
 
 texplain.nim(178, 2) Error: type mismatch: got <MatchingType>
 but expected one of:
@@ -97,10 +97,10 @@ expression: f(y)'''
   errormsg: "type mismatch: got <MatchingType>"
   line: 178
 
-  disabled: 32bit
 """
 
-# disabled on 32 bit, because the order of suggested alternatives ``r`` differs
+
+
 # proc r[T](a: SomeNumber; b: T; c: auto)
 # proc r(i: string): int
 # proc r(o: RegularConcept): int
diff --git a/tests/errmsgs/tsigmatch.nim b/tests/errmsgs/tsigmatch.nim
index 6b85d1408..414c972c9 100644
--- a/tests/errmsgs/tsigmatch.nim
+++ b/tests/errmsgs/tsigmatch.nim
@@ -3,13 +3,13 @@ discard """
   nimout: '''
 tsigmatch.nim(111, 4) Error: type mismatch: got <A, string>
 but expected one of:
+proc f(a: A)
+  first type mismatch at position: 2
+  extra argument given
 proc f(b: B)
   first type mismatch at position: 1
   required type for b: B
   but expression 'A()' is of type: A
-proc f(a: A)
-  first type mismatch at position: 2
-  extra argument given
 
 expression: f(A(), "extra")
 tsigmatch.nim(125, 6) Error: type mismatch: got <tuple of (string, proc (){.gcsafe, locks: 0.})>
@@ -61,14 +61,14 @@ proc f(a1: string; a2: varargs[string]; a3: float; a4: var string)
 expression: f("asdf", "1", "2", "3", "4", 2.3, "bad")
 tsigmatch.nim(164, 4) Error: type mismatch: got <string, a0: int literal(12)>
 but expected one of:
-proc f(x: string; a0: var int)
-  first type mismatch at position: 2
-  required type for a0: var int
-  but expression 'a0 = 12' is immutable, not 'var'
 proc f(x: string; a0: string)
   first type mismatch at position: 2
   required type for a0: string
   but expression 'a0 = 12' is of type: int literal(12)
+proc f(x: string; a0: var int)
+  first type mismatch at position: 2
+  required type for a0: var int
+  but expression 'a0 = 12' is immutable, not 'var'
 
 expression: f(foo, a0 = 12)
 tsigmatch.nim(171, 7) Error: type mismatch: got <Mystring, string>
diff --git a/tests/errmsgs/tsigmatch2.nim b/tests/errmsgs/tsigmatch2.nim
index 4e95d3e1b..580743f3e 100644
--- a/tests/errmsgs/tsigmatch2.nim
+++ b/tests/errmsgs/tsigmatch2.nim
@@ -3,14 +3,14 @@ discard """
   nimout: '''
 tsigmatch2.nim(40, 14) Error: type mismatch: got <float64>
 but expected one of:
-proc foo(i: Foo): string
-  first type mismatch at position: 1
-  required type for i: Foo
-  but expression '1.2' is of type: float64
 proc foo(args: varargs[string, myproc]): string
   first type mismatch at position: 1
   required type for args: varargs[string]
   but expression '1.2' is of type: float64
+proc foo(i: Foo): string
+  first type mismatch at position: 1
+  required type for i: Foo
+  but expression '1.2' is of type: float64
 
 expression: foo(1.2)
 tsigmatch2.nim(46, 7) Error: type mismatch: got <int literal(1)>
diff --git a/tests/errmsgs/tunknown_named_parameter.nim b/tests/errmsgs/tunknown_named_parameter.nim
index e9be23068..b139310db 100644
--- a/tests/errmsgs/tunknown_named_parameter.nim
+++ b/tests/errmsgs/tunknown_named_parameter.nim
@@ -6,22 +6,22 @@ proc rsplit(s: string; sep: char; maxsplit: int = -1): seq[string]
   first type mismatch at position: 2
   required type for sep: char
   but expression '{':'}' is of type: set[char]
-proc rsplit(s: string; seps: set[char] = Whitespace; maxsplit: int = -1): seq[string]
-  first type mismatch at position: 3
-  unknown named parameter: maxsplits
 proc rsplit(s: string; sep: string; maxsplit: int = -1): seq[string]
   first type mismatch at position: 2
   required type for sep: string
   but expression '{':'}' is of type: set[char]
+proc rsplit(s: string; seps: set[char] = Whitespace; maxsplit: int = -1): seq[string]
+  first type mismatch at position: 3
+  unknown named parameter: maxsplits
 
 expression: rsplit("abc:def", {':'}, maxsplits = 1)
 '''
-disabled: 32bit
 """
 
+
 # bug #8043
 
-# disabled on 32 bit systems because the order of suggested proc alternatives is different.
+
 
 import strutils
 "abc:def".rsplit({':'}, maxsplits = 1)