From 344feb0dd14df21ad05f4b73be371eec0f3419df Mon Sep 17 00:00:00 2001 From: SirOlaf <34164198+SirOlaf@users.noreply.github.com> Date: Sun, 17 Sep 2023 20:03:43 +0200 Subject: [PATCH] Fix #22713: Make size unknown for tyForward (#22714) Close #22713 --------- Co-authored-by: SirOlaf <> (cherry picked from commit fcf4c1ae172080b8ef00b173977c223836bdebf2) --- compiler/sizealignoffsetimpl.nim | 7 +++---- tests/pragmas/t22713.nim | 12 ++++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 tests/pragmas/t22713.nim diff --git a/compiler/sizealignoffsetimpl.nim b/compiler/sizealignoffsetimpl.nim index e07d55fbcd..7b0fa8732c 100644 --- a/compiler/sizealignoffsetimpl.nim +++ b/compiler/sizealignoffsetimpl.nim @@ -433,10 +433,9 @@ proc computeSizeAlign(conf: ConfigRef; typ: PType) = typ.paddingAtEnd = typ.base.paddingAtEnd of tyForward: - # is this really illegal recursion, or maybe just unknown? - typ.size = szIllegalRecursion - typ.align = szIllegalRecursion - typ.paddingAtEnd = szIllegalRecursion + typ.size = szUnknownSize + typ.align = szUnknownSize + typ.paddingAtEnd = szUnknownSize of tyStatic: if typ.n != nil: diff --git a/tests/pragmas/t22713.nim b/tests/pragmas/t22713.nim new file mode 100644 index 0000000000..3d3384632f --- /dev/null +++ b/tests/pragmas/t22713.nim @@ -0,0 +1,12 @@ +import std/macros + + +template myPragma(x: int) {.pragma.} + +type + A = object + x: int64 + + B {.myPragma(sizeof(A)).} = object + +doAssert B.getCustomPragmaVal(myPragma) == 8 \ No newline at end of file