compiler: open byte slice and string embeds using the absolute path
authorMichael Matloob <matloob@golang.org>
Fri, 12 Feb 2021 00:28:57 +0000 (19:28 -0500)
committerIan Lance Taylor <iant@golang.org>
Fri, 12 Feb 2021 19:18:32 +0000 (11:18 -0800)
The paths vector contains the names of the files that the embed_files_
map is keyed by. While the code processing embed.FS values looks up
the paths in the embed_files_ map, the code processing string and byte
slice embeds tries opening the files using their names directly. Look
up the full paths in the embed_files_ map when opening them.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/291429

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/embed.cc

index 905c6fe9326e89190f41846eb9a3fd96611fe94a..3175ba0e005e65b3499a540c6099532847c110af 100644 (file)
@@ -1,4 +1,4 @@
-78770fd9c29037dec8b2919c0f02067915c6ad33
+a5d7c4225fbbd06b97db6fa424cc0cb5191082d4
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index bea1003bc087a79bdada0f6bdabfa5881b46d432..0a7df0531ec1969f6a5d41467ed06791eb20a3ba 100644 (file)
@@ -812,8 +812,7 @@ Gogo::initializer_for_embeds(Type* type,
        }
 
       // Each pattern in the embedcfg file maps to a list of file
-      // names.  For each file name, the embedcfg file records an
-      // absolute path.  Add those absolute paths to PATHS.
+      // names.  Add those file names to PATHS.
       for (std::vector<std::string>::const_iterator pf = pp->second.begin();
           pf != pp->second.end();
           pf++)
@@ -865,7 +864,7 @@ Gogo::initializer_for_embeds(Type* type,
        }
 
       std::string data;
-      if (!read_file(paths[0].c_str(), loc, &data))
+      if (!read_file(this->embed_files_[paths[0]].c_str(), loc, &data))
        return Expression::make_error(loc);
 
       Expression* e = Expression::make_string(data, loc);