SDCC-STD-UX is a German federally funded 6 month project to improve standard compliance and usability in SDCC.
It is mostly about improving standard compliance (ISO C standards, DWARF. Focus: ISO C23) when targeting µC architectures.

Priority from 1 (most important) to 5 (least important). Criteria for priorities: Has the feature been requested by users often? Is the feature necessary for older standards beside C23? Is it particularly relevant for µC? Is it mandatory in the standard(s)?
Note: The "New parser, suitable for C23" Task is special, since many other C23 tasks depend on it.
| Priority | Category | Task | Tickets | Developer | Status |
|---|---|---|---|---|---|
| 1 | C90-C23 | Support struct / union return | [feature-requests:#167] [bugs:#2846] | @spth | DONE |
| 1 | C90-C23 | Support struct / union parameter | [feature-requests:#23] | @spth | DONE |
| 2 | C99-C23 | Compound literals | [feature-requests:#332] | @roybaer | POSTPONED (WIP) |
| 2 | Debug | Debug info fixes | [bugs:#3200] [bugs:#2970] [bugs:#2870] [bugs:#2741] [bugs:#2906] [support-requests:#151] | POSTPONED | |
| 2 | C11-C23 | _Generic fixes | [bugs:#3145] [bugs:#3255] | @spth | DONE |
| 2 | C90-C23 | Type system fixes | [bugs:#3254] [bugs:#2629] [bugs:#2766] | @spth | DONE |
| 2 | C90-C23 | Function declaration fixes | [bugs:#3091] [bugs:#2664] [feature-requests:#776] | @spth | DONE |
| 3 | C90-C23 | brace omission in array initalization | [feature-requests:#562] | @roybaer | POSTPONED (WIP) |
| 3 | C99, C23 | variably-modified types | [feature-requests:#786] | @spth | DONE |
| 3 | Debug | ELF/DWARF for mcs51 | POSTPONED | ||
| 3 | C23 | Modernize preprocessor (possibly by rebasing our fork on the one from GCC 11) | [bugs:#3159] [feature-requests:#466] | @felixs | DONE |
| 3 | C23, Usability | assert | [feature-requests:#780] | @spth | DONE |
| 3 | Usability | Fix type range warnings | [bugs:#3094] [bugs:#2877] | POSTPONED | |
| 3 | C23 | typeof | [feature-requests:#738] [feature-requests:#739] | @spth | DONE |
| 3 | C23 | New parser, suitable for C23 | [feature-requests:#809] | @spth | MOSTLY DONE |
| 3 | C23 | attributes | [feature-requests:#654] | MOSTLY DONE | |
| 3 | C23 | Bit-precise integer types | [feature-requests:#681] | @spth | DONE |
| 3 | C99-C23, Usability | Segfault in loop | [bugs:#2981] | ? | DONE |
| 3 | Usability, C90-C17 | Include GCC 11 tests in regression tests | [feature-requests:#698] | @felixs | DONE |
| 3 | Usability, C90-C99 | Include QuickC tests in regression tests | [feature-requests:#697] | @felixs | DONE |
| 3 | Usability, C90-C99 | Include tinycc tests in regression tests | [feature-requests:#696] | @felixs | DONE |
| 3 | Usability | GCC-style command line options | [feature-requests:#733] | @roybaer | DONE |
| 3 | Usability | F2X headers | [feature-requests:#33] | rejected | |
| 3 | Usability | STM8-Wizard für Code::Blocks? Maybe have a look at https://github.com/retiredfeline/codeblocks-wizard-stm8/tree/master/stm8 and maybe merge to upstream Code::Blocks? | POSTPONED | ||
| 3 | Usability | IDE integration? Code::Blocks, PlatformIO (might work already https://github.com/platformio/platform-ststm8/issues/31, but affected by SDCC bugs: https://github.com/microsoft/vscode-cpptools/issues/7146), Eclipse? | POSTPONED | ||
| 3 | C23 | Enhanced enumerations | [feature-requests:#847] | POSTPONED | |
| 3 | C23 | auto | [feature-requests:#849] | @spth | DONE |
| 3 | C23 | bit utilities | [feature-requests:#854] | @spth | DONE |
| 4 | C23 | Checked integer arithmetic | [feature-requests:#749] | @spth | MOSTLY DONE |
| 4 | C23 | Identifier syntax | [feature-requests:#775] | @roybaer | POSTPONED (concept) |
| 4 | C23 | Invalid Unicode warning | [feature-requests:#781] | @spth | DONE |
| 4 | Usability | Get rid of invalid warnings | [bugs:#3108] | POSTPONED | |
| 4 | Usability | Segfault on float initialization | [bugs:#3031] | @spth | DONE |
| 4 | C95-C23 | Segfault on wide string literals | [bugs:#3030] | POSTPONED | |
| 4 | C90-C17 | K & R declarations | [bugs:#3021] [feature-requests:#450] | @roybaer | POSTPONED (concept) |
| 4 | C23 | {} initialization | [feature-requests:#782] | @spth | DONE |
| 4 | C23 | keywords | [feature-requests:#783] | @spth | DONE |
| 4 | C23 | unreachable | [feature-requests:#778] | @spth | DONE |
| 4 | C23 | UTF-8 literal type char8_t | [feature-requests:#779] | @spth | DONE |
| 4 | C99-C23 | New modular C23-compliant implementation of the printf family | [feature-requests:#768] | @roybaer | POSTPONED (WIP) |
| 4 | Usability | Allow multiple C source files on command line | [feature-requests:#657] | @roybaer | POSTPONED (WIP) |
| 4 | SDCC developer meeting in summer, to discuss progress and coordinate | many | DONE | ||
| 4 | Present results at FrOSCon 2022 | @spth | DONE | ||
| 4 | Usability | Fails to build on current Debian GNU/Linux | [bugs:#3140] | POSTPONED | |
| 4 | C90-C23 | Full/improved floating point support | [bugs:#3396] [feature-requests:#304] [feature-requests:#324] [feature-requests:#351] [feature-requests:#599] [feature-requests:#753] | @roybaer | POSTPONED (preparation) |
| 4 | C23 | C2X variadic parameters | [feature-requests:#845] | POSTPONED | |
| 4 | C23 | memalignment | [feature-requests:#846] | @spth | DONE |
| 4 | C90-C23 | enumeration types and constants | [bugs:#3462] | @spth | DONE |
| 4 | C23 | qualifier-preserving stdlib functions | [feature-requests:#848] | POSTPONED | |
| 4 | C23 | constexpr | [feature-requests:#850] | POSTPONED | |
| 4 | C23 | nullptr | [feature-requests:#853] | @spth | DONE |
| 4 | C23 | tag compatibility | [feature-requests:#852] | @spth | DONE |
| 4 | C23 | label at end of compound statement | [feature-requests:#802] | @spth | DONE |
| 5 | Debug | ELF/DWARF for sm83 | POSTPONED | ||
| 5 | C23 | call_once | [feature-requests:#777] | @spth | DONE |
| 5 | Usability | GCC-compatible attribute syntax | [feature-requests:#682] | @roybaer | PARTIAL (WIP) |
| 5 | Usability | configure should check for makeinfo | [bugs:#3192] [bugs:#3288] | POSTPONED | |
| 5 | Usability | Documentation tarball contains intermediate files | [bugs:#3345] | @spth | work in progress |
| 5 | C23 | [[unsequenced]] [[reproducible]] | [feature-requests:#851] | @spth | DONE |
Further relevant feature request: [feature-requests:#666].
Done: Kick-off-workshop, paperwork, create this page, setup internal communication channel (Matrix).
Doing: Unit tests. Check meeting minutes of recent SC22 WG14 meetings for relevant new C23 features already approved. Open tickets for individual features. List, priorize and categorize relevant tasks here (see above).
Motivation: Quality assurance, getting started.
Done: Onboarding. Derived relevant C23 tasks (see above) from SC22 WG14 meeting minutes, categorized and priorized them. C23 assert. C23 char8_t.
Doing: Unit tests (port tests from GCC, QuickC, Tiny C to SDCC). C23 bit-precise integer types. C90-C23 struct / union return. C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O.
Motivation: Quality assurance. Standard compliance.
Done: C90-C23 struct / union return. C90-C23 struct / union parameters. C23 bit-precise integer types.
Doing: Refactor test infrastructure. Port tests from GCC, QuickC, Tiny C to SDCC. C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O.
Motivation: Quality assurance. Standard compliance.
Done: Various small fixes.
Doing: Refactor test infrastructure. Port tests from GCC, QuickC, Tiny C to SDCC. C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O. Fixes for the type system and C11 _Generic selections.
Motivation: Quality assurance. Standard compliance, usability.
Done: Fixes for the type system (in particular wrt. intrinsic named address spaces) and C11 _Generic selections.
Doing: Refactor test infrastructure. Port tests from GCC, QuickC, Tiny C to SDCC. C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O. Merge current upstream GNU binutils into SDCC fork.
Motivation: Quality assurance. Standard compliance, usability. Code quality.
Done: Refactor test infrastructure. Port tests from GCC, QuickC, Tiny C to SDCC. C23 warning on invalid Unicode codepoints.
Doing: C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O. Merge current upstream GNU binutils into SDCC fork.
Motivation: Quality assurance. Standard compliance, usability. Code quality.
Done: Merge current upstream GNU binutils into SDCC fork. Classify failures in new tests adopted from GCC, TinyC, QuickC. Check impact of ISO SC22WG14 May meeting C23 decisions on SDCC.
Doing: C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O. Modernize preprocessor.
Motivation: Quality assurance. Standard compliance, usability. Code quality.
Done: SDCC developer meeting 1. Bugfixes.
Doing: C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O. Modernize preprocessor. New parser.
Motivation: Standard compliance, in particular foundations for further progress towards C23 compliance. Share preprocessor code between GCC and SDCC.
Challenges: Single out preprocessor out of large GCC codebase. Relicense an existing upstream parser under a free license so we can use bits of it in our new one.
Done: Negotiated relicensing of C23 reference parser. Bugfixes.
Doing: C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O. Modernize preprocessor. New parser. GCC-style command line options.
Motivation: Standard compliance, in particular foundations for further progress towards C23 compliance. Share preprocessor code between GCC and SDCC.
Challenges: Single out preprocessor out of large GCC codebase. Implement C23 capabilities in parser without breaking backwards compability with SDCC language extensions too much.
Done: GCC-style command line options. Improve floating-point support. Present some related work, in including bits of a possible successor project at FSiC 2022.
Doing: C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O. Modernize preprocessor. New parser. Apply for (non-PT) funding for a possible successor project.
Motivation: Standard compliance, in particular foundations for further progress towards C23 compliance. Share preprocessor code between GCC and SDCC. Learned about the relevance of SDCC for freedom in mobile devices (Replicant developers want to use SDCC to build free firmware for microcontrollers embedded in smartphone pripherals).
Challenges: Clean up preprocessor build. Implement C23 capabilities in parser without breaking backwards compability with SDCC language extensions too much.
Done: Bugfixes. Completed list of tasks based on final set of features of the C23 standard (which was decided at the ISO SC22WG14 meeting 2022-07-18 to 2022-07-22). Preparations for the preprocessor modernization.
Doing: C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O. Modernize preprocessor. New parser. Apply for (non-PT) funding for a possible successor project.
Motivation: Standard compliance; we now know the final set of features for C23, which (apart from too many restriction on the use of -bit-precise integer types) seems reasonable.
Challenges: Clean up preprocessor build. Implement C23 capabilities in parser without breaking backwards compatibility with SDCC language extensions too much. Wonder, how much of all those new C23 features we will be able to implement, and how to prioritize.
Done: Various Bugfixes. Applied for (non-PT) funding for a possible successor project. Basic VLA type support. C23 {} empty initializers. Function declaration fixes. C23 auto. C23 typeof and typeof_unqual. C2x unreachable. C23 memalignment. C23 nullptr.
Doing: C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O. Modernize preprocessor. New parser. Implement bit and byte utilities standard library functions. C23 attributes.
Motivation: Standard compliance; trying to get done more standard compliance tasks, even if that means postponing some of the debug support and usability-related tasks.
Challenges: Enhanced enums and some corner cases of attributes non-trivial to support in parser. Remaining time likely unsufficient to complete all remaining tasks.
Done: Preprocessor modernization. New parser. Implement bit and byte utilities standard library functions. C23 attributes. C23 tag compatibility. C23 call_once. Bugfixes. FrOSCon talk.
Doing: C11-C23 compound literals. GCC attribute syntax compatibility. C23 modular formatted I/O.
Motivation: C23 standard compliance; trying to get done C standard compliance tasks, even if that means postponing some of the debug support and usability-related tasks.
Challenges: Time running out.
Done: Demo Day.
Doing: Writing final report. Bugfixes.
Challenges: Project ended.
Bugs: #2629
Bugs: #2664
Bugs: #2741
Bugs: #2766
Bugs: #2846
Bugs: #2870
Bugs: #2877
Bugs: #2906
Bugs: #2970
Bugs: #2981
Bugs: #3021
Bugs: #3030
Bugs: #3031
Bugs: #3091
Bugs: #3094
Bugs: #3108
Bugs: #3140
Bugs: #3145
Bugs: #3159
Bugs: #3192
Bugs: #3200
Bugs: #3254
Bugs: #3255
Bugs: #3288
Bugs: #3345
Bugs: #3396
Bugs: #3462
Feature Requests: #167
Feature Requests: #23
Feature Requests: #304
Feature Requests: #324
Feature Requests: #33
Feature Requests: #332
Feature Requests: #351
Feature Requests: #450
Feature Requests: #466
Feature Requests: #562
Feature Requests: #599
Feature Requests: #654
Feature Requests: #657
Feature Requests: #666
Feature Requests: #681
Feature Requests: #682
Feature Requests: #696
Feature Requests: #697
Feature Requests: #698
Feature Requests: #733
Feature Requests: #738
Feature Requests: #739
Feature Requests: #749
Feature Requests: #753
Feature Requests: #768
Feature Requests: #775
Feature Requests: #776
Feature Requests: #777
Feature Requests: #778
Feature Requests: #779
Feature Requests: #780
Feature Requests: #781
Feature Requests: #782
Feature Requests: #783
Feature Requests: #786
Feature Requests: #802
Feature Requests: #809
Feature Requests: #845
Feature Requests: #846
Feature Requests: #847
Feature Requests: #848
Feature Requests: #849
Feature Requests: #850
Feature Requests: #851
Feature Requests: #852
Feature Requests: #853
Feature Requests: #854
Support Requests: #151
Wiki: Funding