aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/lint/rust-lint-scan-deadcode.h
diff options
context:
space:
mode:
authorThomas Young <wenzhang5800@gmail.com>2021-06-15 10:26:49 +0800
committerThomas Young <wenzhang5800@gmail.com>2021-06-15 10:26:49 +0800
commitba9728b401879691c81b8315e97f82a7c72826c8 (patch)
treeedd550ab7d6d3c26c36603c8861d4e758649e4d4 /gcc/rust/lint/rust-lint-scan-deadcode.h
parent59f8d7a2343cd326e905be618c820387cf13afb7 (diff)
downloadgcc-ba9728b401879691c81b8315e97f82a7c72826c8.zip
gcc-ba9728b401879691c81b8315e97f82a7c72826c8.tar.gz
gcc-ba9728b401879691c81b8315e97f82a7c72826c8.tar.bz2
replace analysis dir with lint dir and rename liveness to marklive
Diffstat (limited to 'gcc/rust/lint/rust-lint-scan-deadcode.h')
-rw-r--r--gcc/rust/lint/rust-lint-scan-deadcode.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/gcc/rust/lint/rust-lint-scan-deadcode.h b/gcc/rust/lint/rust-lint-scan-deadcode.h
new file mode 100644
index 0000000..10edbbc
--- /dev/null
+++ b/gcc/rust/lint/rust-lint-scan-deadcode.h
@@ -0,0 +1,68 @@
+// Copyright (C) 2021 Free Software Foundation, Inc.
+
+// This file is part of GCC.
+
+// GCC is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3, or (at your option) any later
+// version.
+
+// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with GCC; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#ifndef RUST_HIR_SCAN_DEADCODE
+#define RUST_HIR_SCAN_DEADCODE
+
+#include <set>
+#include "rust-hir-full-decls.h"
+#include "rust-hir-map.h"
+#include "rust-lint-marklive-base.h"
+#include "rust-name-resolver.h"
+#include "rust-diagnostics.h"
+
+namespace Rust {
+namespace Analysis {
+
+class ScanDeadcode : public MarkLiveBase
+{
+ using Rust::Analysis::MarkLiveBase::visit;
+
+public:
+ static void Scan (HIR::Crate &crate, std::set<HirId> live_symbols)
+ {
+ ScanDeadcode sdc (live_symbols);
+ for (auto it = crate.items.begin (); it != crate.items.end (); it++)
+ {
+ it->get ()->accept_vis (sdc);
+ }
+ };
+
+ void visit (HIR::Function &function) override
+ {
+ HirId hirId = function.get_mappings ().get_hirid ();
+ if (live_symbols.find (hirId) == live_symbols.end ())
+ {
+ rust_warning_at (function.get_locus (), 0,
+ "function is never used: `%s`",
+ function.get_function_name ().c_str ());
+ return;
+ }
+ }
+
+private:
+ std::set<HirId> live_symbols;
+ // std::set<HirId> dead_codes;
+
+ ScanDeadcode (std::set<HirId> &live_symbols) : live_symbols (live_symbols){};
+};
+
+} // namespace Analysis
+} // namespace Rust
+
+#endif \ No newline at end of file