aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-04-22 10:34:59 +0000
committerGitHub <noreply@github.com>2022-04-22 10:34:59 +0000
commitd541ded4855d0b4273a986b15ff497c45dbc6c78 (patch)
tree66ef63953ffe52d74cfa1825bcf1606bf8227e51 /gcc/rust/backend
parent75ac2f6fc0a12a7f75abfd5bcd79e508f5ae8fc7 (diff)
parent16730054de50fa613b86addd9cc4d737cfb7caf8 (diff)
downloadgcc-d541ded4855d0b4273a986b15ff497c45dbc6c78.zip
gcc-d541ded4855d0b4273a986b15ff497c45dbc6c78.tar.gz
gcc-d541ded4855d0b4273a986b15ff497c45dbc6c78.tar.bz2
Merge #1148
1148: backend: handle cold attribute r=philberty a=liushuyu - handle the `cold` attribute Co-authored-by: liushuyu <liushuyu011@gmail.com>
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);