aboutsummaryrefslogtreecommitdiff
path: root/src/parse.cff
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse.cff')
-rw-r--r--src/parse.cff11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/parse.cff b/src/parse.cff
index 96ffaea..f7dc651 100644
--- a/src/parse.cff
+++ b/src/parse.cff
@@ -780,6 +780,11 @@ fn parseagg(P *Parser, loc Loc, kind AggKind, name *const u8, retdecl **Decl) *c
size = kind == :Struct ? off + type.size
: MAX(size, type.size);
}
+ vec_each (fld, _, flds) {
+ if fld.name == name {
+ err(P, tok.loc, "duplicate field %qT", &tok);
+ }
+ }
flds->push({ name, type, off });
if !lexmatch(P, #null, ',') {
@@ -879,6 +884,12 @@ fn parsebitfield(P *Parser, name *const u8) *const Type {
let off = 0u, size = 0u;
let ty = bitf.intty;
+ vec_each (fld, _, flds) {
+ if fld.name == name {
+ err(P, tok.loc, "duplicate field %qT", &tok);
+ }
+ }
+
if lexmatch(P, &tok, '(') {
// `(offset, size)`
let off_ex = parseexpr(P);