aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend
diff options
context:
space:
mode:
authorliushuyu <liushuyu011@gmail.com>2022-04-21 17:30:52 -0600
committerliushuyu <liushuyu011@gmail.com>2022-04-21 17:30:52 -0600
commit16730054de50fa613b86addd9cc4d737cfb7caf8 (patch)
treed2a171302353b371101bd97f7cff42d7e50072c0 /gcc/rust/backend
parent243ef0dfe713a9fc8d4d80feb488a58b2639f39f (diff)
downloadgcc-16730054de50fa613b86addd9cc4d737cfb7caf8.zip
gcc-16730054de50fa613b86addd9cc4d737cfb7caf8.tar.gz
gcc-16730054de50fa613b86addd9cc4d737cfb7caf8.tar.bz2
backend: handle cold attribute
Diffstat (limited to 'gcc/rust/backend')
-rw-r--r--gcc/rust/backend/rust-compile-base.cc23
-rw-r--r--gcc/rust/backend/rust-compile-base.h3
2 files changed, 26 insertions, 0 deletions
diff --git a/gcc/rust/backend/rust-compile-base.cc b/gcc/rust/backend/rust-compile-base.cc
index 602fc56..f138cb1 100644
--- a/gcc/rust/backend/rust-compile-base.cc
+++ b/gcc/rust/backend/rust-compile-base.cc
@@ -55,6 +55,7 @@ HIRCompileBase::setup_attributes_on_fndecl (
bool is_inline = attr.get_path ().as_string ().compare ("inline") == 0;
bool is_must_use
= attr.get_path ().as_string ().compare ("must_use") == 0;
+ bool is_cold = attr.get_path ().as_string ().compare ("cold") == 0;
if (is_inline)
{
handle_inline_attribute_on_fndecl (fndecl, attr);
@@ -63,7 +64,29 @@ HIRCompileBase::setup_attributes_on_fndecl (
{
handle_must_use_attribute_on_fndecl (fndecl, attr);
}
+ else if (is_cold)
+ {
+ handle_cold_attribute_on_fndecl (fndecl, attr);
+ }
+ }
+}
+
+void
+HIRCompileBase::handle_cold_attribute_on_fndecl (tree fndecl,
+ const AST::Attribute &attr)
+{
+ // simple #[cold]
+ if (!attr.has_attr_input ())
+ {
+ tree cold = get_identifier ("cold");
+ // this will get handled by the GCC backend later
+ DECL_ATTRIBUTES (fndecl)
+ = tree_cons (cold, NULL_TREE, DECL_ATTRIBUTES (fndecl));
+ return;
}
+
+ rust_error_at (attr.get_locus (),
+ "attribute %<cold%> does not accept any arguments");
}
void
diff --git a/gcc/rust/backend/rust-compile-base.h b/gcc/rust/backend/rust-compile-base.h
index c7f7f40..68a3994 100644
--- a/gcc/rust/backend/rust-compile-base.h
+++ b/gcc/rust/backend/rust-compile-base.h
@@ -82,6 +82,9 @@ protected:
static void handle_inline_attribute_on_fndecl (tree fndecl,
const AST::Attribute &attr);
+ static void handle_cold_attribute_on_fndecl (tree fndecl,
+ const AST::Attribute &attr);
+
static void handle_must_use_attribute_on_fndecl (tree fndecl,
const AST::Attribute &attr);