[gdb/testsuite] Add untested case in gdb.gdb/complaints.exp
authorTom de Vries <tdevries@suse.de>
Fri, 3 Sep 2021 14:38:59 +0000 (16:38 +0200)
committerTom de Vries <tdevries@suse.de>
Fri, 3 Sep 2021 14:38:59 +0000 (16:38 +0200)
When building gdb with "-Wall -O2 -g -flto=auto", I run into:
...
(gdb) call clear_complaints()^M
No symbol "clear_complaints" in current context.^M
(gdb) FAIL: gdb.gdb/complaints.exp: clear complaints
...

The problem is that lto has optimized away clear_complaints, and consequently
the selftests cannot run.

Fix this by:
- using info function to detect presence of clear_complaints
- handling the absence of clear_complaints by calling untested
...
(gdb) UNTESTED: gdb.gdb/complaints.exp: \
  Cannot find clear_complaints, skipping test
...

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-09-03  Tom de Vries  <tdevries@suse.de>

* gdb.gdb/complaints.exp: Use untested if clear_complaints cannot
be found.

gdb/testsuite/gdb.gdb/complaints.exp

index c70825b662315508f0faa5a300c12e02a1d7767b..2391d66125076a651eb2cc7bee23a9a9ea8f9d78 100644 (file)
@@ -104,6 +104,26 @@ proc test_empty_complaint { cmd msg } {
 }
 
 proc test_empty_complaints { } {
+    global decimal
+
+    set re [multi_line \
+               "All functions matching regular expression \[^:\]*:" \
+               "" \
+               "File \[^\r\n\]*/complaints\\.c:" \
+               "$decimal:\tvoid clear_complaints\\(\\);"]
+
+    set found 0
+    gdb_test_multiple "info function ^clear_complaints()$" "" {
+       -re -wrap $re {
+           set found 1
+       }
+       -re -wrap "" {
+       }
+    }
+    if { ! $found } {
+       untested "Cannot find clear_complaints, skipping test"
+       return 0
+    }
 
     test_empty_complaint "call clear_complaints()" \
            "clear complaints"