diff options
author | Etan Kissling <etan@status.im> | 2021-10-22 17:32:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-22 17:32:02 +0200 |
commit | 490c4226a55e8abd7cb504d4e24fcb714bff23f1 (patch) | |
tree | 50f45d0b0a32dc4d308bc36f2aa0433014a37038 /compiler | |
parent | 4d8108046b71b6e40d88cde7496e687e68116877 (diff) | |
download | Nim-490c4226a55e8abd7cb504d4e24fcb714bff23f1.tar.gz |
allow converting static vars to `openArray` (#19035)
When assigning constant output to a seq, and then passing that static seq to other functions that take `openArray`, the compiler may end up producing errors, as it does not know how to convert `static[seq[T]]` to `openArray[T]`. By ignoring the `static` wrapper on the type for the purpose of determining data memory location and length, this gets resolved cleanly. Unfortunately, it is relatively tricky to come up with a minimal example, as there are followup problems from the failing conversion, e.g., this may lead to `internal error: inconsistent environment type`, instead of the relevant `openArrayLoc` error message.
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/ccgcalls.nim | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/compiler/ccgcalls.nim b/compiler/ccgcalls.nim index 12f366a53..fe0516f9a 100644 --- a/compiler/ccgcalls.nim +++ b/compiler/ccgcalls.nim @@ -214,7 +214,7 @@ proc openArrayLoc(p: BProc, formalType: PType, n: PNode): Rope = else: var a: TLoc initLocExpr(p, if n.kind == nkHiddenStdConv: n[1] else: n, a) - case skipTypes(a.t, abstractVar).kind + case skipTypes(a.t, abstractVar+{tyStatic}).kind of tyOpenArray, tyVarargs: if reifiedOpenArray(n): if a.t.kind in {tyVar, tyLent}: |