From: jjasmine Date: Tue, 11 Jun 2024 01:08:42 +0000 (-0700) Subject: gccrs: Scaffolding validation of asm! X-Git-Tag: basepoints/gcc-16~1352 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e62553cb02afc77d40c0f55c08bae26cd3a0b32;p=thirdparty%2Fgcc.git gccrs: Scaffolding validation of asm! gcc/rust/ChangeLog: * expand/rust-macro-builtins-asm.cc (parse_asm): Scaffolding validation of asm! (validate): Likewise * expand/rust-macro-builtins-asm.h (validate): Likewise --- diff --git a/gcc/rust/expand/rust-macro-builtins-asm.cc b/gcc/rust/expand/rust-macro-builtins-asm.cc index 47a47607cfe..3073761d5d6 100644 --- a/gcc/rust/expand/rust-macro-builtins-asm.cc +++ b/gcc/rust/expand/rust-macro-builtins-asm.cc @@ -703,13 +703,26 @@ parse_asm (location_t invoc_locus, AST::MacroInvocData &invoc, // operands stream, also handles the optional "," parse_asm_arg (parser, last_token_id, inline_asm_ctx); - AST::SingleASTNode single = AST::SingleASTNode ( - inline_asm_ctx.inline_asm.clone_expr_without_block ()); - std::vector single_vec = {single}; + // TODO: I'm putting the validation here because the rust reference put it + // here Per Arthur's advice we would actually do the validation in a different + // stage. and visit on the InlineAsm AST instead of it's context. + auto is_valid = validate (inline_asm_ctx); - AST::Fragment fragment_ast - = AST::Fragment (single_vec, std::vector> ()); - return fragment_ast; + if (is_valid) + { + AST::SingleASTNode single = AST::SingleASTNode ( + inline_asm_ctx.inline_asm.clone_expr_without_block ()); + std::vector single_vec = {single}; + + AST::Fragment fragment_ast + = AST::Fragment (single_vec, + std::vector> ()); + return fragment_ast; + } + else + { + return tl::nullopt; + } } tl::optional @@ -749,4 +762,10 @@ parse_label (Parser &parser, TokenId last_token_id, return tl::nullopt; } } + +bool +validate (InlineAsmContext &inline_asm_ctx) +{ + return true; +} } // namespace Rust diff --git a/gcc/rust/expand/rust-macro-builtins-asm.h b/gcc/rust/expand/rust-macro-builtins-asm.h index 267c1b609d9..293d790ca40 100644 --- a/gcc/rust/expand/rust-macro-builtins-asm.h +++ b/gcc/rust/expand/rust-macro-builtins-asm.h @@ -75,7 +75,8 @@ parse_format_string (Parser &parser, TokenId last_token_id, tl::optional parse_label (Parser &parser, TokenId last_token_id, InlineAsmContext &inline_asm_ctx); - +bool +validate (InlineAsmContext &inline_asm_ctx); std::set potentially_nonpromoted_keywords = {"in", "out", "lateout", "inout", "inlateout", "const", "sym", "label"};