Rust HIR patterns gain type-aware refutability checks
Rust HIR patterns now determine refutability using type context for more accurate analysis.
The Rust frontend in GCC has introduced is_refutable() methods to its High-Level Intermediate Representation (HIR) pattern nodes. These methods distinguish between patterns whose refutability can be determined syntactically (like wildcards and literals) and those requiring type information. This enhancement is crucial for accurate pattern matching analysis and addresses issue Rust-GCC#2082.
In Details
The gccrs frontend now distinguishes between syntactically refutable HIR patterns (literals, wildcards) and type-dependent ones. New is_refutable() virtual methods in rust-hir-pattern.h and rust-hir-pattern-abstract.h provide this distinction. The typed overload is intended for patterns requiring type context, while the syntactic overload handles simpler cases. This change supports LWG3869 by adding deprecation attributes to certain std::errc constants related to UNIX STREAMS.
- HIR
- High-Level Intermediate Representation. A representation of the source code used by the compiler after initial parsing and semantic analysis, but before optimization passes.
- pattern matching
- A control flow mechanism that allows complex data extraction and conditional logic based on the structure of data.
- refutability
- In the context of pattern matching, refutability refers to whether a pattern can potentially fail to match a given value. A pattern is refutable if there exists a value that does not match it.