News: 0001470247

  ARM Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life (Terry Pratchett, Jingo)

LLVM Clang 19 Lands Support For C23's #embed

([LLVM] 6 Hours Ago C23 #embed)


Merged today to LLVM Clang 19 Git is support for the #embed resource inclusion mechanism that is an approved C23 feature. This also makes Clang the first for supporting this pre-processor embed feature.

C23's #embed pre-processor directive makes it easy to include binary data within an executable. With C23 #embed the developer can include the contents of an external binary file at compile-time without relying on any external approaches or resorting to loading the external binary file(s) at run-time.

More details on the C23 #embed feature can be found via the [1]open-std.org whitepaper on the feature. The abstract is as follows:

"Pulling binary data into a program often involves external tools and build system coordination. Many programs need binary data such as images, encoded text, icons and other data in a specific format. Current state of the art for working with such static data in C includes creating files which contain solely string literals, directly invoking the linker to create data blobs to access through carefully named extern variables, or generating large brace-delimited lists of integers to place into arrays. As binary data has grown larger, these approaches have begun to have drawbacks and issues scaling. From parsing 5 megabytes worth of integer literal expressions into AST nodes to arbitrary string literal length limits in compilers, portably putting binary data in a C program has become an arduous task that taxes build infrastructure and compilation memory and time. This proposal provides a flexible preprocessor directive for making this data available to the user in a straightforward manner."

Since last year has been [2]this pull request making all the necessary changes to support the #embed pre-processor for both C and C++. After months of work, that code was merged this morning and now makes LLVM Clang the first of the major open-source compilers supporting this directive.

The current C23 language status with the Clang compiler can be found via [3]this status page .



[1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3017.htm

[2] https://github.com/llvm/llvm-project/pull/68620

[3] https://clang.llvm.org/c_status.html#c2x



ssokolow

A distraught patient phoned her doctor's office. "Was it true," the woman
inquired, "that the medication the doctor had prescribed was for the rest
of her life?"
She was told that it was. There was just a moment of silence before
the woman proceeded bravely on. "Well, I'm wondering, then, how serious my
condition is. This prescription is marked `NO REFILLS'".