diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 9806b9da1e1c..5c9fc7db4e1d 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -56cf388da8d04bbd3824c4df34d77a8afa69749b +2c5188b5ad6143e791f2ba42f02a4ea7887d87b6 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/embed.cc b/gcc/go/gofrontend/embed.cc index 0a7df0531ec1..0584f707ce6b 100644 --- a/gcc/go/gofrontend/embed.cc +++ b/gcc/go/gofrontend/embed.cc @@ -663,21 +663,6 @@ Embedcfg_reader::error(const char* msg) this->filename_, msg); } -// Return whether the current file imports "embed". - -bool -Gogo::is_embed_imported() const -{ - Packages::const_iterator p = this->packages_.find("embed"); - if (p == this->packages_.end()) - return false; - - // We track current file imports in the package aliases, where a - // typical import will just list the package name in aliases. So - // the package has been imported if there is at least one alias. - return !p->second->aliases().empty(); -} - // Implement the sort order for a list of embedded files, as discussed // at the docs for embed.FS. diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index 38a2f6f8f9e5..9d4150eff7ca 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -37,6 +37,7 @@ Gogo::Gogo(Backend* backend, Linemap* linemap, int, int pointer_size) imports_(), imported_unsafe_(false), current_file_imported_unsafe_(false), + current_file_imported_embed_(false), packages_(), init_functions_(), var_deps_(), @@ -469,6 +470,9 @@ Gogo::import_package(const std::string& filename, return; } + if (filename == "embed") + this->current_file_imported_embed_ = true; + Imports::const_iterator p = this->imports_.find(filename); if (p != this->imports_.end()) { @@ -2717,6 +2721,7 @@ Gogo::clear_file_scope() } this->current_file_imported_unsafe_ = false; + this->current_file_imported_embed_ = false; } // Queue up a type-specific hash function for later writing. These diff --git a/gcc/go/gofrontend/gogo.h b/gcc/go/gofrontend/gogo.h index 51b6575ba47f..f4155a29edb3 100644 --- a/gcc/go/gofrontend/gogo.h +++ b/gcc/go/gofrontend/gogo.h @@ -397,10 +397,6 @@ class Gogo void read_embedcfg(const char* filename); - // Return whether the current file imports "embed". - bool - is_embed_imported() const; - // Build an initializer for a variable with a go:embed directive. Expression* initializer_for_embeds(Type*, const std::vector*, Location); @@ -709,6 +705,11 @@ class Gogo current_file_imported_unsafe() const { return this->current_file_imported_unsafe_; } + // Return whether the current file imported the embed package. + bool + current_file_imported_embed() const + { return this->current_file_imported_embed_; } + // Clear out all names in file scope. This is called when we start // parsing a new file. void @@ -1251,6 +1252,8 @@ class Gogo bool imported_unsafe_; // Whether the magic unsafe package was imported by the current file. bool current_file_imported_unsafe_; + // Whether the embed package was imported by the current file. + bool current_file_imported_embed_; // Mapping from package names we have seen to packages. This does // not include the package we are compiling. Packages packages_; diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc index fd81a85c87f8..e43b5f214484 100644 --- a/gcc/go/gofrontend/parse.cc +++ b/gcc/go/gofrontend/parse.cc @@ -1321,7 +1321,7 @@ Parse::declaration() embeds = new(std::vector); this->lex_->get_and_clear_embeds(embeds); - if (!this->gogo_->is_embed_imported()) + if (!this->gogo_->current_file_imported_embed()) { go_error_at(token->location(), "invalid go:embed: missing import %");