Port GOTO handling from cp/constexpr.cc to gccrs
GCC Rust compiler gains `goto` handling for constant expressions, ported from C++.
The GCC Rust compiler (gccrs) has incorporated handling for goto statements within constant expressions by porting relevant logic from GCC’s C++ frontend (cp/constexpr.cc). This enhancement ensures that goto statements, when used in contexts where constant evaluation is required, are processed correctly, resolving issues related to control flow in compile-time evaluated code.
In Details
Logic for goto handling in constant expression evaluation has been ported from GCC's C++ frontend (cp/constexpr.cc) to gccrs/backend/rust-constexpr.cc. Specifically, the eval_constant_expression and potential_constant_expression_1 functions now incorporate this ported functionality. This allows gccrs to correctly evaluate constant expressions that involve goto statements, maintaining consistency with C++'s constexpr evaluation rules.
- gccrs
- The GCC implementation of the Rust programming language compiler. It aims to compile Rust code using the GCC backend infrastructure.
- GOTO
- A control flow statement that transfers program execution to another specified point in the program. Its use is often discouraged due to potential for creating complex and hard-to-follow code.
- constexpr
- A C++ keyword that indicates a variable or function can be evaluated at compile time. This allows for more efficient execution by performing computations during compilation rather than at runtime.
- constant expression
- An expression whose value is determined at compile time. These are often used in contexts where runtime evaluation is not possible or desirable, such as array sizes or template arguments.
- C++ frontend
- The part of the GCC compiler that parses and analyzes C++ code, converting it into an intermediate representation before optimization and code generation.