Closed RazrFalcon closed 2 months ago
!nim c
proc retInt(): int {.discardable.} =
42
proc retString(): string {.discardable.} =
"text"
proc doStuff(msg: string) =
case msg:
of "a":
retString()
of "b":
retInt()
of "c":
let _ = retInt()
else:
raise newException(ValueError, "error")
doStuff("q")
0 (0 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-06-30T21:21:56
2024-06-30T21:21:57
0 (0 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-06-30T21:22:01
2024-06-30T21:22:01
0 (0 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-06-30T21:22:04
2024-06-30T21:22:04
0 (0 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-06-30T21:22:07
2024-06-30T21:22:08
96.60 Kb (98,920 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-06-30T21:22:10
2024-06-30T21:22:11
92.32 Kb (94,536 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-06-30T21:22:13
2024-06-30T21:22:13
92.05 Kb (94,256 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-06-30T21:22:16
2024-06-30T21:22:16
87.08 Kb (89,168 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-06-30T21:22:18
2024-06-30T21:22:18
11.4.0
14.0.0
20.3
2024-06-30T21:21:28Z
1
nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
:robot: Bug found in 25 minutes
bisecting 8
commits at 0
commits per second
Description
Nim Version
Nim Compiler Version 2.0.6 [MacOSX: arm64] Compiled at 2024-06-17
Current Output
Expected Output
Possible Solution
As far as I understand, nim doesn't like when different
case
branches return different value types, even when those values are unused. Usually it simply returns a "type mismatch" error, which is annoying, but a separate problem. But here it generates C code just fine, but fails at compiling it.By removing
{.discardable.}
or by usinglet _ = ...
in branches we can "fix" this issue.Additional Information