This document tracks things that we know the translator can't handle, as well as things it probably won't ever handle.
- variadic function definitions and macros that operate on
va_lists - preserving comments
- GNU inline assembly
long doubletype (Linux only)
_Complextype (partially blocked by Rust language)- C11
_Atomictype-specifier and type-qualifier (see https://en.cppreference.com/w/c/language/atomic) - Using
long doubletype in variadic functions (blocked on Rust language; see immunant#154) - Non-x86/64 SIMD function/types and x86/64 SIMD function/types which have no Rust equivalent
- Certain compiler builtins (see e.g. immunant#88)
- Exposing functions with different names and linkage types (blocked on Rust language. Example: https://github.com/ConradIrwin/libxml2/blob/master/elfgcchack.h)
- GNU packed structs (Rust has
#[repr(packed)]compatible with#[repr(C)]) restrictpointers (Rust has references)- macros
- GNU labels-as-values (immunant#221)
longjmp/setjmp: Although there are LLVM intrinsics for these, it is unclear how these interact with Rust (esp. idiomatic Rust).- jumps into and out of statement expressions: We support GNU C statement expressions, but we can not handle jumping into or out of these. Both entry and exit into the expression have to be through the usual fall-through evaluation of the expression.