mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-07 13:33:22 +00:00
fix regression in align (#12680)
* fix regression in align * add test typesym without type
This commit is contained in:
committed by
Andreas Rumpf
parent
5278cf80eb
commit
03fa9a9041
@@ -550,7 +550,7 @@ proc genRecordFieldsAux(m: BModule, n: PNode,
|
||||
let sname = mangleRecFieldName(m, field)
|
||||
fillLoc(field.loc, locField, n, sname, OnUnknown)
|
||||
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
|
||||
# have to recurse via 'getTypeDescAux'. And not doing so prevents problems
|
||||
# with heavily templatized C++ code:
|
||||
|
||||
@@ -1766,8 +1766,11 @@ proc semTypeNode(c: PContext, n: PNode, prev: PType): PType =
|
||||
onUse(n.info, n.sym)
|
||||
else:
|
||||
if s.kind != skError:
|
||||
localError(c.config, n.info, "type expected, but got symbol '$1' of kind '$2'" %
|
||||
[s.name.s, substr($s.kind, 2)])
|
||||
if s.typ == nil:
|
||||
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)
|
||||
of nkObjectTy: result = semObjectNode(c, n, prev, isInheritable=false)
|
||||
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``
|
||||
# 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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user