* Revert "fixes #20699; generate an empty struct for void type (#20790)"
This reverts commit 8fcb9380f0.
* better fix [backport]
This commit is contained in:
parent
73680cef95
commit
165d523edf
3 changed files with 30 additions and 27 deletions
|
|
@ -514,21 +514,18 @@ proc genRecordFieldsAux(m: BModule, n: PNode,
|
|||
let structName = "_" & mangleRecFieldName(m, n[0].sym) & "_" & $i
|
||||
var a = newRopeAppender()
|
||||
genRecordFieldsAux(m, k, rectype, check, a, unionPrefix & $structName & ".")
|
||||
# When 'k' is 'void', 'a' is the empty string and we just generate
|
||||
# empty struct. This prevents field access errors when generating
|
||||
# static initializers for the type.
|
||||
# See issue #20699
|
||||
if tfPacked notin rectype.flags:
|
||||
unionBody.add("struct {")
|
||||
else:
|
||||
if hasAttribute in CC[m.config.cCompiler].props:
|
||||
unionBody.add("struct __attribute__((__packed__)){")
|
||||
if a != "":
|
||||
if tfPacked notin rectype.flags:
|
||||
unionBody.add("struct {")
|
||||
else:
|
||||
unionBody.addf("#pragma pack(push, 1)$nstruct{", [])
|
||||
unionBody.add(a)
|
||||
unionBody.addf("} $1;$n", [structName])
|
||||
if tfPacked in rectype.flags and hasAttribute notin CC[m.config.cCompiler].props:
|
||||
unionBody.addf("#pragma pack(pop)$n", [])
|
||||
if hasAttribute in CC[m.config.cCompiler].props:
|
||||
unionBody.add("struct __attribute__((__packed__)){")
|
||||
else:
|
||||
unionBody.addf("#pragma pack(push, 1)$nstruct{", [])
|
||||
unionBody.add(a)
|
||||
unionBody.addf("} $1;$n", [structName])
|
||||
if tfPacked in rectype.flags and hasAttribute notin CC[m.config.cCompiler].props:
|
||||
unionBody.addf("#pragma pack(pop)$n", [])
|
||||
else:
|
||||
genRecordFieldsAux(m, k, rectype, check, unionBody, unionPrefix)
|
||||
else: internalError(m.config, "genRecordFieldsAux(record case branch)")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue