LLVM 能代表什么 C 不能?

What can LLVM represent that C cannot?

据我所知,几乎所有可以用 LLVM 中间语言表示的代码也可以用 C 表示,但有两个重要的例外:

还有什么可以用 LLVM 表示但不能用 C 表示的吗?

例如元数据,包括 LLVM 的分支权重和 debugloc 元数据。

除了他们可以,如果你愿意对你写的 C 足够曲折。我认为这很普遍:如果您愿意编写真正曲折的、单一的 C,那么您可以编写任何内容。所以我投票关闭这个不清楚。

编辑:如果有足够的纪律、冗长和预处理指令,大多数事情可能可以在 C 中表达,但我想知道 aliasing

除了异常处理,其他大特性garbage collection and out-of-the-box coroutines. Going to a lower level, there are trampoline intrinsics, patch points for JITs, and direct support for Obj-C ARC Runtime intrinsics

C 是图灵完备的,所以所有这些东西都可以通过库等引入 C,但我把它们放在 LLVM 语言中。