fix regression in align (#12680)
* fix regression in align * add test typesym without type
This commit is contained in:
parent
5278cf80eb
commit
03fa9a9041
4 changed files with 20 additions and 5 deletions
|
|
@ -550,7 +550,7 @@ proc genRecordFieldsAux(m: BModule, n: PNode,
|
||||||
let sname = mangleRecFieldName(m, field)
|
let sname = mangleRecFieldName(m, field)
|
||||||
fillLoc(field.loc, locField, n, sname, OnUnknown)
|
fillLoc(field.loc, locField, n, sname, OnUnknown)
|
||||||
if field.alignment > 0:
|
if field.alignment > 0:
|
||||||
result.addf "alignas($1) ", [rope(field.alignment)]
|
result.addf "NIM_ALIGN($1) ", [rope(field.alignment)]
|
||||||
# for importcpp'ed objects, we only need to set field.loc, but don't
|
# for importcpp'ed objects, we only need to set field.loc, but don't
|
||||||
# have to recurse via 'getTypeDescAux'. And not doing so prevents problems
|
# have to recurse via 'getTypeDescAux'. And not doing so prevents problems
|
||||||
# with heavily templatized C++ code:
|
# with heavily templatized C++ code:
|
||||||
|
|
|
||||||
|
|
@ -1766,8 +1766,11 @@ proc semTypeNode(c: PContext, n: PNode, prev: PType): PType =
|
||||||
onUse(n.info, n.sym)
|
onUse(n.info, n.sym)
|
||||||
else:
|
else:
|
||||||
if s.kind != skError:
|
if s.kind != skError:
|
||||||
localError(c.config, n.info, "type expected, but got symbol '$1' of kind '$2'" %
|
if s.typ == nil:
|
||||||
[s.name.s, substr($s.kind, 2)])
|
localError(c.config, n.info, "type expected, but symbol '$1' has no type." % [s.name.s])
|
||||||
|
else:
|
||||||
|
localError(c.config, n.info, "type expected, but got symbol '$1' of kind '$2'" %
|
||||||
|
[s.name.s, substr($s.kind, 2)])
|
||||||
result = newOrPrevType(tyError, prev, c)
|
result = newOrPrevType(tyError, prev, c)
|
||||||
of nkObjectTy: result = semObjectNode(c, n, prev, isInheritable=false)
|
of nkObjectTy: result = semObjectNode(c, n, prev, isInheritable=false)
|
||||||
of nkTupleTy: result = semTuple(c, n, prev)
|
of nkTupleTy: result = semTuple(c, n, prev)
|
||||||
|
|
|
||||||
14
tests/macros/tinvalidtypesym.nim
Normal file
14
tests/macros/tinvalidtypesym.nim
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
discard """
|
||||||
|
errormsg: "type expected, but symbol 'MyType' has no type."
|
||||||
|
"""
|
||||||
|
|
||||||
|
import macros
|
||||||
|
|
||||||
|
macro foobar(name) =
|
||||||
|
let sym = genSym(nskType, "MyType")
|
||||||
|
|
||||||
|
result = quote do:
|
||||||
|
type
|
||||||
|
`name` = `sym`
|
||||||
|
|
||||||
|
foobar(MyAlias)
|
||||||
|
|
@ -6,8 +6,6 @@ output: "align ok"
|
||||||
|
|
||||||
# This is for Azure. The keyword ``alignof`` only exists in ``c++11``
|
# This is for Azure. The keyword ``alignof`` only exists in ``c++11``
|
||||||
# and newer. On Azure gcc does not default to c++11 yet.
|
# and newer. On Azure gcc does not default to c++11 yet.
|
||||||
when defined(cpp) and not defined(windows):
|
|
||||||
{.passC: "-std=c++11".}
|
|
||||||
|
|
||||||
import globalalignas
|
import globalalignas
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue