aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-05-07 13:19:29 +0100
committerPhilip Herron <philip.herron@embecosm.com>2021-05-11 15:37:19 +0100
commitc04343dbab902e5b8a5f047266645a5e7d40a5ed (patch)
tree96f4029948ed5263ed7ef218a58f49c774948a89 /gcc
parent299d98d8e6fcb8d014b299adc426d93cf0c8050f (diff)
downloadgcc-c04343dbab902e5b8a5f047266645a5e7d40a5ed.zip
gcc-c04343dbab902e5b8a5f047266645a5e7d40a5ed.tar.gz
gcc-c04343dbab902e5b8a5f047266645a5e7d40a5ed.tar.bz2
Explicitly track crate names within the mappings
We need to track crate names including the translation units one for symbol mangling purposes. This defaults to TestCrate for now and will need more work to actually make this a compiler option as part of imports and visbility.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/rust-session-manager.cc8
-rw-r--r--gcc/rust/util/rust-hir-map.cc27
-rw-r--r--gcc/rust/util/rust-hir-map.h24
3 files changed, 47 insertions, 12 deletions
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index da788b5..5e9746f 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -70,6 +70,10 @@ const char *kHIRDumpFile = "gccrs.hir.dump";
const char *kHIRTypeResolutionDumpFile = "gccrs.type-resolution.dump";
const char *kTargetOptionsDumpFile = "gccrs.target-options.dump";
+// FIME in the imports/visibility milestone - this needs to be command line
+// option
+const std::string kDefaultCrateName = "TestCrate";
+
// Implicitly enable a target_feature (and recursively enable dependencies).
void
Session::implicitly_enable_feature (std::string feature_name)
@@ -445,6 +449,10 @@ Session::enable_dump (std::string arg)
void
Session::parse_files (int num_files, const char **files)
{
+ auto mappings = Analysis::Mappings::get ();
+ CrateNum crate_num = mappings->setup_crate_mappings (kDefaultCrateName);
+ mappings->set_current_crate (crate_num);
+
for (int i = 0; i < num_files; i++)
{
printf ("Attempting to parse file: %s\n", files[i]);
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 0dcbd4f..3a0cbb1 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -107,7 +107,7 @@ Mappings::get ()
{
static std::unique_ptr<Mappings> instance;
if (!instance)
- instance = std::move (std::unique_ptr<Mappings> (new Mappings ()));
+ instance = std::unique_ptr<Mappings> (new Mappings ());
return instance.get ();
}
@@ -125,18 +125,23 @@ Mappings::set_current_crate (CrateNum crateNum)
}
CrateNum
-Mappings::get_current_crate ()
+Mappings::setup_crate_mappings (std::string crate_name)
{
- // HACK
- if (hirIdIter.find (currentCrateNum) == hirIdIter.end ())
- {
- hirIdIter[currentCrateNum] = UNKNOWN_HIRID;
- nodeIdIter[currentCrateNum] = UNKNOWN_NODEID;
- localIdIter[currentCrateNum] = UNKNOWN_LOCAL_DEFID;
- nodeIdToHirMappings[currentCrateNum] = {};
- locations[currentCrateNum] = {};
- }
+ CrateNum crate_num = get_next_crate_num ();
+ hirIdIter[crate_num] = UNKNOWN_HIRID;
+ nodeIdIter[crate_num] = UNKNOWN_NODEID;
+ localIdIter[crate_num] = UNKNOWN_LOCAL_DEFID;
+ nodeIdToHirMappings[crate_num] = {};
+ locations[crate_num] = {};
+ crate_names[crate_num] = crate_name;
+
+ return crate_num;
+}
+
+CrateNum
+Mappings::get_current_crate () const
+{
return currentCrateNum;
}
diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h
index 9777ee3..a198be6 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -83,7 +83,26 @@ public:
CrateNum get_next_crate_num ();
void set_current_crate (CrateNum crateNum);
- CrateNum get_current_crate ();
+ CrateNum get_current_crate () const;
+ CrateNum setup_crate_mappings (std::string crate_name);
+
+ bool get_crate_name (CrateNum crate_num, std::string &name) const
+ {
+ auto it = crate_names.find (crate_num);
+ if (it == crate_names.end ())
+ return false;
+
+ name.assign (it->second);
+ return true;
+ }
+
+ std::string get_current_crate_name () const
+ {
+ std::string name;
+ bool ok = get_crate_name (get_current_crate (), name);
+ rust_assert (ok);
+ return name;
+ }
NodeId get_next_node_id () { return get_next_node_id (get_current_crate ()); }
NodeId get_next_node_id (CrateNum crateNum);
@@ -212,6 +231,9 @@ private:
// all hirid nodes
std::map<CrateNum, std::set<HirId> > hirNodesWithinCrate;
+
+ // crate names
+ std::map<CrateNum, std::string> crate_names;
};
} // namespace Analysis