twrongenumrange.nim 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. discard """
  2. cmd: "nim check --hints:off $file"
  3. """
  4. # issue #17848
  5. block:
  6. # generate with:
  7. # var a = ""
  8. # for i in 0..<80: a.add "k" & $i & ", "
  9. # echo a
  10. type
  11. TMsgKind = enum
  12. k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79
  13. type
  14. TNoteKind = range[k10..k79]
  15. Conf = ref object
  16. notes: set[TNoteKind]
  17. proc bad(conf: Conf, noteSet: set[TMsgKind]) =
  18. conf.notes = noteSet #[tt.Error
  19. ^ type mismatch: got <set[TMsgKind]> but expected 'set[TNoteKind]']#
  20. var conf = Conf()
  21. bad(conf, {k10..k60})
  22. block:
  23. type
  24. TMsgKind = enum k0, k1, k2, k3
  25. TNoteKind = range[k1..k2]
  26. TNoteKinds = set[TNoteKind]
  27. type Conf = ref object
  28. notes: TNoteKinds
  29. proc fn(conf: Conf, b: set[TMsgKind]) =
  30. conf.notes = b #[tt.Error
  31. ^ type mismatch: got <set[TMsgKind]> but expected 'TNoteKinds = set[TNoteKind]']#
  32. var conf = Conf()
  33. conf.fn({k0..k3}) # BUG: this should give error
  34. echo conf.notes # {k1, k2}
  35. block:
  36. #[
  37. compiler/bitsets.nim(43, 9) `elem >= 0` [AssertionDefect]
  38. ]#
  39. type
  40. TMsgKind = enum k0, k1, k2, k3
  41. TNoteKind = range[k1..k2]
  42. var notes: set[TNoteKind]
  43. notes = {k0} #[tt.Error
  44. ^ type mismatch: got <set[TMsgKind]> but expected 'set[TNoteKind]']#
  45. notes = {k0..k3} #[tt.Error
  46. ^ type mismatch: got <set[TMsgKind]> but expected 'set[TNoteKind]']#