diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-04-22 10:34:59 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-22 10:34:59 +0000 |
commit | d541ded4855d0b4273a986b15ff497c45dbc6c78 (patch) | |
tree | 66ef63953ffe52d74cfa1825bcf1606bf8227e51 /gcc/rust/backend | |
parent | 75ac2f6fc0a12a7f75abfd5bcd79e508f5ae8fc7 (diff) | |
parent | 16730054de50fa613b86addd9cc4d737cfb7caf8 (diff) | |
download | gcc-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.cc | 23 | ||||
-rw-r--r-- | gcc/rust/backend/rust-compile-base.h | 3 |
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); |