diff --git a/source/backends/linux86.d b/source/backends/linux86.d index 043c1a7..66cf439 100644 --- a/source/backends/linux86.d +++ b/source/backends/linux86.d @@ -501,12 +501,19 @@ class BackendLinux86 : CompilerBackend { Error(node.error, "Type '%s' defined multiple times", node.name); } + string[] members; + foreach (i, ref name ; node.names) { auto type = node.types[i]; if (type !in types) { Error(node.error, "Type '%s' doesn't exist", type); } + if (members.canFind(name)) { + Error(node.error, "Duplicate member '%s'", name); + } + + members ~= name; NewConst(format("%s.%s", node.name, name), offset); offset += types[type].size; diff --git a/source/backends/rm86.d b/source/backends/rm86.d index bc202c4..24b88af 100644 --- a/source/backends/rm86.d +++ b/source/backends/rm86.d @@ -463,12 +463,19 @@ class BackendRM86 : CompilerBackend { Error(node.error, "Type '%s' defined multiple times", node.name); } + string[] members; + foreach (i, ref name ; node.names) { auto type = node.types[i]; if (type !in types) { Error(node.error, "Type '%s' doesn't exist", type); } + if (members.canFind(name)) { + Error(node.error, "Duplicate member '%s'", name); + } + + members ~= name; NewConst(format("%s.%s", node.name, name), offset); offset += types[type].size;