Robustify gdb.base/testenv.exp:find_env
authorPedro Alves <pedro@palves.net>
Sun, 20 Sep 2020 14:58:09 +0000 (15:58 +0100)
committerPedro Alves <pedro@palves.net>
Sun, 20 Sep 2020 14:58:09 +0000 (15:58 +0100)
If printing 'envp[$i]' in find_env fails, the testcase goes into an
infinite loop:

 Running /home/pedro/rocm/gdb/build/gdb/testsuite/../../../src/gdb/testsuite/gdb.base/testenv.exp ...
 FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var1: %s\n", envp[0] ? envp[0] : ""
 FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var1: %s\n", envp[1] ? envp[1] : ""
 FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var1: %s\n", envp[2] ? envp[2] : ""
 FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var1: %s\n", envp[3] ? envp[3] : ""
 ...
 FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var1: %s\n", envp[2519] ? envp[2519] : ""
 FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var1: %s\n", envp[2520] ? envp[2520] : ""
 FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var1: %s\n", envp[2521] ? envp[2521] : ""
 ..
 FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var1: %s\n", envp[5128] ? envp[5128] : ""
 FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var1: %s\n", envp[5129] ? envp[5129] : ""
 FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var1: %s\n", envp[5130] ? envp[5130] : ""
 ...

Fix that by bailing out of the loop on failure.

gdb/testsuite/ChangeLog:

* gdb.base/testenv.exp (find_env): Bail out if printing 'envp[$i]'
fails.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/testenv.exp

index 695416cf48326695873a912438e9575144774d93..71ec4951f16fb8442fa20f15a9e54e6e99a053e4 100644 (file)
@@ -1,3 +1,8 @@
+2020-09-20  Pedro Alves  <pedro@palves.net>
+
+       * gdb.base/testenv.exp (find_env): Bail out if printing 'envp[$i]'
+       fails.
+
 2020-09-19  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * gdb.fortran/array-slices.exp: Update expected results.
index 1599b72c27b8b3c7d61bd2e77b3c77a0241a12e9..4dea043472c891c5a7702a90366fe9e3f0e048fd 100644 (file)
@@ -68,6 +68,12 @@ proc find_env {varname} {
            -re "var: \(\[^\r\n\]*\)\r\n$gdb_prompt $" {
                set var $expect_out(1,string)
            }
+           -re "$gdb_prompt $" {
+               # If this fails, bail out, otherwise we get stuck in
+               # an infinite loop.  The caller will end up emiting a
+               # FAIL.
+               return "<fail>"
+           }
        }
 
        if {[string match "$varname=*" $var]} {