diff options
author | Philip Herron <philip.herron@embecosm.com> | 2022-02-11 10:27:55 +0000 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2022-02-11 10:27:55 +0000 |
commit | 4242d45d3d6590630ea88909ed996b8cf2640d35 (patch) | |
tree | d4059dbe453be902ebd68d4704160db6942bb1b3 /gcc/rust/backend/rust-compile-base.cc | |
parent | 5801e165b3902f3376387649c632933c05647274 (diff) | |
download | gcc-4242d45d3d6590630ea88909ed996b8cf2640d35.zip gcc-4242d45d3d6590630ea88909ed996b8cf2640d35.tar.gz gcc-4242d45d3d6590630ea88909ed996b8cf2640d35.tar.bz2 |
refactor named_constant_expression out of the backend class
Diffstat (limited to 'gcc/rust/backend/rust-compile-base.cc')
-rw-r--r-- | gcc/rust/backend/rust-compile-base.cc | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/gcc/rust/backend/rust-compile-base.cc b/gcc/rust/backend/rust-compile-base.cc index 85d85b9..9f936d2 100644 --- a/gcc/rust/backend/rust-compile-base.cc +++ b/gcc/rust/backend/rust-compile-base.cc @@ -445,8 +445,26 @@ HIRCompileBase::compile_constant_item ( folded_expr = ConstCtx::fold (call); } - return ctx->get_backend ()->named_constant_expression (const_type, ident, - folded_expr, locus); + return named_constant_expression (const_type, ident, folded_expr, locus); +} + +tree +HIRCompileBase::named_constant_expression (tree type_tree, + const std::string &name, + tree const_val, Location location) +{ + if (type_tree == error_mark_node || const_val == error_mark_node) + return error_mark_node; + + tree name_tree = get_identifier_with_length (name.data (), name.length ()); + tree decl + = build_decl (location.gcc_location (), CONST_DECL, name_tree, type_tree); + DECL_INITIAL (decl) = const_val; + TREE_CONSTANT (decl) = 1; + TREE_READONLY (decl) = 1; + + rust_preserve_from_gc (decl); + return decl; } } // namespace Compile |