When importing a path which starts with ./ or ../, we should not use the
import path. This patch implements that. This makes gccgo compatible
with the other Go compiler in how such paths are handled. Bootstrapped
and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to
mainline.
Ian
diff -r 90c1cf927434 go/import.cc
--- a/go/import.cc Tue Jan 17 06:18:15 2012 -0800
+++ b/go/import.cc Tue Jan 17 11:42:44 2012 -0800
@@ -42,8 +42,8 @@
// returns a pointer to a Stream object to read the data that it
// exports. If the file is not found, it returns NULL.
-// When FILENAME is not an absolute path, we use the search path
-// provided by -I and -L options.
+// When FILENAME is not an absolute path and does not start with ./ or
+// ../, we use the search path provided by -I and -L options.
// When FILENAME does not exist, we try modifying FILENAME to find the
// file. We use the first of these which exists:
@@ -61,7 +61,18 @@
Import::Stream*
Import::open_package(const std::string& filename, Location location)
{
- if (!IS_ABSOLUTE_PATH(filename))
+ bool is_local;
+ if (IS_ABSOLUTE_PATH(filename))
+ is_local = true;
+ else if (filename[0] == '.' && IS_DIR_SEPARATOR(filename[1]))
+ is_local = true;
+ else if (filename[0] == '.'
+ && filename[1] == '.'
+ && IS_DIR_SEPARATOR(filename[2]))
+ is_local = true;
+ else
+ is_local = false;
+ if (!is_local)
{
for (std::vector<std::string>::const_iterator p = search_path.begin();
p != search_path.end();