fix regression in align (#12680)

* fix regression in align

* add test typesym without type
This commit is contained in:
Arne Döring 2019-11-19 09:58:47 +01:00 • committed by Andreas Rumpf
commit 03fa9a9041
4 changed files with 20 additions and 5 deletions

View file

@ -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:

View file

@ -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)

View 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)

View file

@ -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