diff options
author | liushuyu <liushuyu011@gmail.com> | 2022-04-21 17:30:52 -0600 |
---|---|---|
committer | liushuyu <liushuyu011@gmail.com> | 2022-04-21 17:30:52 -0600 |
commit | 16730054de50fa613b86addd9cc4d737cfb7caf8 (patch) | |
tree | d2a171302353b371101bd97f7cff42d7e50072c0 /gcc/rust/backend | |
parent | 243ef0dfe713a9fc8d4d80feb488a58b2639f39f (diff) | |
download | gcc-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.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); |