Search papers, labs, and topics across Lattice.
This paper introduces C2RustXW, a novel C-to-Rust translation tool that leverages program analysis and LLMs to generate more idiomatic and safer Rust code. The tool extracts multi-level program structure (global symbols, dependencies, control/data flow) and uses this information to guide LLM-based translation and repair. Experiments show C2RustXW achieves high syntactic and semantic correctness, while significantly reducing code size and unsafe code usage compared to existing rule-based translators.
LLMs can now translate C to Rust with near-perfect syntactic correctness and significantly improved semantic correctness by incorporating program structure information into the translation process.
The growing adoption of Rust for its memory safety and performance has increased the demand for effective migration of legacy C codebases. However, existing rule-based translators (e.g., \ctorust) often generate verbose, non-idiomatic code that preserves unsafe C semantics, limiting readability, maintainability, and practical adoption. Moreover, manual post-processing of such outputs is labor-intensive and rarely yields high-quality Rust code, posing a significant barrier to large-scale migration. To address these limitations, we present \tool, a program-structure-aware C-to-Rust translation approach that integrates program analysis with Large Language Models (LLMs). \tool extracts the multi-level program structure, including global symbols, function dependencies, and control- and data-flow information, and encodes these as structured textual representations injected into LLM prompts to guide translation and repair. Based on this design, \tool performs dependency-aware translation and adopts a multi-stage repair pipeline that combines rule-based and structure-guided LLM-based techniques to ensure syntactic correctness. For semantic correctness, \tool further integrates execution-based validation with structure-guided reasoning to localize and repair behavioral inconsistencies. Experimental results show that \tool achieves 100\% syntactic correctness on CodeNet and 97.78\% on GitHub, while significantly reducing code size (up to 43.70\%) and unsafe usage (to 5.75\%). At the project level, \tool achieves perfect syntactic correctness and an average semantic correctness of 78.87\%, demonstrating its effectiveness for practical and scalable C-to-Rust migration.