getenv_spec_function to prepend / to value for undef var
authorOlivier Hainque <hainque@adacore.com>
Tue, 31 Jul 2018 08:30:41 +0000 (08:30 +0000)
committerOlivier Hainque <hainque@gcc.gnu.org>
Tue, 31 Jul 2018 08:30:41 +0000 (08:30 +0000)
So the value can be used in places where an absolute path
is expected.

2018-07-31  Olivier Hainque  <hainque@adacore.com>

        * gcc.c (getenv_spec_function): Prepend '/' to value for
allowed undefined variables.

From-SVN: r263081

gcc/ChangeLog
gcc/gcc.c

index 0616687f5d9632a4562f0dbc05155e95d795063a..e2eb1c69fd054243ac6079f275fa2639f2731a1d 100644 (file)
@@ -1,3 +1,8 @@
+2018-07-31  Olivier Hainque  <hainque@adacore.com>
+
+       * gcc.c (getenv_spec_function): Prepend '/' to value for allowed
+       undefined variables.
+
 2018-07-30  Segher Boessenkool  <segher@kernel.crashing.org>
 
        PR target/86640
index 9ed8a03af0a2aa017be1fc75a81823dda94d7816..48689ed398a2d411eb19df1b5d1f5f660d8ac2ee 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -9244,7 +9244,11 @@ print_multilib_info (void)
    Returns the value of the environment variable given by its first argument,
    concatenated with the second argument.  If the variable is not defined, a
    fatal error is issued unless such undefs are internally allowed, in which
-   case the variable name is used as the variable value.  */
+   case the variable name prefixed by a '/' is used as the variable value.
+
+   The leading '/' allows using the result at a spot where a full path would
+   normally be expected and when the actual value doesn't really matter since
+   undef vars are allowed.  */
 
 static const char *
 getenv_spec_function (int argc, const char **argv)
@@ -9262,8 +9266,15 @@ getenv_spec_function (int argc, const char **argv)
   varname = argv[0];
   value = env.get (varname);
 
+  /* If the variable isn't defined and this is allowed, craft our expected
+     return value.  Assume variable names used in specs strings don't contain
+     any active spec character so don't need escaping.  */
   if (!value && spec_undefvar_allowed)
-    value = varname;
+    {
+      result = XNEWVAR (char, strlen(varname) + 2);
+      sprintf (result, "/%s", varname);
+      return result;
+    }
 
   if (!value)
     fatal_error (input_location,