From 56c715af40ed1cad1a3b2a29de50e7ceaa9911e4 Mon Sep 17 00:00:00 2001 From: bbbradsmith Date: Wed, 3 May 2023 01:14:27 -0400 Subject: [PATCH 1/2] Error for struct/union with a duplicate member #2015 --- src/cc65/symtab.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 72a2ac007..d9270f604 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -793,6 +793,8 @@ static int HandleSymRedefinition (SymEntry* Sym, const Type* T, unsigned Flags) */ Error ("Redeclaration of enumerator constant '%s'", Sym->Name); Sym = 0; + } else if (Flags & SC_STRUCTFIELD) { + Error ("Duplicate member '%s'", Sym->Name); } } } From 84eafb7f9c255d6a82a8062a6d8a8f3c0eb60a72 Mon Sep 17 00:00:00 2001 From: bbbradsmith Date: Wed, 3 May 2023 21:09:03 -0400 Subject: [PATCH 2/2] err test for struct with duplicate member --- test/err/struct-duplicate-member.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 test/err/struct-duplicate-member.c diff --git a/test/err/struct-duplicate-member.c b/test/err/struct-duplicate-member.c new file mode 100644 index 000000000..30cd06207 --- /dev/null +++ b/test/err/struct-duplicate-member.c @@ -0,0 +1,17 @@ +/* Ensure that a duplicate member in a struct produces an error. +** https://github.com/cc65/cc65/issues/2015 +*/ + +struct bads { + int a; + int a; /* this is an error */ +}; + +union badu { + int a, a; /* also an error */ +}; + +int main(void) +{ + return 0; +}