This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug pch/13689] New: GGC PCH breaks aliasing


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&#9788;â\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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]