diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-04-07 08:16:07 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-07 08:16:07 +0000 |
commit | b829e7c0a21c94672d09732e4a791e0471f41c13 (patch) | |
tree | 4a31cbcfb6c84de1a0082baeffe66392d7a0e97e /gcc/rust | |
parent | 779de323f3cc5cf2bb43050b135fbbeb3b3716cb (diff) | |
parent | 35570ae4104086a20069f967fea35d7850f0710f (diff) | |
download | gcc-b829e7c0a21c94672d09732e4a791e0471f41c13.zip gcc-b829e7c0a21c94672d09732e4a791e0471f41c13.tar.gz gcc-b829e7c0a21c94672d09732e4a791e0471f41c13.tar.bz2 |
Merge #1080
1080: macros: add compile_error! macro r=CohenArthur a=liushuyu
- Added `compile_error` macro
Co-authored-by: liushuyu <liushuyu011@gmail.com>
Diffstat (limited to 'gcc/rust')
-rw-r--r-- | gcc/rust/expand/rust-macro-builtins.cc | 16 | ||||
-rw-r--r-- | gcc/rust/expand/rust-macro-builtins.h | 3 | ||||
-rw-r--r-- | gcc/rust/util/rust-hir-map.cc | 1 |
3 files changed, 20 insertions, 0 deletions
diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc index f9b8e30..3cd6e43 100644 --- a/gcc/rust/expand/rust-macro-builtins.cc +++ b/gcc/rust/expand/rust-macro-builtins.cc @@ -236,4 +236,20 @@ MacroBuiltin::include_str (Location invoc_locus, AST::MacroInvocData &invoc) return AST::ASTFragment ({node}); } +/* Expand builtin macro compile_error!("error"), which forces a compile error + during the compile time. */ +AST::ASTFragment +MacroBuiltin::compile_error (Location invoc_locus, AST::MacroInvocData &invoc) +{ + auto lit_expr + = parse_single_string_literal (invoc.get_delim_tok_tree (), invoc_locus); + if (lit_expr == nullptr) + return AST::ASTFragment::create_error (); + + std::string error_string = lit_expr->as_string (); + rust_error_at (invoc_locus, "%s", error_string.c_str ()); + + return AST::ASTFragment::create_error (); +} + } // namespace Rust diff --git a/gcc/rust/expand/rust-macro-builtins.h b/gcc/rust/expand/rust-macro-builtins.h index 8b7c016..b119466 100644 --- a/gcc/rust/expand/rust-macro-builtins.h +++ b/gcc/rust/expand/rust-macro-builtins.h @@ -77,6 +77,9 @@ public: static AST::ASTFragment include_str (Location invoc_locus, AST::MacroInvocData &invoc); + + static AST::ASTFragment compile_error (Location invoc_locus, + AST::MacroInvocData &invoc); }; } // namespace Rust diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 7fbdbb0..47f9175 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -753,6 +753,7 @@ Mappings::insert_macro_def (AST::MacroRulesDefinition *macro) {"column", MacroBuiltin::column}, {"include_bytes", MacroBuiltin::include_bytes}, {"include_str", MacroBuiltin::include_str}, + {"compile_error", MacroBuiltin::compile_error}, }; auto builtin = builtin_macros.find (macro->get_rule_name ()); |