aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend/rust-compile-base.cc
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2022-02-11 10:27:55 +0000
committerPhilip Herron <philip.herron@embecosm.com>2022-02-11 10:27:55 +0000
commit4242d45d3d6590630ea88909ed996b8cf2640d35 (patch)
treed4059dbe453be902ebd68d4704160db6942bb1b3 /gcc/rust/backend/rust-compile-base.cc
parent5801e165b3902f3376387649c632933c05647274 (diff)
downloadgcc-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.cc22
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