Skip to content

Known Limitations of Translation

Per Larsen edited this page Jun 22, 2018 · 19 revisions

This document is to track things that we know the translator can't handle, as well as things it probably won't ever handle.

Unimplemented

  • bitfields
  • variadic function definitions (blocked by Rust language)
  • some static initializers (blocked by Rust language)
  • preserving comments
  • long double and _Complex types (partially blocked by Rust language, see #17)

Unimplemented, might be implementable but very low priority

  • GNU packed structs (Rust has #[repr(packed)] compatible with #[repr(C)])
  • inline functions (Rust has #[inline])
  • restrict pointers (Rust has references)
  • inline assembly (see #96)
  • macros (see #9)
  • SIMD/vector types (see #94)

Likely won't ever support

  • 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 has to be through the usual fall-through evaluation of the expression.
Clone this wiki locally