Felix Lee writes: > when gdb sees the second occurrence of struct ace, > it looks up the type number (3,2), > which refers to ace.h, > which is the same as the earlier ace.h, > so gdb reuses the previously-defined ace type. > > then gdb complains about struct wipeout and ignores the second definition, > which means it misses the type definition (2,1)=*(0,2), > which means cap_t uses an undefined type, > so "ptype cap_t" prints "struct " instead of "char *". Wow, great find. I don't think the patch is the whole story, though. Consider this case: $ cat h1.h typedef struct a a_t; $ cat c1.c #include "h1.h" struct a { int x, y; }; a_t v2; int main () { } $ cat c2.c #include "h1.h" struct a { double c, d; }; a_t v1; $ gcc33 gcc c1.c c2.c -o c -gstabs+ $ gdb c GNU gdb 2004-02-17-cvs Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". (gdb) ptype v1 During symbol reading, struct/union type gets multiply defined: struct a. type = struct a { int x; int y; } (gdb) ptype v2 type = struct a { int x; int y; } (gdb) I think it's just wrong for GDB to be re-using incomplete types from EXCL'd header files. Because C has no global names rule like C++ (I forget what it's really called), there's no guarantee that the type is actually the same. As far as I can see, GDB has always done this. I can't believe it's never been noticed before. I've attached a test case for both the problem you reported, and the problem I describe above. It's got a kfail for my problem, but I don't have a PR number yet for yours (I filed it as as separate PR, since the fix will be separate). I think your fix looks good. We don't have a copyright assignment on file for you; I'll get that started off-list.