https://gcc.gnu.org/g:9938133aca92cdab34b9c979162f3626244e57a6

commit r16-3009-g9938133aca92cdab34b9c979162f3626244e57a6
Author: Owen Avery <powerboat9.ga...@gmail.com>
Date:   Tue Jul 15 12:04:53 2025 -0400

    gccrs: Remove undefined behavior with static_cast
    
    gcc/rust/ChangeLog:
    
            * expand/rust-macro-builtins-helpers.cc
            (try_extract_string_literal_from_fragment): Perform static_cast
            to AST::LiteralExpr only after it's verified that an AST::Expr
            is a literal.
    
    Signed-off-by: Owen Avery <powerboat9.ga...@gmail.com>

Diff:
---
 gcc/rust/expand/rust-macro-builtins-helpers.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/rust/expand/rust-macro-builtins-helpers.cc 
b/gcc/rust/expand/rust-macro-builtins-helpers.cc
index 19af5df4a68c..ee01f65d8a1d 100644
--- a/gcc/rust/expand/rust-macro-builtins-helpers.cc
+++ b/gcc/rust/expand/rust-macro-builtins-helpers.cc
@@ -111,9 +111,9 @@ std::unique_ptr<AST::LiteralExpr>
 try_extract_string_literal_from_fragment (const location_t &parent_locus,
                                          std::unique_ptr<AST::Expr> &node)
 {
-  auto maybe_lit = static_cast<AST::LiteralExpr *> (node.get ());
   if (!node || !node->is_literal ()
-      || maybe_lit->get_lit_type () != AST::Literal::STRING)
+      || static_cast<AST::LiteralExpr &> (*node).get_lit_type ()
+          != AST::Literal::STRING)
     {
       rust_error_at (parent_locus, "argument must be a string literal");
       if (node)

Reply via email to