This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug pch/13689] New: GGC PCH breaks aliasing
- From: "dje at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 14 Jan 2004 23:17:58 -0000
- Subject: [Bug pch/13689] New: GGC PCH breaks aliasing
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Parsing invokes make_decl_rtl(), which creates alias sets. The references to
the alias sets are saved in PCH. When PCH is restored, we end up with
references to alias sets that don't exist, or worse, when we create more alias
sets, we end up with things assigend to the same alias set that don't actually
have the same alias set.
The following example shows new_alias_set() being invoked from make_decl_rtl()
during parsing when generating PCH:
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /gcc/dje/build/powerpc-ibm-aix5.1.0.0-20040113/gcc/cc1plus -qu
iet -nostdinc++ -isystem /gcc/dje/install/powerpc-ibm-aix5.1.0.0-20040113/powerp
c-ibm-aix5.1.0.0/include -isystem /gcc/dje/install/powerpc-ibm-aix5.1.0.0-200401
13/powerpc-ibm-aix5.1.0.0/sys-include -Winvalid-pch -Wno-deprecated -g -O2 -I/gc
c/dje/build/powerpc-ibm-aix5.1.0.0-20040113/powerpc-ibm-aix5.1.0.0/libstdc++-v3/
include/powerpc-ibm-aix5.1.0.0 -I/gcc/dje/build/powerpc-ibm-aix5.1.0.0-20040113/
powerpc-ibm-aix5.1.0.0/libstdc++-v3/include -I/gcc/dje/src/libstdc++-v3/libsupc+
+ /gcc/dje/src/libstdc++-v3/include/stdc++.h -O2 -g -o ./O2g
Breakpoint 4, new_alias_set () at /gcc/dje/src/gcc/alias.c:599
599 if (flag_strict_aliasing)
(gdb) where
#0 new_alias_set () at /gcc/dje/src/gcc/alias.c:599
#1 0x1018ff50 in get_alias_set (t=0x30313200) at /gcc/dje/src/gcc/alias.c:580
#2 0x101bbcc8 in set_mem_attributes_minus_bitpos (ref=0x302daf50,
t=0x30312f80, objectp=1, bitpos=0) at /gcc/dje/src/gcc/emit-rtl.c:1559
#3 0x101d1d34 in make_decl_rtl (decl=0x30312f80,
asmspec=0x1048a17c "xxxxb", 't' <repeats 20 times>, "cccccddddddddddrrrrrrre
eeeeeeeeexe", '2' <repeats 13 times>, "11111122122222221eeeeee", '<' <repeats 13
times>, "2<121111eeeeeee2111eeeeeeeessssseeeeex1e1", 'e' <repeats 20 times>, "x
rceeeerreeeedxdxttttttdexexxe1"...) at /gcc/dje/src/gcc/varasm.c:868
#4 0x101d305c in assemble_external (decl=0x30312f80)
at /gcc/dje/src/gcc/varasm.c:1635
#5 0x100ba0e4 in dfs_initialize_vtbl_ptrs (binfo=0x3030e4c0, data=0x3030e4c0)
at /gcc/dje/src/gcc/cp/init.c:722
#6 0x1030f548 in dfs_walk_real (binfo=0x3030e4c0,
prefn=@0x2002cef4: 0x100b9ff4 <dfs_initialize_vtbl_ptrs>, postfn=0,
qfn=@0x2002a978: 0x10313910 <unmarkedp>, data=0x30314390)
at /gcc/dje/src/gcc/cp/search.c:1641
The following example shows the alias set value causing the failure on AIX
appearing in memory restored by PCH:
Breakpoint 4, get_alias_set (t=0x3234e400) at /gcc/dje/src/gcc/alias.c:452
452 if (! flag_strict_aliasing || t == error_mark_node
(gdb) print t->type.alias_set
$1 = 7
(gdb) print &(t->type.alias_set)
$2 = (long long *) 0x3234e450
Breakpoint 5, gt_pch_restore (f=0xf01aec98)
at /gcc/dje/src/gcc/ggc-common.c:555
555 for (rt = gt_ggc_deletable_rtab; *rt; rt++)
(gdb) print *(long long *) 0x3234e450
Cannot access memory at address 0x3234e450
(gdb) finish
Run till exit from #0 gt_pch_restore (f=0xf01aec98)
at /gcc/dje/src/gcc/ggc-common.c:555
0x1039e7c4 in c_common_read_pch (pfile=0x2009b8f8,
name=0x200c1208 "/gcc/dje/build/powerpc-ibm-aix5.1.0.0-20040113/powerpc-ibm-
aix5.1.0.0/libstdc++-v3/include/powerpc-ibm-aix5.1.0.0/bits/stdc++.h",
fd=16384, orig_name=0x32309000 "1☼â\2001r\214")
at /gcc/dje/src/gcc/c-pch.c:388
388 gt_pch_restore (f);
(gdb) print *(long long *) 0x3234e450
$3 = 7
--
Summary: GGC PCH breaks aliasing
Product: gcc
Version: 3.4.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: critical
Priority: P1
Component: pch
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: dje at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org,geoffk at geoffk dot org
GCC build triplet: powerpc-ibm-aix5.1.0.0
GCC host triplet: powerpc-ibm-aix5.1.0.0
GCC target triplet: powerpc-ibm-aix5.1.0.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13689