From: Owen Avery <[email protected]>
Leaks filenames so that they live as long as the linemap does (until
exit?).
gcc/rust/ChangeLog:
* expand/rust-macro-builtins-include.cc
(MacroBuiltin::include_handler): Remove include_extra_file
usage.
* lex/rust-lex.cc (Lexer::Lexer): Copy and leak filename
parameter.
* rust-session-manager.h (Session::extra_files): Remove member
variable.
(Session::include_extra_file): Remove member function.
Signed-off-by: Owen Avery <[email protected]>
Tested on x86_64-pc-linux-gnu.
---
gcc/rust/expand/rust-macro-builtins-include.cc | 3 +--
gcc/rust/lex/rust-lex.cc | 4 +++-
gcc/rust/rust-session-manager.h | 13 -------------
3 files changed, 4 insertions(+), 16 deletions(-)
diff --git a/gcc/rust/expand/rust-macro-builtins-include.cc
b/gcc/rust/expand/rust-macro-builtins-include.cc
index 1461e523eaa..01f2b93a247 100644
--- a/gcc/rust/expand/rust-macro-builtins-include.cc
+++ b/gcc/rust/expand/rust-macro-builtins-include.cc
@@ -227,8 +227,7 @@ MacroBuiltin::include_handler (location_t invoc_locus,
std::string filename
= source_relative_path (lit_expr->as_string (), invoc_locus);
- auto target_filename
- = Rust::Session::get_instance ().include_extra_file (std::move (filename));
+ const char *target_filename = filename.c_str ();
RAIIFile target_file (target_filename);
Linemap *linemap = Session::get_instance ().linemap;
diff --git a/gcc/rust/lex/rust-lex.cc b/gcc/rust/lex/rust-lex.cc
index f5f2f4aa60d..31c78410bb2 100644
--- a/gcc/rust/lex/rust-lex.cc
+++ b/gcc/rust/lex/rust-lex.cc
@@ -163,8 +163,10 @@ Lexer::Lexer (const char *filename, RAIIFile file_input,
Linemap *linemap,
input_queue{*raw_input_source}, token_queue (TokenSource (this))
{
// inform line_table that file is being entered and is in line 1
+ // TODO: filename needs to live ~forever, is there a better way than xstrdup?
+ // ^ (as long as the linemap does)
if (linemap)
- line_map->start_file (filename, current_line);
+ line_map->start_file (xstrdup (filename), current_line);
}
Lexer::~Lexer ()
diff --git a/gcc/rust/rust-session-manager.h b/gcc/rust/rust-session-manager.h
index 0f4ba7257a1..9d7dc0bbad3 100644
--- a/gcc/rust/rust-session-manager.h
+++ b/gcc/rust/rust-session-manager.h
@@ -418,10 +418,6 @@ struct Session
std::string injected_crate_name;
std::map<std::string, std::string> extern_crates;
- /* extra files get included during late stages of compilation (e.g. macro
- * expansion) */
- std::vector<std::string> extra_files;
-
// backend linemap
Linemap *linemap;
@@ -450,15 +446,6 @@ public:
void init_options ();
void handle_crate_name (const char *filename, const AST::Crate
&parsed_crate);
- /* This function saves the filename data into the session manager using the
- * `move` semantics, and returns a C-style string referencing the input
- * std::string */
- inline const char *include_extra_file (std::string filename)
- {
- extra_files.push_back (std::move (filename));
- return extra_files.back ().c_str ();
- }
-
struct LoadedCrate
{
LoadedCrate (std::string name, NodeId node_id,
--
2.55.0