gdb.base/sigaltstack.exp failures
Bug #615990 reported by
Ulrich Weigand
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Linaro GDB |
Invalid
|
Undecided
|
Unassigned | ||
gdb |
Fix Released
|
Medium
|
Bug Description
FAIL: gdb.base/
(gdb) break catcher if level == INNER
A syntax error in expression, near `== INNER'.
Symbol resolution problem? In any case, further analysis required.
Changed in gdb: | |
status: | Unknown → Fix Released |
Changed in gdb: | |
importance: | Unknown → Medium |
To post a comment you must log in.
From <http:// sourceware. org/ml/ gdb-patches/ 2010-06/ msg00365. html>:
On Friday 21 May 2010 21:35:37, Pierre Muller wrote:
> > Pierre> 2010-05-21 Pierre Muller <email address hidden> volatile_ type.
> > Pierre> * dwarf2read.c (process_die): Also allow DW_TAG_const_type
> > Pierre> and DW_TAG_
> > Pierre> (new_symbol): Likewise.
caused
@@ -7385,16 +7385,16 @@ PASS: gdb.base/ sigaltstack. exp: handle S sigaltstack. exp: handle SIGVTALRM print pass nostop sigaltstack. exp: handle SIGPROF print pass nostop sigaltstack. exp: break catcher if level == INNER sigaltstack. exp: continue to catch sigaltstack. exp: continue to catch (the program exited) sigaltstack. exp: next sigaltstack. exp: backtrace sigaltstack. exp: finish from catch LEAF sigaltstack. exp: finish to throw INNER sigaltstack. exp: finish to catch INNER sigaltstack. exp: finish from catch INNER sigaltstack. exp: finish to OUTER sigaltstack. exp: finish to catch MAIN sigaltstack. exp: finish to MAIN sigaltstack. exp: backtrace (pattern 1) sigaltstack. exp: finish from catch LEAF (the program is no sigaltstack. exp: finish to throw INNER (the program is no sigaltstack. exp: finish to catch INNER (the program is no sigaltstack. exp: finish from catch INNER (the program is no sigaltstack. exp: finish to OUTER (the program is no longer running) sigaltstack. exp: finish to catch MAIN (the program is no longer sigaltstack. exp: finish to MAIN (the program is no longer running)
PASS: gdb.base/
PASS: gdb.base/
PASS: gdb.base/
-PASS: gdb.base/
+FAIL: gdb.base/
PASS: gdb.base/
-PASS: gdb.base/
-PASS: gdb.base/
-PASS: gdb.base/
-PASS: gdb.base/
-PASS: gdb.base/
-PASS: gdb.base/
-PASS: gdb.base/
-PASS: gdb.base/
+FAIL: gdb.base/
+FAIL: gdb.base/
longer running)
+FAIL: gdb.base/
longer running)
+FAIL: gdb.base/
longer running)
+FAIL: gdb.base/
longer running)
+FAIL: gdb.base/
+FAIL: gdb.base/
running)
+FAIL: gdb.base/
The problem is in the `level' variable in the test.
(gdb) break catcher if level == INNER ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^^^ ^^^^^ sigaltstack. exp: break catcher if level == INNER
A syntax error in expression, near `== INNER'.
^^^^^^
(gdb) PASS: gdb.base/
continue
Continuing.
Program received signal SIGALRM, Alarm clock.
Program received signal SIGVTALRM, Virtual timer expired.
Program exited with code 03. sigaltstack. exp: continue to catch (the program exited)
(gdb) FAIL: gdb.base/
...
Note that the variable has the same name as the enum:
enum level { MAIN, OUTER, INNER, LEAF, NR_LEVELS };
/* Levels completed flag. */
volatile enum level level = NR_LEVELS;
It boils down to this --- before the patch, running sigaltstack
under gdb (run to main):
(gdb) p level
$1 = NR_LEVELS
(gdb) ptype level
type = volatile enum level {MAIN, OUTER, INNER, LEAF, NR_LEVELS}
and after the patch:
(gdb) p level
Attempt to use a type name as an expression
(gdb) ptype level
type = volatile enum level {MAIN, OUTER, INNER, LEAF, NR_LEVELS}