2026-11-02 Gabriele Gorla * configure, configure.ac, device/lib/Makefile.in, device/lib/clean.mk, device/lib/mos6502/Makefile.in, src/mcs51/main.c, support/regression/ports/mcs51-common/spec.mk, support/regression/ports/mcs51-huge/spec.mk, support/regression/ports/mcs51-large/spec.mk, support/regression/ports/mcs51-large-stack-auto/spec.mk, support/regression/ports/mcs51-medium/spec.mk, support/regression/ports/mcs51-small/spec.mk, support/regression/ports/mcs51-small-stack-auto/spec.mk, device/lib/mcs51-common, device/lib/mcs51-common/atomic_flag_clear.s, device/lib/mcs51-common/crtbank.s, device/lib/mcs51-common/crtcall.s, device/lib/mcs51-common/crtclear.s, device/lib/mcs51-common/crtpagesfr.s, device/lib/mcs51-common/crtstart.s, device/lib/mcs51-common/crtxclear.s, device/lib/mcs51-common/crtxinit.s, device/lib/mcs51-common/crtxpop.s, device/lib/mcs51-common/crtxpush.s, device/lib/mcs51-common/crtxstack.s, device/lib/mcs51-common/gptr_cmp.s, device/lib/mcs51-common/sdcc_atomic_maybe_rollback.s, device/lib/mcs51-huge, device/lib/mcs51-huge/Makefile.in, device/lib/mcs51-large, device/lib/mcs51-large/Makefile.in, device/lib/mcs51-large-stack-auto, device/lib/mcs51-large-stack-auto/Makefile.in, device/lib/mcs51-medium, device/lib/mcs51-medium/Makefile.in, device/lib/mcs51-small, device/lib/mcs51-small/Makefile.in, device/lib/mcs51-small-stack-auto, device/lib/mcs51-small-stack-auto/Makefile.in, device/lib/mcs51-small-xstack-auto, device/lib/mcs51-small-xstack-auto/Makefile.in: Merge mcs51 libraries into single file. First step of RFE #327 2026-11-02 Christopher Bazley * src/SDCCsymt.h, src/SDCCsymt.c (newEnumType, mergeSpec): Preserve whether an enumeration has a fixed underlying type. * src/SDCC.y (simple_typed_enum_decl): Establish the tagged enumeration type in declarations without an enumerator list. (enum_specifier, simple_typed_enum_decl): Diagnose incompatible underlying types and changes of fixedness in the same scope (bug #4176). * src/SDCCerr.h, src/SDCCerr.c: Add E_ENUM_REDECL. * support/valdiag/tests/bug-4176.c: Check incompatible declarations, compatible typedefs, definitions, inner-scope shadowing and sibling blocks at equal nesting levels, including later redeclarations. * support/regression/tests/bug-4176.c: Check object widths, compatible underlying type and values before and after the enum definition. 2026-11-02 Christopher Bazley * src/SDCCast.c (hasConstMember, decorateType): Diagnose aggregate assignments with const-qualified members, recursively including nested aggregates and array elements. Stop at pointer members and allow initialisation (bug #4210). * support/valdiag/tests/bug-4210.c: Test nested structures, unions, arrays, const pointer members, pointers to const and valid initialisation and member assignments. 2026-11-02 Christopher Bazley * src/SDCCsymt.c (mergeDeclSpec): Apply qualifiers on an array typedef to its first non-array element. Put qualifiers on pointer elements rather than their targets (bug #4164). * support/regression/tests/bug-4164.c: Test const, volatile, restrict and _Optional qualification of array typedefs, multiple dimensions, pointer depth and preservation of qualified pointer targets. 2026-11-02 Christopher Bazley * src/SDCCutil.c, src/SDCCutil.h (parseEscape, escapeValueInRange, copyStrWithEscapeLimit, copyStr): Share escape decoding between character and string literals. Check numeric escapes before narrowing, including overflow in strtoul. Preserve unrestricted decoding for non-literal uses such as inline assembly (bug #4179). * src/SDCCval.c (literalEscapeLimit, strVal, charVal, constCharacterVal): Apply prefix-specific numeric escape limits. Distinguish numeric byte escapes from universal character names and require a u8 character literal to end after its single code unit. * src/SDCCerr.c: Reword warning 137 for numeric escapes. * support/valdiag/tests/bug-4179.c: Check numeric limits, overflow, malformed delimited escapes, trailing characters and valid escapes. Select tests by language features and wide-character limits. * support/regression/tests/bug-4179.c: Check stored literal values, simple escapes, delimited escapes and prefix-specific boundaries. Account for signed wchar_t when checking its unsigned escape value. 2026-11-02 Philipp Klaus Krause