aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/init
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/g++.dg/init
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/init')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/addr-const1.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/aggr1.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/aggr10.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/aggr2.C46
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/aggr3.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/aggr4.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/aggr5.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/aggr6.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/aggr7.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/aggr8.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/aggr9.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array0.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array1.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array10.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array11.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array12.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array13.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array14.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array15.C46
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array16.C112
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array17.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array18.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array19.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array2.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array20.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array21.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array22.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array23.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array24.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array25.C49
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array26.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array27.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array28.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array3.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array30.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array31.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array32.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array33.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array34.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array35.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array36.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array37.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array4.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array5.C52
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array6.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array7.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array8.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/array9.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/assign1.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/attrib1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/bitfield1.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/bitfield2.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/bitfield3.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/bitfield4.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/bitfield5.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/brace1.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/brace2.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/brace3.C1
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/brace4.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/brace5.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/brace6.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/byval1.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/call1.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/cleanup1.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/cleanup2.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/cleanup3.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/complex1.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/const1.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/const2.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/const3.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/const4.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/const5.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/const6.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/const7.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/const8.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/const9.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/constant1.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/copy1.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/copy2.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/copy3.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/copy4.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/copy5.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/copy6.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor1.C57
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor10.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor11.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor2.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor3.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor4.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor5.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor6.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor7.C51
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor8.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ctor9.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/delete1.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/delete2.C55
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/dso_handle1.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/dso_handle2.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/dtor1.C43
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/dtor2.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/dtor3.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/dtor4.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/elide1.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/elide2.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/empty1.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/enum1.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/enum2.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/error1.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/error2.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/explicit1.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/float1.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/for1.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/for2.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/for3.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/global1.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/goto1.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/goto2.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/init-ref1.C45
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/init-ref2.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/init-ref3.C47
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/init-ref4.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/inline1.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/lifetime1.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/lifetime2.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/lifetime3.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/member1.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/mutable1.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new1.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new10.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new11.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new12.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new13.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new14.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new15.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new16.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new17.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new18.C45
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new19.C73
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new2.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new20.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new21.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new22.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new23.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new24.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new25.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new26.C44
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new27.C40
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new28.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new29.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new3.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new30.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new31.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new32.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new33.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new34.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new35.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new36.C153
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new37.C63
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new38.C54
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new39.C68
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new4.C1
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new40.C114
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new41.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new5.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new6.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new7.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new8.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/new9.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/no-elide1.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/null1.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/placement1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/placement2.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/placement3.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/placement4.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/placement5.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pm1.C88
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pm2.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pm3.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pmf1.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr20039.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr25811-3.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr25811-4.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr25811.C195
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr29043.C52
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr29571.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr42556.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr42844.C56
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr43719.C197
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr43890.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr44086.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr48859.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr55497.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr58811.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/pr60572.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn1.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn2.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn3.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem1.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem2.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem3.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem4.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref1.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref10.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref11.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref12.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref13.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref14.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref15.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref16.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref17.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref18.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref19.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref2.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref20.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref21.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref3.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref4.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref5.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref6.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref7.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref8.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/ref9.C36
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/reference1.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/reference2.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/reference3.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/save1.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/self1.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/static-init1.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/static-init2.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/static-init3.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/static1.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/static2.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/static3.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/static4.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/string1.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/struct1.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/struct2.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/struct3.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/switch1.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/synth1.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/synth2.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/synth3.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/synth4.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/uninitialized1.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/union1.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/union2.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/value1.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/value10.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/value2.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/value3.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/value4.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/value5.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/value6.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/value7.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/value8.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/value9.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/vbase1.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/vector1.C79
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/void1.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/volatile1.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/volatile2.C13
261 files changed, 5714 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/addr-const1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/addr-const1.C
new file mode 100644
index 000000000..3b4637a41
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/addr-const1.C
@@ -0,0 +1,38 @@
+// { dg-do run }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 19 Apr 2003 <nathan@codesourcery.com>
+
+// PR 9881. address-constant-expression not static initialized
+
+struct bar {
+ double p;
+}; // bar
+
+bar v;
+static bool error = false;
+
+struct foo {
+ static double *a;
+ static double *b;
+ static double storage;
+};
+
+struct baz {
+ baz () {
+ if (foo::a != &v.p)
+ error = true;
+ if (foo::b != &foo::storage)
+ error = true;
+ }
+};
+
+baz f; // Get constructor to run before any other non-static initializers
+
+double *foo::a = &(((bar *)(&v))->p);
+double *foo::b = &(((bar *)(&foo::storage))->p);
+double foo::storage = 0.0;
+
+int main() {
+ return error;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/aggr1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr1.C
new file mode 100644
index 000000000..c63f0b02c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr1.C
@@ -0,0 +1,19 @@
+// Test that initializing an aggregate with complex copy constructor
+// and assignment ops doesn't cause cp_expr_size to abort.
+
+struct A
+{
+ A();
+ A(const A&);
+ A& operator=(const A&);
+};
+
+struct B
+{
+ A a;
+};
+
+int main ()
+{
+ B b = { A() };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/aggr10.C b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr10.C
new file mode 100644
index 000000000..e494e20a3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr10.C
@@ -0,0 +1,6 @@
+// PR c++/59886
+
+struct A { A (); ~A (); };
+struct B { A b[4]; };
+struct C { B c[5]; };
+const C e = {};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/aggr2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr2.C
new file mode 100644
index 000000000..97dbeb619
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr2.C
@@ -0,0 +1,46 @@
+// PR c++/15172
+// { dg-do run }
+
+extern "C" int printf (const char *, ...);
+extern "C" void abort ();
+
+struct A {
+ static A* p;
+
+ A() { p = this; }
+ A(const A&);
+ ~A() { if (this != p) abort (); }
+ void print () { }
+};
+
+A* A::p;
+
+struct B {
+ A a;
+};
+
+B b = { A () };
+
+struct A2 {
+ static A2* p;
+
+ A2() { p = this; }
+ A2(const A2&);
+ ~A2() { if (this != p) abort (); }
+ void print () { }
+};
+
+A2* A2::p;
+
+struct B2 {
+ A2 a2;
+};
+
+int main () {
+ b.a.print ();
+ {
+ B2 b2 = { A2() };
+ b2.a2.print ();
+ }
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/aggr3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr3.C
new file mode 100644
index 000000000..3376897e1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr3.C
@@ -0,0 +1,16 @@
+// PR c++/18793
+
+struct S {
+ S();
+ S(const S&);
+ void operator=(const S&);
+};
+
+struct X {
+ int a, b, c, d, e;
+ S s;
+};
+
+void foobar () {
+ X x = {0};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/aggr4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr4.C
new file mode 100644
index 000000000..7120e68cd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr4.C
@@ -0,0 +1,7 @@
+struct A
+{
+ int i;
+};
+
+A a1 = { 1 }; // ok
+A a2 = { a1 }; // { dg-error "cannot convert" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/aggr5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr5.C
new file mode 100644
index 000000000..c1844f8ff
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr5.C
@@ -0,0 +1,11 @@
+// Origin PR c++/40239
+// { dg-do compile }
+
+struct B { B() { } private: B(B const&); };
+struct A { int a; B b; };
+
+int
+main()
+{
+ A a = {0};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/aggr6.C b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr6.C
new file mode 100644
index 000000000..98628d255
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr6.C
@@ -0,0 +1,11 @@
+// Origin PR c++/40239
+// { dg-do compile }
+
+struct B { B() { } private: B(B const&); };
+struct A { int a; B b; };
+
+int
+main()
+{
+ A a = {};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/aggr7.C b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr7.C
new file mode 100644
index 000000000..bec952c23
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr7.C
@@ -0,0 +1,13 @@
+// PR c++/50866
+
+struct A { A(); ~A(); };
+struct B { B(const char *, const A& = A()); ~B(); };
+struct C {
+ B b1, b2;
+};
+void f()
+{
+ C c = {
+ "a","b"
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/aggr8.C b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr8.C
new file mode 100644
index 000000000..7e6edc9ad
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr8.C
@@ -0,0 +1,19 @@
+// PR c++/51009
+
+struct A
+{
+ ~A();
+};
+
+struct B
+{
+ A a;
+ B(const A& = A());
+};
+
+struct C
+{
+ B b1, b2;
+};
+
+C c = {};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/aggr9.C b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr9.C
new file mode 100644
index 000000000..67d829912
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/aggr9.C
@@ -0,0 +1,9 @@
+// PR c++/53661
+
+enum Code {
+ SUCCESS = 0
+};
+
+Code a;
+
+int r[] = {a};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array0.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array0.C
new file mode 100644
index 000000000..235cdf0de
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array0.C
@@ -0,0 +1,12 @@
+// { dg-do compile }
+// { dg-options "" }
+// PR C++/24138
+
+void foo()
+{
+ typedef struct {
+ unsigned char dir;
+ int data[0];
+ } yanito;
+ static const yanito horse = { 1, { 2, 3 } }; // { dg-error "too many" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array1.C
new file mode 100644
index 000000000..5847247c1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array1.C
@@ -0,0 +1,26 @@
+// Test that completing an array declared with a typedef doesn't change
+// the typedef.
+
+// { dg-do run }
+
+typedef int iArr[];
+
+const iArr array4={
+ 1, 2, 3, 4
+};
+
+const iArr array3={
+ 1, 2, 3
+};
+
+const iArr array5={
+ 1, 2, 3, 4, 5
+};
+
+int main()
+{
+ if (sizeof (array4)/sizeof (array4[0]) != 4
+ || sizeof (array3)/sizeof (array3[0]) != 3
+ || sizeof (array5)/sizeof (array5[0]) != 5)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array10.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array10.C
new file mode 100644
index 000000000..41121055e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array10.C
@@ -0,0 +1,6 @@
+// { dg-do compile }
+// { dg-options "" }
+
+typedef int __attribute__((vector_size (8))) vec;
+
+vec foo[] = { (vec) {1, 2} };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array11.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array11.C
new file mode 100644
index 000000000..e52effe9f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array11.C
@@ -0,0 +1,28 @@
+/* PR 11665
+ Orgin: jwhite@cse.unl.edu
+ The problem was in initializer_constant_valid_p,
+ "for a CONSTRUCTOR, only the last element
+ of the CONSTRUCTOR was being checked"
+ (from the email of the patch which fixed this).
+ This used to ICE because GCC thought gdt_table was a
+ constant value when it is not. */
+
+int x;
+
+typedef __SIZE_TYPE__ size_t;
+
+struct gdt
+{
+size_t a,b,c,d,e,f;
+};
+void f()
+{
+struct gdt gdt_table[2]=
+{
+ {
+ 0,
+ ( (((size_t)(&x))<<(24))&(-1<<(8)) ),
+ },
+};
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array12.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array12.C
new file mode 100644
index 000000000..3bb480029
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array12.C
@@ -0,0 +1,28 @@
+// PR c++/12253
+// Bug: We were failing to destroy the temporary A passed to the
+// constructor for b[0] before going on to construct b[1].
+
+// { dg-do run }
+
+extern "C" int printf (const char *, ...);
+
+int c;
+int r;
+
+struct A
+{
+ A() { printf ("A()\n"); if (c++) r = 1; }
+ A(const A&) { printf ("A(const A&)\n"); ++c; }
+ ~A() { printf ("~A()\n"); --c; }
+};
+
+struct B
+{
+ B(int, const A& = A()) { printf ("B()\n"); }
+};
+
+int main()
+{
+ B b[] = { 0, 0 };
+ return r;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array13.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array13.C
new file mode 100644
index 000000000..aa66e33ac
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array13.C
@@ -0,0 +1,9 @@
+template <typename DisjointSet>
+struct test_disjoint_set {
+ static void do_test()
+ {
+ unsigned int elts[]
+ = { 0, 1, 2, 3 };
+ const int N = sizeof(elts)/sizeof(*elts);
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array14.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array14.C
new file mode 100644
index 000000000..847bd1f20
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array14.C
@@ -0,0 +1,21 @@
+// PR c++/12883
+// Bug: Destructor of array object not called if no prior
+// instantiation of the template has happened.
+
+// { dg-do run }
+
+int ret = 1;
+
+template <int> struct X
+{
+ X(int) { }
+ ~X() { ret = 0; }
+};
+
+int main()
+{
+ {
+ X<0> array[] = { 0 };
+ }
+ return ret;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array15.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array15.C
new file mode 100644
index 000000000..17160d076
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array15.C
@@ -0,0 +1,46 @@
+// { dg-do run }
+
+// Copyright (C) 2004 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 8 Dec 2004 <nathan@codesourcery.com>
+
+// PR 16681 too much memory used
+// Origin: Matt LaFary <lafary@activmedia.com>
+
+struct foo {
+ unsigned char buffer[4111222];
+ foo() ;
+ bool check () const;
+};
+
+foo::foo ()
+ : buffer()
+{}
+
+bool foo::check () const
+{
+ for (unsigned ix = sizeof (buffer); ix--;)
+ if (buffer[ix])
+ return false;
+ return true;
+}
+
+void *operator new (__SIZE_TYPE__ size, void *p)
+{
+ return p;
+}
+
+char heap[5000000];
+
+int main ()
+{
+ for (unsigned ix = sizeof (heap); ix--;)
+ heap[ix] = ix;
+
+ foo *f = new (heap) foo ();
+
+ if (!f->check ())
+ return 1;
+ return 0;
+}
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array16.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array16.C
new file mode 100644
index 000000000..188d1a84f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array16.C
@@ -0,0 +1,112 @@
+// Causes timeout for the MMIX simulator on a 3GHz P4 and we can't
+// have "compile" for some targets and "run" for others.
+// { dg-do run { target { ! mmix-*-* } } }
+// { dg-options "-mstructure-size-boundary=8" { target arm*-*-* } }
+
+// Copyright (C) 2004 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 8 Dec 2004 <nathan@codesourcery.com>
+
+// PR 16681 too much memory used
+// Origin: Matt LaFary <lafary@activmedia.com>
+
+// NOTE: This test assumes that 4M instances of struct ELT can fit into
+// a 5MB array. This isn't true, e.g., with the default
+// arm-none-elf options.
+
+struct elt
+{
+ static int count;
+ static elt*ptr;
+ static int abort;
+ char c;
+
+ elt ();
+ ~elt ();
+
+};
+
+int elt::count;
+elt *elt::ptr;
+int elt::abort;
+
+elt::elt ()
+ :c ()
+{
+ if (count >= 0)
+ {
+ if (!ptr)
+ ptr = this;
+ if (count == 100)
+ throw 2;
+ if (this != ptr)
+ abort = 1;
+ count++;
+ ptr++;
+ }
+}
+
+elt::~elt ()
+{
+ if (count >= 0)
+ {
+ ptr--;
+ count--;
+ if (ptr != this)
+ abort = 2;
+ }
+}
+
+struct foo {
+ elt buffer[4111222];
+ foo() ;
+ bool check () const;
+};
+
+foo::foo ()
+ : buffer()
+{}
+
+bool foo::check () const
+{
+ for (unsigned ix = sizeof (buffer)/ sizeof (buffer[0]); ix--;)
+ if (buffer[ix].c)
+ return false;
+ return true;
+}
+
+void *operator new (__SIZE_TYPE__ size, void *p)
+{
+ return p;
+}
+
+char heap[5000000];
+
+int main ()
+{
+ for (unsigned ix = sizeof (heap); ix--;)
+ heap[ix] = ix;
+
+ try
+ {
+ foo *f = new (heap) foo ();
+ return 1;
+ }
+ catch (...)
+ {
+ if (elt::count)
+ return 2;
+ if (elt::abort)
+ return elt::abort + 3;
+ }
+
+ for (unsigned ix = sizeof (heap); ix--;)
+ heap[ix] = ix;
+
+ elt::count = -1;
+ foo *f = new (heap) foo ();
+ if (!f->check ())
+ return 3;
+ return 0;
+}
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array17.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array17.C
new file mode 100644
index 000000000..4240f7193
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array17.C
@@ -0,0 +1,8 @@
+// { dg-do compile }
+
+
+class StringMap {
+ const char empty_str[1];
+public:
+ StringMap() : empty_str() {}
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array18.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array18.C
new file mode 100644
index 000000000..154d03fcf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array18.C
@@ -0,0 +1,22 @@
+// PR c++/20142
+// { dg-do run }
+
+int n=4;
+
+struct A
+{
+ A() {}
+ A& operator= (const A&) { --n; return *this; }
+};
+
+struct B
+{
+ A x[2][2];
+};
+
+int main()
+{
+ B b;
+ b = b;
+ return n;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array19.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array19.C
new file mode 100644
index 000000000..a5f124e21
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array19.C
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "" }
+double a[0] = { };
+const double b[0][1] = { };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array2.C
new file mode 100644
index 000000000..ca03ff39c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array2.C
@@ -0,0 +1,8 @@
+// Check that the type of an array is set correctly when flat initializers
+// are used.
+
+// { dg-do compile }
+
+struct s { int a; int b; };
+struct s x[] = { 1, 2, 3, 4 };
+int y[sizeof (x) == 2 * sizeof (x[0])? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array20.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array20.C
new file mode 100644
index 000000000..06a167596
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array20.C
@@ -0,0 +1,5 @@
+// PR c++/27385
+
+struct A {};
+A a[] = { 0 }; // { dg-error "initializer" }
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array21.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array21.C
new file mode 100644
index 000000000..fc6abab55
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array21.C
@@ -0,0 +1,7 @@
+// PR c++/27722
+
+void foo()
+{
+ const int x[] = 0; // { dg-error "initializer" }
+ ++x; // { dg-error "read-only|operand" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array22.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array22.C
new file mode 100644
index 000000000..0c5bb33da
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array22.C
@@ -0,0 +1,6 @@
+// PR C++/29002
+// We ICE trying to set the "zero" initializer on the incomplete
+// array
+
+struct A {};
+int A::* x[]; // { dg-error "size" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array23.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array23.C
new file mode 100644
index 000000000..80ffb0a98
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array23.C
@@ -0,0 +1,6 @@
+// PR C++/29002
+// We ICE trying to set the "zero" initializer on the incomplete
+// array
+
+struct A {A();int A::* t;};
+A x[]; // { dg-error "size" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array24.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array24.C
new file mode 100644
index 000000000..2d72df403
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array24.C
@@ -0,0 +1,7 @@
+// PR c++/29175
+// { dg-options "-Wno-vla" }
+
+void foo(int i)
+{
+ int x[][i] = { 0 };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array25.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array25.C
new file mode 100644
index 000000000..1ab2725d7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array25.C
@@ -0,0 +1,49 @@
+// related to PR c++/38233
+// test for value-init of a member array
+// { dg-do run }
+
+struct elt
+{
+ virtual void f();
+ char c;
+};
+
+void elt::f() { }
+
+struct foo {
+ elt buffer[500];
+ foo() ;
+ bool check () const;
+};
+
+foo::foo ()
+ : buffer()
+{}
+
+bool foo::check () const
+{
+ for (unsigned ix = sizeof (buffer)/ sizeof (buffer[0]); ix--;)
+ if (buffer[ix].c)
+ return false;
+ return true;
+}
+
+inline void *operator new (__SIZE_TYPE__ size, void *p)
+{
+ return p;
+}
+
+char heap[sizeof(elt[500])];
+
+int main ()
+{
+ for (unsigned ix = sizeof (heap); ix--;)
+ heap[ix] = ix;
+
+ foo *f = new (heap) foo ();
+ if (!f->check ())
+ return 3;
+ return 0;
+}
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array26.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array26.C
new file mode 100644
index 000000000..f8f3c3743
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array26.C
@@ -0,0 +1,11 @@
+// PR c++/42058
+// { dg-options "" }
+
+struct A;
+
+struct B
+{
+ A a; // { dg-error "incomplete type" }
+};
+
+B b[1] = (B[]) { 0 };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array27.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array27.C
new file mode 100644
index 000000000..988501545
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array27.C
@@ -0,0 +1,11 @@
+// PR c++/42058
+// { dg-options "" }
+
+struct A {};
+
+struct B
+{
+ A a;
+};
+
+B b[1] = (B[]) { 0 }; // { dg-error "initializer" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array28.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array28.C
new file mode 100644
index 000000000..8cf19ba43
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array28.C
@@ -0,0 +1,7 @@
+// PR c++/49669
+
+struct Foo { explicit Foo(int) { } };
+struct Goo {
+ Goo() : x(Foo(4), Foo(5)) { } // { dg-error "array" }
+ Foo x[2];
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array3.C
new file mode 100644
index 000000000..700b26389
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array3.C
@@ -0,0 +1,23 @@
+// PR c++/6331
+// Bug: we were generating a badly cv-qualified ARRAY_TYPE in the
+// synthesized copy constructor for A, which then became the canonical
+// version, confusing later uses.
+
+struct A {
+ virtual ~A();
+ const float* f();
+ float fa[3];
+};
+
+struct B {
+ B(const A& ai) : a (ai) {}
+ A a;
+};
+
+void g (const float pos[3]);
+
+extern A& a;
+void h()
+{
+ g (a.f());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array30.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array30.C
new file mode 100644
index 000000000..696d9bf99
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array30.C
@@ -0,0 +1,7 @@
+// PR c++/54501
+// { dg-options "" }
+
+int main()
+{
+ int a[][0] = {0}; // { dg-error "too many" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array31.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array31.C
new file mode 100644
index 000000000..9bb66a595
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array31.C
@@ -0,0 +1,10 @@
+// PR c++/54501
+// { dg-options "" }
+
+struct A
+{
+ int i[0];
+ int j;
+};
+
+struct A a = { 1 };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array32.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array32.C
new file mode 100644
index 000000000..06b27a94a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array32.C
@@ -0,0 +1,7 @@
+// PR c++/42315
+
+extern int x[];
+
+int i = x[0];
+
+int x[] = 0; // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array33.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array33.C
new file mode 100644
index 000000000..4440d3d54
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array33.C
@@ -0,0 +1,22 @@
+// PR c++/55804
+// { dg-do run }
+
+int t = 0;
+template <typename> struct vector {
+ vector() { t++; }
+};
+
+typedef vector<int> Arrays[1];
+class C
+{
+ vector<int> v_;
+ void Foo(const Arrays &);
+};
+Arrays a;
+
+int main(void)
+{
+ if (t!=1)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array34.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array34.C
new file mode 100644
index 000000000..1c2e022e5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array34.C
@@ -0,0 +1,15 @@
+// PR c++/53650
+// We should loop over array inits if they don't involve temporaries
+// that need extending.
+// { dg-options "-fdump-tree-gimple" }
+// { dg-final { scan-tree-dump-times "Class::Class" 1 "gimple" } }
+// { dg-final { cleanup-tree-dump "gimple" } }
+
+struct Class {
+ Class();
+};
+
+int main() {
+ Class table [10] = {};
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array35.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array35.C
new file mode 100644
index 000000000..6ce6d5cc9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array35.C
@@ -0,0 +1,3 @@
+// PR c++/58868
+
+static struct { const int i; } a[] = { 1 };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array36.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array36.C
new file mode 100644
index 000000000..77e4f9091
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array36.C
@@ -0,0 +1,8 @@
+// PR c++/60224
+
+struct A {};
+
+void foo()
+{
+ bool b[] = (int (A::*)())0; // { dg-error "" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array37.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array37.C
new file mode 100644
index 000000000..a909a18dd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array37.C
@@ -0,0 +1,14 @@
+struct A
+{
+ int i;
+ A(int);
+};
+
+struct B
+{
+ virtual void f();
+ A ar[3];
+};
+
+extern B b;
+B b2(b);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array4.C
new file mode 100644
index 000000000..67519bf7c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array4.C
@@ -0,0 +1,27 @@
+// { dg-do compile }
+// Origin: Markus Breuer <markus.breuer@materna.de>
+
+// PR c++/6944
+// Fail to synthesize copy constructor of multi-dimensional
+// array of class.
+
+#include <string>
+
+class Array
+{
+public:
+ std::string m_array[10][20][30];
+};
+
+Array func()
+{
+ Array result;
+ return result; // sorry, not implemented: cannot initialize multi-dimensional array with initializer
+}
+
+
+int main()
+{
+ Array arr = func();
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array5.C
new file mode 100644
index 000000000..aeacb31cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array5.C
@@ -0,0 +1,52 @@
+// { dg-do run }
+// Copyright (C) 2002 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+// Incorrect construction and destruction of multi-dimensional
+// array of class.
+
+extern "C" void abort();
+extern "C" int printf(const char *, ...);
+
+int count;
+int num;
+
+struct A
+{
+ A()
+ {
+ if (count == num)
+ throw "";
+ count++;
+#ifdef PRINT
+ printf("ctor %p\n", static_cast<void *>(this));
+#endif
+ }
+
+ ~A()
+ {
+ count--;
+#ifdef PRINT
+ printf("dtor %p\n", static_cast<void *>(this));
+#endif
+ }
+};
+
+struct Array
+{
+ A array[2][2][2];
+};
+
+int main()
+{
+ for (num = 0; num <= 8; ++num) {
+ count = 0;
+ try {
+ Array A;
+ }
+ catch (...) {
+ }
+ if (count != 0)
+ abort();
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array6.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array6.C
new file mode 100644
index 000000000..6181d02bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array6.C
@@ -0,0 +1,7 @@
+// { dg-do compile }
+
+char arr [][4] = { "one", "two" };
+const char arr2[][4] = { "one", "two" };
+signed char arr3[][4] = { "one", "two" };
+const unsigned char arr4[][4] = { "one", "two" };
+volatile wchar_t arr5[][4] = { L"one", L"two" };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array7.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array7.C
new file mode 100644
index 000000000..23c6a7098
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array7.C
@@ -0,0 +1,15 @@
+struct S {
+ virtual void v () {}
+ void f (const float g[3]);
+ float h[3];
+};
+
+void g () {
+ S s1, s2;
+ s1 = s2;
+}
+
+void S::f (const float g[3]) {}
+
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array8.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array8.C
new file mode 100644
index 000000000..5f28ca490
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array8.C
@@ -0,0 +1,12 @@
+struct A {
+ A ();
+};
+
+struct B {
+ A a1;
+ A a2;
+};
+
+A a;
+
+struct B b[] = { { a, a }, { a, a } };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/array9.C b/gcc-4.9/gcc/testsuite/g++.dg/init/array9.C
new file mode 100644
index 000000000..d37e00e5b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/array9.C
@@ -0,0 +1,9 @@
+struct T {
+ T ();
+};
+
+void f () {
+ T t[2];
+ for (int i = 0; i < 10; ++i);
+ int i = 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/assign1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/assign1.C
new file mode 100644
index 000000000..690a48191
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/assign1.C
@@ -0,0 +1,30 @@
+// PR c++/13009
+// { dg-do run }
+
+struct A {
+ char a;
+};
+
+struct B: public virtual A {
+ #if 0 // this piece of code works around the problem
+ B& operator= (const B& other)
+ {
+ A::operator= (other);
+ }
+ #endif
+};
+
+struct C: public B {
+ char c;
+};
+
+int main() {
+ B b;
+ b.a = 'b';
+ C c;
+ c.a = c.c = 'c';
+
+ c.B::operator= (b);
+ if (c.a != 'b' || c.c != 'c')
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/attrib1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/attrib1.C
new file mode 100644
index 000000000..839e4ce21
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/attrib1.C
@@ -0,0 +1,10 @@
+// { dg-do run }
+
+void f() __attribute((__constructor__));
+int i;
+void f() { i = 1; }
+
+int main(int, char **)
+{
+ return 1-i;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield1.C
new file mode 100644
index 000000000..70a06d0e1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield1.C
@@ -0,0 +1,24 @@
+// Check that we handle bitfields as complex lvalues properly.
+
+struct A
+{
+ int i: 2;
+ int j: 2;
+ int k: 2;
+};
+
+A a, a2;
+bool b;
+void f ();
+
+int main ()
+{
+ (f(), a.j) = 1;
+ (f(), a).j = 2; // { dg-warning "overflow" }
+ (b ? a.j : a2.k) = 3; // { dg-warning "overflow" }
+ (b ? a : a2).j = 0;
+ ++(a.j) = 1;
+ (a.j = 2) = 3; // { dg-warning "overflow" }
+}
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield2.C
new file mode 100644
index 000000000..e54b2e423
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield2.C
@@ -0,0 +1,33 @@
+// PR c++/13371
+// Bug: We were failing to properly protect the lhs on the line marked
+// "here" from multiple evaluation.
+
+// { dg-do run }
+
+extern "C" int printf (const char *, ...);
+
+enum E { E1, E2 };
+
+struct A
+{
+ E e : 8;
+ unsigned char c;
+};
+
+A ar[2];
+
+int c;
+
+int f()
+{
+ ++c;
+ printf ("f()\n");
+ return 0;
+}
+
+int main()
+{
+ ar[0].c = 0xff;
+ ar[f()].e = E1; // here
+ return (c != 1 || ar[0].c != 0xff);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield3.C
new file mode 100644
index 000000000..23db2d4a3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield3.C
@@ -0,0 +1,11 @@
+// PR c++/43663
+
+struct S
+{
+ S(): i(0) {}
+ int i : 3;
+};
+
+S s;
+
+const int& cr(s.i);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield4.C
new file mode 100644
index 000000000..30041c435
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield4.C
@@ -0,0 +1,24 @@
+// PR c++/56235
+
+struct A
+{
+ A (const A &);
+};
+
+struct B
+{
+ A a;
+ enum Mode { };
+ Mode m:8;
+};
+
+struct C
+{
+ C();
+ B b;
+};
+
+C fn()
+{
+ return C();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield5.C
new file mode 100644
index 000000000..58f686d9c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/bitfield5.C
@@ -0,0 +1,12 @@
+// PR c++/51219
+
+struct A
+{
+ int i;
+ int : 8;
+};
+
+void foo()
+{
+ A a = { 0 };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/brace1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/brace1.C
new file mode 100644
index 000000000..a819fa258
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/brace1.C
@@ -0,0 +1,4 @@
+// { dg-do compile }
+
+int i[4] = { { 3 } }; // { dg-error "brace" }
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/brace2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/brace2.C
new file mode 100644
index 000000000..50dc48139
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/brace2.C
@@ -0,0 +1,8 @@
+// { dg-do compile }
+// [dcl.init] paragraph 13.
+int x = { 2 };
+const char * y = { "hello" };
+int a = 2;
+int b = { 2,3 }; // { dg-error "requires one element in initializer" }
+int c = { { 2 } } ; // { dg-error "braces around scalar initializer" }
+int d = {}; // { dg-error "initializer" "" { target { ! c++11 } } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/brace3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/brace3.C
new file mode 100644
index 000000000..0a1ee8f00
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/brace3.C
@@ -0,0 +1 @@
+int array[2][1] = { {0} {1} }; // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/brace4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/brace4.C
new file mode 100644
index 000000000..0c3790193
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/brace4.C
@@ -0,0 +1,5 @@
+// PR c++/16859
+// { dg-do compile }
+// { dg-options "-pedantic" }
+
+int a[] = { }; // { dg-error "zero-size array" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/brace5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/brace5.C
new file mode 100644
index 000000000..696bbd676
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/brace5.C
@@ -0,0 +1,7 @@
+// PR c++/27491
+// { dg-do compile }
+// { dg-options "" }
+
+int i = (int) { 0 };
+int j = (int) { i };
+int k = (int) { k };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/brace6.C b/gcc-4.9/gcc/testsuite/g++.dg/init/brace6.C
new file mode 100644
index 000000000..0fa818c80
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/brace6.C
@@ -0,0 +1,25 @@
+/* PR c++/30759 */
+/* { dg-do compile } */
+
+struct A {
+ A(int) { }
+};
+
+struct B {
+ B(const B&);
+ int b;
+};
+
+struct C {};
+
+struct D { int c; };
+
+int main()
+{
+ int i = { 1 };
+ int j = { 1, 2 }; /* { dg-error "requires one element" } */
+ A a = { 6 }; /* { dg-error "initialize" "" { target { ! c++11 } } } */
+ B b = { 6 }; /* { dg-error "" } */
+ C c = { 6 }; /* { dg-error "too many initializers" } */
+ D d = { 6 };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/byval1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/byval1.C
new file mode 100644
index 000000000..86c6e4683
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/byval1.C
@@ -0,0 +1,31 @@
+// PR c++/3948
+// Test that the destructor call for a value parameter gets the
+// right address.
+
+// { dg-do run }
+
+void *p[2];
+int i;
+int r;
+
+struct C
+{
+ int m;
+
+ C() { p[i++] = this; }
+ ~C() { if (p[--i] != this) r = 1; }
+};
+
+
+void Foo (C c)
+{
+ p[i++] = &c;
+}
+
+int main ()
+{
+ C c;
+
+ Foo (c);
+ return r;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/call1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/call1.C
new file mode 100644
index 000000000..d44b6dddc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/call1.C
@@ -0,0 +1,35 @@
+// Bug c++/16115
+// { dg-options "-O2" }
+
+extern "C" void abort();
+
+int count = 0;
+
+struct T {
+ T() { count++; }
+ T(const T&) { count++; }
+ ~T() { if (count==0) abort(); --count; }
+};
+
+struct auto_ptr {
+ T* p;
+
+ auto_ptr(T* __p) : p(__p) { }
+ ~auto_ptr() { delete p; }
+
+ T* release() {
+ T* t = p;
+ p = 0;
+ return t;
+ }
+};
+
+void destroy (auto_ptr a) {
+ delete a.release();
+}
+
+
+int main ()
+{
+ destroy (new T);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/cleanup1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/cleanup1.C
new file mode 100644
index 000000000..517af15c6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/cleanup1.C
@@ -0,0 +1,16 @@
+// PR c++/13033
+
+// We failed to treat the for increment expression as a full-expression,
+// which broke gimplification.
+
+struct QDomNode {
+ virtual ~QDomNode();
+ QDomNode nextSibling() const;
+ bool isNull() const;
+};
+
+void processNode(QDomNode n)
+{
+ for (; !n.isNull(); n = n.nextSibling())
+ ;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/cleanup2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/cleanup2.C
new file mode 100644
index 000000000..e62364be1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/cleanup2.C
@@ -0,0 +1,19 @@
+// PR c++/12526
+
+// We decided that the call to strcmp has no side-effects because strcmp is
+// pure, even though the first argument has side-effects. As a result, we
+// stripped the CLEANUP_POINT_EXPR. Hilarity ensued.
+
+extern "C" int strcmp (const char *, const char *);
+
+struct A {
+ A(int);
+ const char *str();
+ ~A();
+};
+
+void printQueryI()
+{
+ if(!strcmp(A(1).str(), "foo"))
+ { }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/cleanup3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/cleanup3.C
new file mode 100644
index 000000000..da7e411ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/cleanup3.C
@@ -0,0 +1,22 @@
+// Check that on targets with "__cxa_atexit" we use destructors,
+// rather than cleanup functions, to destroy objects with static
+// storage duration.
+
+// { dg-require-effective-target "cxa_atexit" }
+// Cleanup functions generated by G++ have the "_tcf" prefix.
+// { dg-final { scan-assembler-not "_tcf" } }
+
+struct S {
+ ~S();
+};
+
+struct T {
+ S s;
+};
+
+S s;
+T t;
+
+void f() {
+ static S s;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/complex1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/complex1.C
new file mode 100644
index 000000000..3f88fd902
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/complex1.C
@@ -0,0 +1,7 @@
+/* PR c++/21210 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+typedef float __complex__ fcomplex;
+fcomplex cplx = fcomplex();
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/const1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/const1.C
new file mode 100644
index 000000000..af4427d9a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/const1.C
@@ -0,0 +1,8 @@
+// PR c++/20073
+
+template<int> struct A
+{
+ A();
+};
+
+const A<0> x[] = { A<0>() };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/const2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/const2.C
new file mode 100644
index 000000000..4fd631851
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/const2.C
@@ -0,0 +1,7 @@
+// PR c++/19878
+
+struct S {
+ char k;
+};
+char const volatile S::* const p01 = &S::k;
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/const3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/const3.C
new file mode 100644
index 000000000..96cb6f909
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/const3.C
@@ -0,0 +1,12 @@
+// { dg-do run }
+
+struct S {
+ static const int i = 3;
+};
+
+const int S::i;
+
+int main () {
+ if (!S::i)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/const4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/const4.C
new file mode 100644
index 000000000..b99726b86
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/const4.C
@@ -0,0 +1,8 @@
+// PR c++/27804
+// { dg-do compile }
+
+bool foo()
+{
+ const int i = X; // { dg-error "not declared" }
+ return i > 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/const5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/const5.C
new file mode 100644
index 000000000..fa8d8fc23
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/const5.C
@@ -0,0 +1,11 @@
+// PR c++/31449
+
+class Foo {};
+class Bar : public Foo {};
+static const Foo *foo = 0;
+
+static Bar *bar = static_cast<const Bar*>(foo); // { dg-error "conversion" }
+
+void func(const Foo *foo) {
+ Bar *bar = static_cast<const Bar*>(foo); // { dg-error "conversion" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/const6.C b/gcc-4.9/gcc/testsuite/g++.dg/init/const6.C
new file mode 100644
index 000000000..e626bfeac
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/const6.C
@@ -0,0 +1,27 @@
+// PR c++/36688
+// { dg-do run }
+// { dg-options "-O2" }
+
+struct S
+{
+ long long a;
+ long long b;
+ long long c;
+};
+
+struct T
+{
+ S g;
+ long long h[12];
+};
+
+static const S s = { 1, 2, 3 };
+static const T t = { s, 0 };
+
+int
+main ()
+{
+ T x = t;
+ if (__builtin_memcmp (&x, &t, sizeof (T)))
+ __builtin_abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/const7.C b/gcc-4.9/gcc/testsuite/g++.dg/init/const7.C
new file mode 100644
index 000000000..18d04625d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/const7.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "-fdump-tree-gimple" }
+
+struct s { int x, y; };
+short offsets[1] = {
+ ((char*) &(((struct s*)16)->y) - (char *)16),
+};
+
+// This ensures that we get a dump whether or not the bug is present.
+void fn() { }
+
+// { dg-final { scan-tree-dump-not "initialization" "gimple" } }
+// { dg-final { cleanup-tree-dump "gimple" } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/const8.C b/gcc-4.9/gcc/testsuite/g++.dg/init/const8.C
new file mode 100644
index 000000000..4eb293d65
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/const8.C
@@ -0,0 +1,11 @@
+// DR 234 - it should be OK to leave off the initializer of a const
+// variable if the default constructor fully initializes the object.
+
+struct A { };
+const A a;
+
+struct B { A a; };
+const B b;
+
+struct C { virtual void f(); };
+const C c;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/const9.C b/gcc-4.9/gcc/testsuite/g++.dg/init/const9.C
new file mode 100644
index 000000000..ba1dfd4bc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/const9.C
@@ -0,0 +1,12 @@
+// PR c++/55893
+// { dg-final { scan-assembler-not "rodata" } }
+
+struct foo
+{
+ virtual ~foo ();
+};
+
+int main ()
+{
+ static const foo tmp;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/constant1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/constant1.C
new file mode 100644
index 000000000..386b92610
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/constant1.C
@@ -0,0 +1,17 @@
+// PR c++/51554
+
+typedef unsigned char uint8;
+typedef unsigned int uint32;
+
+const uint32 XX[] = { 1, 3, 7 };
+
+const uint8 V[] = {
+ *(((const uint8*)&XX[0]) + 0),
+ *(((const uint8*)&XX[0]) + 1),
+ *(((const uint8*)&XX[0]) + 2),
+ *(((const uint8*)&XX[0]) + 3),
+ *(((const uint8*)&XX[1]) + 0),
+ *(((const uint8*)&XX[1]) + 1),
+ *(((const uint8*)&XX[1]) + 2),
+ *(((const uint8*)&XX[1]) + 3),
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/copy1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/copy1.C
new file mode 100644
index 000000000..91a84ae3e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/copy1.C
@@ -0,0 +1,21 @@
+// { dg-do compile }
+
+class A {
+public:
+ A(){}
+ A( const A& a ){}
+};
+
+class B : public A
+{
+public:
+ B( int& s) : s_(s){}
+ int& s_;
+};
+
+int main()
+{
+ int i;
+ B x1( i );
+ B x2( x1 );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/copy2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/copy2.C
new file mode 100644
index 000000000..9a662d4cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/copy2.C
@@ -0,0 +1,5 @@
+// { dg-do compile }
+
+struct S { S (); };
+
+volatile S s[1] = { S () };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/copy3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/copy3.C
new file mode 100644
index 000000000..fa6a6ea18
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/copy3.C
@@ -0,0 +1,16 @@
+// { dg-do run }
+// { dg-options "-fno-elide-constructors" }
+
+int copies;
+
+struct S {
+ S () {}
+ S (const S&) { ++copies; }
+};
+
+S s[1] = { S () };
+
+int main () {
+ if (copies != 1)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/copy4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/copy4.C
new file mode 100644
index 000000000..bfff68566
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/copy4.C
@@ -0,0 +1,19 @@
+// PR c++/9342
+// We were failing to wrap def().user in a TARGET_EXPR, so copying it
+// into the reference temp used a bitwise copy.
+
+struct QString
+{
+ QString( const QString & );
+ QString &operator=( const QString & );
+};
+struct ServerSettings
+{
+ QString user;
+};
+extern ServerSettings def();
+extern void arg( const QString& a );
+void startSession( bool b, QString s )
+{
+ arg (b ? def().user : s);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/copy5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/copy5.C
new file mode 100644
index 000000000..cef5a2950
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/copy5.C
@@ -0,0 +1,29 @@
+// { dg-options "-O2" }
+
+struct BOOL {
+ int nVal:1, bSet:1;
+ BOOL (int i) : nVal(i!=0), bSet(1) {}
+};
+struct Fill {
+ void *d;
+ Fill() : d(0) {}
+ Fill( const Fill& ) {}
+};
+struct SvMetaSlot {
+ Fill aGroupId;
+ BOOL a8;
+ SvMetaSlot() :
+ a8(1) {}
+ SvMetaSlot* MakeClone() const;
+};
+
+SvMetaSlot* SvMetaSlot::MakeClone() const { return new SvMetaSlot( *this ); }
+
+extern "C" void abort(void);
+int main()
+{
+ SvMetaSlot s; SvMetaSlot s2(s);
+ if (s.a8.bSet != s2.a8.bSet)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/copy6.C b/gcc-4.9/gcc/testsuite/g++.dg/init/copy6.C
new file mode 100644
index 000000000..136dc7830
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/copy6.C
@@ -0,0 +1,13 @@
+// PR c++/11878
+
+struct A
+{
+ virtual ~A();
+};
+
+template<typename T> struct B
+{
+ T t;
+};
+
+void foo() { throw B<A>().t; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor1.C
new file mode 100644
index 000000000..aeb509bfa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor1.C
@@ -0,0 +1,57 @@
+// { dg-do run }
+
+// Copyright (C) 2002 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 12 Oct 2002 <nathan@codesourcery.com>
+
+// From WindRiver SPR 80797
+// We were inadvertently SAVE_EXPRing volatile arrays during delete[]
+
+struct A
+{
+ A *ptr;
+ static int ok;
+
+ A () {ptr = this;}
+ ~A () {ok = ptr == this;}
+};
+int A::ok = -1;
+
+struct B
+{
+ B *ptr;
+ static int ok;
+
+ B () {ptr = this;}
+ ~B () {ok = ptr == this;}
+};
+int B::ok = -1;
+
+struct C
+{
+ A volatile a;
+ B volatile b[1];
+
+ C ();
+};
+
+C::C ()
+{
+ throw 1;
+}
+
+int main ()
+{
+ try
+ {
+ C c;
+ }
+ catch (...)
+ {
+ if (A::ok != 1)
+ return 1;
+ if (B::ok != 1)
+ return 2;
+ return 0;
+ }
+ return 3;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor10.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor10.C
new file mode 100644
index 000000000..91cc25012
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor10.C
@@ -0,0 +1,9 @@
+// PR c++/48606
+// { dg-do compile }
+// { dg-options "-fkeep-inline-functions" }
+
+struct S
+{
+ int &ref;
+ S() : ref() {}; // { dg-error "value-initialization of" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor11.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor11.C
new file mode 100644
index 000000000..486f58aa9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor11.C
@@ -0,0 +1,19 @@
+// PR c++/49569
+
+struct A
+{
+ virtual void f() = 0;
+};
+
+struct B: A
+{
+ int i;
+ virtual void f() { }
+};
+
+struct C
+{
+ B b;
+ C(): b() { }
+ C(const B& b): b(b) { }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor2.C
new file mode 100644
index 000000000..cf426f2bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor2.C
@@ -0,0 +1,34 @@
+// { dg-do run }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 14 Mar 2003 <nathan@codesourcery.com>
+
+// PR 9629. The vtable is not set up until the base initializers have
+// run.
+
+struct A {
+ static A *a;
+ A ();
+};
+A *A::a;
+A::A () {a = this;}
+
+struct B {
+ static A *a;
+ B (A *);
+};
+A *B::a;
+B::B(A *a_) {a = a_;}
+
+struct C : virtual public A, public B {
+ C();
+};
+C::C () : B(this) {}
+
+struct D : virtual public C {};
+
+int main()
+{
+ new D();
+ return A::a != B::a;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor3.C
new file mode 100644
index 000000000..1678aaf2c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor3.C
@@ -0,0 +1,6 @@
+// PR c++/14401
+
+struct S {
+ S() {} // { dg-error "" }
+ const int i;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor4.C
new file mode 100644
index 000000000..1c92bb973
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor4.C
@@ -0,0 +1,20 @@
+// PR c++/17788
+// { dg-do compile }
+
+class foo {
+public:
+ foo();
+};
+
+class bar: public foo { // { dg-error "reference|bar::bar" }
+private:
+ int &a;
+};
+
+foo::foo() {
+}
+
+int main(int argc, char **argv)
+{
+ bar x; // { dg-message "synthesized|deleted" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor5.C
new file mode 100644
index 000000000..cc9331882
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor5.C
@@ -0,0 +1,17 @@
+// PR C++/21645
+// We were crashing because we forgot to update the type for
+// the cloned argument for the cloned ctor.
+
+struct color {
+ ~color();
+};
+struct style {
+ color col;
+ style (color);
+};
+
+style::style(color c)
+ : col(c)
+{
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor6.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor6.C
new file mode 100644
index 000000000..a25ecab1f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor6.C
@@ -0,0 +1,20 @@
+// PR c++/21340
+
+struct Base{};
+struct Iterator : virtual Base {};
+bool operator==(const Iterator&, const Iterator&);
+struct IteratorI : Iterator {};
+struct Obj
+{
+ bool operator==(const Obj&) const;
+};
+template <int>bool dummy()
+{
+ Obj lhs, rhs;
+ return lhs == rhs;
+}
+int
+main(int argc, char** argv)
+{
+ IteratorI* it2 = new IteratorI();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor7.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor7.C
new file mode 100644
index 000000000..3378a150e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor7.C
@@ -0,0 +1,51 @@
+// { dg-do run }
+
+// Copyright (C) 2005 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 13 Oct 2005 <nathan@codesourcery.com>
+
+// PR 23984:ICE
+// Origin: Andrew Pinski pinskia@gcc.gnu.org
+
+struct B
+{
+ virtual void Foo ();
+};
+
+void B::Foo ()
+{
+}
+
+struct D : virtual B
+{
+};
+
+struct E
+{
+ B *ptr;
+
+ E (B *);
+};
+
+static B *ptr;
+
+E::E (B *ptr_)
+ :ptr (ptr_)
+{
+}
+
+struct G : D, E
+{
+ G ();
+};
+
+G::G ()
+ : E (this)
+{
+}
+
+int main ()
+{
+ G object;
+
+ return object.ptr != &object;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor8.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor8.C
new file mode 100644
index 000000000..7eb72eb83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor8.C
@@ -0,0 +1,10 @@
+// PR c++/29039
+
+typedef struct S { // { dg-error "reference" "" { target c++11 } }
+ int &r;
+}; // { dg-warning "'typedef' was ignored" }
+
+
+S f () {
+ return S (); // { dg-error "reference|deleted" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ctor9.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor9.C
new file mode 100644
index 000000000..02bb5700f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ctor9.C
@@ -0,0 +1,8 @@
+// PR c++/38427
+// { dg-do compile }
+
+struct S
+{
+ int &ref;
+ S() : ref() {}; // { dg-error "value-initialization of" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/delete1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/delete1.C
new file mode 100644
index 000000000..304dca1ca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/delete1.C
@@ -0,0 +1,7 @@
+// PR c++/19811
+
+class C; // { dg-warning "forward" }
+
+void foo(void *p) {
+ delete [] ((C*)p) ; // { dg-warning "problem|incomplete" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/delete2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/delete2.C
new file mode 100644
index 000000000..8a486beaa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/delete2.C
@@ -0,0 +1,55 @@
+// PR c++/15097
+// { dg-do run }
+
+typedef __SIZE_TYPE__ size_t;
+
+extern "C" void * malloc (size_t);
+extern "C" void free (void *);
+extern "C" void abort(void);
+
+void *saved;
+
+void * operator new (size_t size)
+{
+ void *p = malloc (size);
+ saved = p;
+ return p;
+}
+
+void operator delete (void *p)
+{
+ if (p != saved)
+ abort ();
+ free (p);
+}
+
+struct B1
+{
+ virtual ~B1 () throw() {}
+ B1 (){}
+ int x;
+};
+struct B2
+{
+ virtual ~B2 () throw() {}
+ B2 (){}
+ int x;
+};
+struct D : B1, B2
+{
+ D (){}
+ ~D () throw() {}
+ int y;
+};
+void f1 (D*);
+void f2 (B2*);
+void f3 (B1*);
+int main (void)
+{
+ f1 (::new D);
+ f2 (::new D);
+ f3 (::new D);
+}
+void f1 ( D* p) { ::delete p; }
+void f2 (B2* p) { ::delete p; }
+void f3 (B1* p) { ::delete p; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/dso_handle1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/dso_handle1.C
new file mode 100644
index 000000000..97f67cad8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/dso_handle1.C
@@ -0,0 +1,11 @@
+// PR c++/17042
+// { dg-do assemble }
+/* { dg-require-weak "" } */
+// { dg-options "-fuse-cxa-atexit" }
+
+struct A
+{ A(); ~A(); };
+A a;
+extern "C" { void* __dso_handle __attribute__ ((__weak__)); }
+void f()
+{ __dso_handle = 0; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/dso_handle2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/dso_handle2.C
new file mode 100644
index 000000000..b219dc026
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/dso_handle2.C
@@ -0,0 +1,11 @@
+// PR c++/58846
+// { dg-options "-fuse-cxa-atexit" }
+
+extern "C" { char* __dso_handle; }
+
+struct A
+{
+ ~A();
+};
+
+A a; // { dg-error "conflicting declaration" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/dtor1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/dtor1.C
new file mode 100644
index 000000000..624433897
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/dtor1.C
@@ -0,0 +1,43 @@
+// { dg-do run }
+
+extern "C" void abort ();
+
+int d = 5;
+
+struct B
+{
+ int x;
+ B (int i) : x (i) { }
+ ~B () { if (d-- != x) abort (); }
+};
+
+struct C1 : public B {
+ C1 (int i) : B (i) {}
+};
+
+struct C2 : public B {
+ C2 (int i) : B (i) {}
+};
+
+struct D : public B {
+ D (int i) : B (i) {}
+};
+
+struct E : public B {
+ E (int i) : B (i) {}
+};
+
+struct A
+ : public C1, C2, virtual public D, virtual public E
+{
+ A () : D (0), E (1), C1 (2), C2 (3), x1(4), x2(5) {}
+ B x1;
+ B x2;
+};
+
+
+int main ()
+{
+ A a;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/dtor2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/dtor2.C
new file mode 100644
index 000000000..56c7cac91
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/dtor2.C
@@ -0,0 +1,28 @@
+// { dg-do run }
+
+extern "C" void abort ();
+
+struct A
+{
+ ~A();
+};
+
+A::~A () {
+ abort ();
+}
+
+struct B
+{
+ ~B();
+};
+
+B::~B () {
+ if(true) return;
+ A a;
+}
+
+int main()
+{
+ B b;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/dtor3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/dtor3.C
new file mode 100644
index 000000000..2af1ffe46
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/dtor3.C
@@ -0,0 +1,21 @@
+// PR c++/17976
+// { dg-do run }
+
+extern "C" void abort();
+struct A
+{
+ static int i;
+ A(){}
+ ~A(){i++;if(i>1)abort();}
+};
+
+int A::i = 0;
+
+A a;
+extern A a;
+
+int main()
+{
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/dtor4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/dtor4.C
new file mode 100644
index 000000000..4bca69e4a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/dtor4.C
@@ -0,0 +1,9 @@
+// { dg-final { scan-assembler-not "_ZN1AD2Ev" } }
+
+struct A { };
+
+int main()
+{
+ A a;
+ a.~A();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/elide1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/elide1.C
new file mode 100644
index 000000000..24e81e387
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/elide1.C
@@ -0,0 +1,38 @@
+// { dg-do run }
+
+// Test that the destructor for a temporary passed by value isn't run
+// until end of full-expression, as per [class.copy]:
+
+// Whenever a temporary class object is copied using a copy constructor,
+// and this object and the copy have the same cv-unqualified type, an
+// implementation is permitted to treat the original and the copy as two
+// different ways of referring to the same object and not perform a copy
+// at all, even if the class copy constructor or destructor have side
+// effects.... In these cases, the
+// object is destroyed at the later of times when the original and the
+// copy would have been destroyed without the optimization.
+
+// Here, the temporary would be destroyed later than the parm, so either we
+// must suppress the optimization in this case or destroy value parms in the
+// caller.
+
+int d;
+
+struct A {
+ A () { }
+ A (const A&) { }
+ ~A() { ++d; }
+};
+
+void f (A a) { }
+
+int main ()
+{
+ int r;
+ f (A ()), r = d;
+
+ if (r < d && d)
+ return 0;
+ else
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/elide2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/elide2.C
new file mode 100644
index 000000000..e6d3300b5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/elide2.C
@@ -0,0 +1,30 @@
+// PR c++/8674
+
+// Bug: Since B().a is an rvalue, we tried to treat it like a TARGET_EXPR
+// and elide the copy. But that produces a bitwise copy, which causes us
+// to abort in cp_expr_size.
+
+// Test that we actually run the A copy constructor when calling f().
+
+// { dg-do run }
+
+int c;
+
+struct A
+{
+ A () { ++c; }
+ A (const A&) { ++c; }
+};
+
+struct B
+{
+ A a;
+};
+
+void f (A) { }
+
+int main ()
+{
+ f (B().a);
+ return c < 2;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/empty1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/empty1.C
new file mode 100644
index 000000000..bba179f98
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/empty1.C
@@ -0,0 +1,30 @@
+// { dg-do run }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 3 Sept 2001 <nathan@codesourcery.com>
+
+// Bug 4203. We were bit copying empty bases including the
+// padding. Which clobbers whatever they overlay.
+
+class EmptyBase0 {};
+class EmptyBase1 : public EmptyBase0 {};
+class Base1
+{
+public:
+unsigned int t_;
+Base1(unsigned int t) : t_(t) {}
+};
+
+class PEPE : public Base1, public EmptyBase1
+{
+public:
+PEPE(unsigned int t)
+ : Base1(t), EmptyBase1(EmptyBase1()) {}
+};
+
+int main()
+{
+ PEPE pepe(0xff);
+
+ return pepe.t_ != 255;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/enum1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/enum1.C
new file mode 100644
index 000000000..4876e4594
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/enum1.C
@@ -0,0 +1,18 @@
+/* { dg-options "-Wno-overflow" } */
+
+#ifndef __SIZEOF_INT128__
+#define UNACCEPT 0xffffffffffffffffLL
+#else
+#define UNACCEPT ~((unsigned __int128) 0)
+#endif
+
+enum test {
+ acceptable = -1,
+ unacceptable = UNACCEPT
+}; // { dg-error "" }
+
+enum test t = acceptable, u = unacceptable;
+
+int main() {
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/enum2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/enum2.C
new file mode 100644
index 000000000..dea7dc17b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/enum2.C
@@ -0,0 +1,9 @@
+#include <limits.h>
+enum test {
+ z = 0,
+ c = UINT_MAX + 1LL
+} x = z;
+
+int main() {
+ return x != z;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/error1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/error1.C
new file mode 100644
index 000000000..bdd983f96
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/error1.C
@@ -0,0 +1,7 @@
+// PR c++/12696
+
+struct A {
+ static float b[10];
+} // { dg-error "after struct definition" }
+
+float A::b[] = {1,2,3};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/error2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/error2.C
new file mode 100644
index 000000000..43d24f13b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/error2.C
@@ -0,0 +1,15 @@
+/* PR c++/29727 */
+/* { dg-do compile } */
+
+template<int> struct A
+{
+ static int a[1];
+};
+template<int N> int A<N>::a[1] = { X:0 }; /* { dg-error "does not allow designated|was not declared|designated initializer for an array" } */
+
+void foo()
+{
+ A<0>::a;
+}
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/explicit1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/explicit1.C
new file mode 100644
index 000000000..f376df236
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/explicit1.C
@@ -0,0 +1,9 @@
+// PR c++/60417
+
+struct A { explicit A(int = 0); };
+struct B { A a; };
+
+int main()
+{
+ B b = {};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/float1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/float1.C
new file mode 100644
index 000000000..d18ff3db0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/float1.C
@@ -0,0 +1,19 @@
+// PR c++/21089
+// { dg-do run }
+
+extern "C" void abort();
+
+static const double a = 1.0;
+struct S {
+ S();
+};
+static S s;
+static const double b = a + 1.0;
+
+S::S() {
+ if (b < 1.9 || b > 2.1)
+ abort ();
+}
+
+int main () {
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/for1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/for1.C
new file mode 100644
index 000000000..420e85cff
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/for1.C
@@ -0,0 +1,30 @@
+// PR c++/13865
+// Bug: We were destroying 'a' before executing the loop.
+
+// { dg-do run }
+
+#include <stdio.h>
+
+int i;
+int r;
+
+class A
+{
+public:
+ A() { printf("A ctor\n"); }
+ ~A()
+ {
+ printf("A dtor\n");
+ if (i != 2)
+ r = 1;
+ }
+};
+
+int main(int argc, char **argv)
+{
+ for (A a; i < 2; ++i) {
+ printf("iteration %d\n", i);
+ }
+
+ return r;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/for2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/for2.C
new file mode 100644
index 000000000..d66fea30e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/for2.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// PR 16012: Got the scope of I incorrect in templates only.
+
+template<int> void foo()
+{
+ for (int i=0 ;;) ;
+ int i;
+}
+
+void bar()
+{
+ foo<0>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/for3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/for3.C
new file mode 100644
index 000000000..c8ef3cc62
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/for3.C
@@ -0,0 +1,9 @@
+// { dg-do compile }
+
+struct A { int i; A(); A(const A&); };
+
+void bar()
+{
+ A a;
+ for ( ;; a=A() ) ;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/global1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/global1.C
new file mode 100644
index 000000000..21f1cac06
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/global1.C
@@ -0,0 +1,16 @@
+// PR c++/18416
+
+class errarg {
+ enum { EMPTY } type;
+public:
+ errarg();
+};
+extern errarg empty_errarg;
+extern void errprint(const char *,
+ const errarg &arg1 = empty_errarg,
+ const errarg &arg2 = empty_errarg,
+ const errarg &arg3 = empty_errarg);
+errarg::errarg() : type(EMPTY)
+{
+}
+errarg empty_errarg;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/goto1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/goto1.C
new file mode 100644
index 000000000..b0a0c5253
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/goto1.C
@@ -0,0 +1,23 @@
+// PR c++/14724
+// { dg-do run }
+
+int j;
+
+template <class T>
+struct C {
+ C() { ++j; }
+ ~C() { --j; }
+};
+
+int main(int, char **) {
+ {
+ int i = 0;
+ again:
+ C<int> v;
+ if (++i < 10)
+ goto again;
+ }
+
+ return j;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/goto2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/goto2.C
new file mode 100644
index 000000000..3f4ecc04c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/goto2.C
@@ -0,0 +1,11 @@
+// PR c++/20721
+
+bool f();
+void g(int i)
+{
+ if (i) goto bad; // { dg-error "from" }
+ bool a = f(); // { dg-error "initialization" }
+ bad: // { dg-error "jump" }
+ ;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref1.C
new file mode 100644
index 000000000..d0170cd18
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref1.C
@@ -0,0 +1,45 @@
+// Submitted by Erik Rozendaal <dlr@acm.org>
+// Test case for GNATS bug 787.
+// { dg-do run }
+
+#include <stdio.h>
+#include <stdlib.h>
+
+static int calls;
+
+int &foo (int &arg)
+{
+ calls++;
+ arg=0;
+ return arg;
+}
+
+int &identity (int &x)
+{
+ return x;
+}
+
+int main()
+{
+ int a;
+
+ calls = 0;
+ int &b = ++foo (a);
+ if (calls > 1)
+ abort ();
+ if (&a != &b)
+ abort ();
+ if (a != 1)
+ abort ();
+
+ calls = 0;
+ int &c = ++identity (++foo (a));
+ if (calls > 1)
+ abort ();
+ if (&a != &c)
+ abort ();
+ if (a != 2)
+ abort ();
+
+ exit (0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref2.C
new file mode 100644
index 000000000..6d9448a8e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref2.C
@@ -0,0 +1,42 @@
+// Submitted by Jason Merrill <jason_merrill@redhat.com>
+// Test for proper handling of local static references.
+// { dg-do run }
+
+int r;
+
+int c;
+int f ()
+{
+ // Test that we only initialize i once.
+ if (++c > 1)
+ ++r;
+ return 42;
+}
+
+const int *p;
+void g ()
+{
+ static const int &i = f();
+
+ // Test that i points to the same place in both calls.
+ if (p && p != &i)
+ ++r;
+ // Test that if so, it points to static data.
+ if (i != 42)
+ ++r;
+
+ p = &i;
+}
+
+void h ()
+{
+ int arr[] = { 1, 1, 1, 1, 1, 1, 1 };
+ g ();
+}
+
+int main ()
+{
+ g ();
+ h ();
+ return r;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref3.C
new file mode 100644
index 000000000..e858fd74d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref3.C
@@ -0,0 +1,47 @@
+// Origin: Peter Schmid <schmid@snake.iap.physik.tu-darmstadt.de>
+
+// { dg-do link }
+
+template <class T>
+class Ptr {
+protected:
+ T * ptr;
+
+public:
+
+ Ptr(void) : ptr(0) { }
+ Ptr(T * p) : ptr(p) { }
+
+ ~Ptr(void) { delete ptr; }
+
+ operator T & () { return *ptr; }
+};
+
+class base {
+public:
+ base(void) { }
+ ~base(void) { }
+};
+
+
+class foo : public base {
+private:
+ foo(const foo & rv);
+
+public:
+
+ foo(void) { }
+ ~foo(void) { }
+};
+
+void func2(base & b) {
+ // ...
+}
+
+int main () {
+ Ptr<foo> f = new foo;
+ /* This should not result in a copy; the result of the conversion
+ operator should be bound directly to the reference argument to
+ `func2'. */
+ func2(f);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref4.C
new file mode 100644
index 000000000..7cd6986ce
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/init-ref4.C
@@ -0,0 +1,21 @@
+// Origin: dgregor@gcc.gnu.org
+// PR c++/11384
+// foo<int>::_S_something was not being emitted (as a weak definition).
+
+// { dg-do run }
+// { dg-require-weak "" }
+
+template<typename T>
+ struct foo
+ {
+ static const T _S_something;
+ };
+
+template<typename T>
+ const T foo<T>::_S_something = T();
+
+int main()
+{
+ const int* p = &foo<int>::_S_something;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/inline1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/inline1.C
new file mode 100644
index 000000000..f3e323427
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/inline1.C
@@ -0,0 +1,14 @@
+// PR c++/9167
+// { dg-options "-finline" }
+
+struct A {
+ ~A();
+ A f(A) { }
+};
+
+
+void f(void)
+{
+ A a;
+ a.f(a);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/lifetime1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/lifetime1.C
new file mode 100644
index 000000000..57f8c6217
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/lifetime1.C
@@ -0,0 +1,29 @@
+// PR c++/48370
+// { dg-do run }
+
+extern "C" void abort();
+
+int last = 4;
+
+struct A {
+ int i;
+ A(int i): i(i) { }
+ ~A() { if (i > last) abort(); last = i; }
+};
+
+struct D { int i; };
+
+struct B: D, A { B(int i): A(i) { } };
+struct E: D, virtual A { E(int i): A(i) { } };
+
+struct C
+{
+ const A& ar1;
+ const A& ar2;
+ const A& ar3;
+};
+
+int main()
+{
+ C c = { 1, B(2), E(3) };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/lifetime2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/lifetime2.C
new file mode 100644
index 000000000..293bd692e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/lifetime2.C
@@ -0,0 +1,23 @@
+// PR c++/26714
+// { dg-do run }
+
+extern "C" void abort();
+
+bool ok = false;
+struct A
+{
+ A() { }
+ ~A() { if (!ok) abort(); }
+};
+
+struct B
+{
+ const A &a1;
+ const A &a2;
+ B() : a1(A()),a2(A()) { ok = true; }
+};
+
+int main()
+{
+ B b;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/lifetime3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/lifetime3.C
new file mode 100644
index 000000000..d099699f8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/lifetime3.C
@@ -0,0 +1,37 @@
+// PR c++/26714
+// { dg-do run }
+
+extern "C" void abort();
+
+bool ok = false;
+struct A {
+ A() { }
+ ~A() { if (!ok) abort(); }
+};
+
+struct B {
+ static A foo() { return A(); }
+};
+
+B b_g;
+
+struct scoped_ptr {
+ B* operator->() const { return &b_g; }
+ B* get() const { return &b_g; }
+};
+
+B *get() { return &b_g; }
+
+int main()
+{
+ scoped_ptr f;
+ const A& ref1 = f->foo();
+ const A& ref2 = f.get()->foo();
+ const A& ref3 = get()->foo();
+ const A& ref4 = B::foo();
+ B *pf = f.get();
+ const A& ref5 = pf->foo();
+
+
+ ok = true;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/member1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/member1.C
new file mode 100644
index 000000000..88f9b3134
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/member1.C
@@ -0,0 +1,21 @@
+// Copyright (C) 2005 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 13 Jun 2005 <nathan@codesourcery.com>
+
+// Origin: Ivan Godard <igodard@pacbell.net>
+// Bug 20789: ICE on invalid
+
+template<typename> struct A;
+
+template<int> struct B {};
+
+template<typename T> struct C
+{
+ static const int i = A<T>::i; // { dg-error "incomplete" }
+ static const int j = i;
+ B<j> b;
+};
+
+C<int> c;
+
+int i = C<int>::i;
+int j = C<int>::j;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/mutable1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/mutable1.C
new file mode 100644
index 000000000..af99ee0bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/mutable1.C
@@ -0,0 +1,20 @@
+// PR c++/54026
+// { dg-final { scan-assembler-not "rodata" } }
+
+void non_const(int *);
+
+template <typename T>
+struct Foo {
+ T x;
+ mutable int y;
+ void func() const { non_const(&y); }
+};
+
+struct Bar {
+ int x;
+ mutable int y;
+ void func() const { non_const(&y); }
+};
+
+const Foo<int> foo = { 1, 2 };
+const Bar bar = { 3, 4 };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new1.C
new file mode 100644
index 000000000..5015d819f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new1.C
@@ -0,0 +1,19 @@
+// Origin: asharji@uwaterloo.ca
+
+// { dg-do compile }
+
+typedef __SIZE_TYPE__ size_t;
+
+class bar {
+ int i;
+ public :
+ void * operator new ( size_t , void * storage );
+};
+
+class foo {
+ int storage[ 5 ];
+ public:
+ void mem ( ) {
+ bar *s = new ( ( void * ) & storage ) bar;
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new10.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new10.C
new file mode 100644
index 000000000..e19629bc0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new10.C
@@ -0,0 +1,8 @@
+// PR c++/14452
+// We got confused trying to preevaluate the new-initializer.
+
+struct S {};
+void foo (bool b)
+{
+ new S(b ? S() : S());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new11.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new11.C
new file mode 100644
index 000000000..a13f262aa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new11.C
@@ -0,0 +1,25 @@
+// PR c++/17670
+// { dg-do run }
+
+#include <cstdlib>
+#include <new>
+
+bool abort_new;
+void *operator new[](size_t bytes)
+#if __cplusplus <= 199711L
+ throw (std::bad_alloc)
+#endif
+{
+ if (abort_new)
+ abort();
+ return operator new (bytes);
+}
+
+
+struct X {};
+int main () {
+ // Do not abort until main is running in case startup code uses
+ // operator new[].
+ abort_new = true;
+ new (X);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new12.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new12.C
new file mode 100644
index 000000000..ce2acb237
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new12.C
@@ -0,0 +1,6 @@
+// PR c++/18369
+
+void breakme ()
+{
+ int *v = new (int [5]);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new13.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new13.C
new file mode 100644
index 000000000..2ced6e3fe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new13.C
@@ -0,0 +1,11 @@
+// PR c++/22508
+// ICE on invalid operator new
+// Origin: Flash Sheridan <flash@pobox.com>
+// { dg-do compile }
+
+struct A
+{
+ void* operator new(__SIZE_TYPE__) throw(X); // { dg-error "expected|type" }
+};
+
+A* p = new A;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new14.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new14.C
new file mode 100644
index 000000000..5d13da20e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new14.C
@@ -0,0 +1,11 @@
+// PR c++/23491
+
+struct X
+{
+ int m;
+};
+
+void f(int n)
+{
+ const X *p = new const X[1] () ;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new15.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new15.C
new file mode 100644
index 000000000..b93b43c83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new15.C
@@ -0,0 +1,19 @@
+// PR c++/9782
+
+extern "C" void printf(const char*, ...);
+
+template <int>
+struct A {
+ A() {printf("A::A()\n");}
+};
+
+
+struct B {
+ B() {printf("B::B()\n");}
+};
+
+
+int main () {
+ new A<0>[1][1];
+ new B [1][1];
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new16.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new16.C
new file mode 100644
index 000000000..c49f13f83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new16.C
@@ -0,0 +1,38 @@
+// { dg-do run }
+// { dg-options "-O2 -fstrict-aliasing" }
+
+// Test that we don't let TBAA reorder an assignment across a
+// placement new.
+// See PR 29286.
+
+typedef __SIZE_TYPE__ size_t;
+
+inline void* operator new(size_t, void* __p) throw() { return __p; }
+
+void __attribute__((noinline)) bar() {}
+
+long __attribute__((noinline)) foo(double *p, int n)
+{
+ long *f;
+ for (int i=0; i<n; ++i)
+ {
+ int *l = (int *)p;
+ *l = 0;
+ f = new (p) long;
+ *f = -1;
+ }
+ bar ();
+ return *f;
+}
+
+extern "C" void abort(void);
+int main()
+{
+ union {
+ int i;
+ long l;
+ } u;
+ if (foo((double *)&u, 1) != -1)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new17.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new17.C
new file mode 100644
index 000000000..42b9f077a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new17.C
@@ -0,0 +1,37 @@
+// { dg-do compile }
+// { dg-options "-O2 -fstrict-aliasing -fdump-tree-optimized" }
+
+// Test that placement new does not introduce an unnecessary memory
+// barrier.
+// See PR 29286.
+
+typedef __SIZE_TYPE__ size_t;
+
+inline void* operator new(size_t, void* __p) throw() { return __p; }
+
+template <class T, int D>
+class Vector
+{
+public:
+ Vector()
+ {
+ for (int i = 0; i < D; ++i)
+ new (&x_m[i]) T();
+ }
+ T& operator[](int i) { return x_m[i]; }
+
+private:
+ T x_m[D];
+};
+
+void foo(Vector<float, 3> *m)
+{
+ Vector<float, 3> v;
+ v[0] = 1.0;
+ v[1] = 2.0;
+ v[3] = 3.0;
+ *m = v;
+}
+
+// { dg-final { scan-tree-dump-times "= 0\.0" 1 "optimized" } }
+// { dg-final { cleanup-tree-dump "optimized" } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new18.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new18.C
new file mode 100644
index 000000000..45f6e7a09
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new18.C
@@ -0,0 +1,45 @@
+// { dg-do compile }
+// { dg-options "-O2 -fstrict-aliasing" }
+
+// This caused an ICE during placement new.
+
+namespace Pooma {
+ typedef int Context_t;
+ namespace Arch {
+ }
+ inline Context_t context() {
+ }
+ inline int contexts() {
+ }
+ }
+template<class DomT, class T, class NewDom1T> struct DomainTraitsScalar {
+ };
+template<class T> struct DomainTraits : public DomainTraitsScalar<T, T, T> {
+ };
+template<int Dim> class Grid;
+template<class DT> class DomainBase {
+ };
+template<int Dim, class DT> class Domain : public DomainBase<DT> {
+ };
+#include <vector>
+template<> class Grid<1> : public Domain<1, DomainTraits<Grid<1> > > {
+ };
+namespace Pooma {
+ class PatchSizeSyncer {
+ typedef Grid<1> Grid_t;
+ PatchSizeSyncer(int contextKey, Grid_t &localGrid);
+ int myContext_m;
+ int numContexts_m;
+ int localKey_m;
+ Grid_t localGrid_m;
+ typedef std::pair<int,Grid_t *> Elem_t;
+ std::vector<Elem_t> gridList_m;
+ };
+ }
+namespace Pooma {
+ PatchSizeSyncer::PatchSizeSyncer(int contextKey, Grid_t &localGrid) :
+myContext_m(Pooma::context()), numContexts_m(Pooma::contexts()),
+localKey_m(contextKey), localGrid_m(localGrid) {
+ if (myContext_m == 0) gridList_m.reserve(numContexts_m);
+ }
+ }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new19.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new19.C
new file mode 100644
index 000000000..a25be7da7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new19.C
@@ -0,0 +1,73 @@
+// { dg-do compile }
+// { dg-options "-O2 -fstrict-aliasing -fdump-tree-pre-details" }
+
+// Make sure we hoist invariants out of the loop even in the presence
+// of placement new. This is similar to code in tramp3d.
+
+typedef __SIZE_TYPE__ size_t;
+
+inline void* operator new(size_t, void* __p) throw() { return __p; }
+
+template <class T, int D>
+class Vector
+{
+public:
+ Vector()
+ {
+ for (int i = 0; i < D; ++i)
+ new (&x_m[i]) T();
+ }
+ T& operator[](int i) { return x_m[i]; }
+
+private:
+ T x_m[D];
+};
+
+struct sia
+{
+ int ai[3];
+};
+
+struct s
+{
+ struct si
+ {
+ sia* p;
+ } asi[3];
+ float* pd;
+};
+
+class c
+{
+ int foo(int, int, int);
+ s sm;
+};
+
+
+extern void bar(Vector<float, 3>*, int);
+int c::foo(int f1, int f2, int f3)
+{
+ float sum = 0;
+ for (int i = 0; i < 3; ++i)
+ {
+ for (int j = 0; j < 3; ++j)
+ {
+ Vector<float, 3> v;
+ v[0] = 1.0;
+ v[1] = 2.0;
+ v[2] = 3.0;
+ for (int k = 0; k < 3; ++k)
+ {
+ float f = (f1 * this->sm.asi[0].p->ai[0]
+ + f2 * this->sm.asi[1].p->ai[0]
+ + f3 * this->sm.asi[2].p->ai[0]);
+ sum += f * v[k];
+ }
+ *this->sm.pd = sum;
+ }
+ }
+ return sum;
+}
+
+// { dg-final { scan-tree-dump "Replaced.*->ai\\\[0\\\]" "pre" } }
+// { dg-final { cleanup-tree-dump "pre" } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new2.C
new file mode 100644
index 000000000..8b207d0a0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new2.C
@@ -0,0 +1,17 @@
+// Origin: asharji@uwaterloo.ca
+
+// { dg-do compile }
+
+class bar {
+ public :
+ bar() { }
+ void * operator new ( __SIZE_TYPE__ , void * storage )
+ { return (void *)1;}
+};
+
+class foo {
+ public:
+ void mem ( ) {
+ new ( 0 ) bar;
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new20.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new20.C
new file mode 100644
index 000000000..705c1be48
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new20.C
@@ -0,0 +1,6 @@
+// PR c++/31743
+typedef int A[];
+A* p = new A; // { dg-error "invalid use of array with unspecified bounds" }
+A* q = new (A); // { dg-error "invalid use of array with unspecified bounds" }
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new21.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new21.C
new file mode 100644
index 000000000..5797ea981
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new21.C
@@ -0,0 +1,10 @@
+// PR c++/32251
+
+struct A {
+ A();
+ void operator delete(void *, ...);
+};
+
+void foo () {
+ new A; // { dg-warning "deallocation" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new22.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new22.C
new file mode 100644
index 000000000..2ce51ff28
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new22.C
@@ -0,0 +1,3 @@
+// PR c++/29001
+
+void* operator new (__SIZE_TYPE__) { return; } // { dg-error "with no value" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new23.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new23.C
new file mode 100644
index 000000000..cedd898b3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new23.C
@@ -0,0 +1,20 @@
+// PR c++/33025
+// { dg-do run }
+// { dg-options "-O2" }
+
+typedef __SIZE_TYPE__ size_t;
+inline void *operator new (size_t, void *p) throw () { return p; }
+extern "C" void abort ();
+
+int
+main()
+{
+ const unsigned num = 10;
+ unsigned *data = new unsigned[2 * num];
+ unsigned *ptr = data;
+ for (unsigned i = 0; i < 2 * num; ++i)
+ (i % 2 == 0) ? new (ptr) unsigned (2) : new (ptr++) unsigned (1);
+ if (ptr - data != num)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new24.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new24.C
new file mode 100644
index 000000000..6f5613be7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new24.C
@@ -0,0 +1,18 @@
+// PR c++/33025
+// { dg-do compile }
+// { dg-options "-O2" }
+
+typedef __SIZE_TYPE__ size_t;
+inline void *operator new (size_t, void *p) throw () { return p; }
+extern "C" void abort ();
+
+int
+main()
+{
+ const unsigned num = 10;
+ unsigned *data = new unsigned[num];
+ unsigned *ptr = new (data) unsigned (num);
+ static unsigned data2[10];
+ unsigned *ptr2 = new (&data2[0]) unsigned (10);
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new25.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new25.C
new file mode 100644
index 000000000..2d447f8f2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new25.C
@@ -0,0 +1,29 @@
+// PR c++/31988
+#include <new>
+
+class C
+{
+public:
+ void* operator new(std::size_t = 32) throw (std::bad_alloc); // { dg-error "first parameter" }
+ void* operator new[](std::size_t = 32) throw (std::bad_alloc); // { dg-error "first parameter" }
+ void* operator new(std::size_t = 32, const std::nothrow_t&) throw(); // { dg-error "first parameter" }
+ void* operator new[](std::size_t = 32, const std::nothrow_t&) throw(); // { dg-error "first parameter" }
+};
+
+class D
+{
+public:
+ void* operator new(std::size_t,
+ const std::nothrow_t& = std::nothrow_t()) throw();
+ void* operator new[](std::size_t,
+ const std::nothrow_t& = std::nothrow_t()) throw();
+};
+
+class E
+{
+public:
+ void* operator new(std::size_t = 0,
+ const std::nothrow_t& = std::nothrow_t()) throw(); // { dg-error "first parameter" }
+ void* operator new[](std::size_t = 0,
+ const std::nothrow_t& = std::nothrow_t()) throw(); // { dg-error "first parameter" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new26.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new26.C
new file mode 100644
index 000000000..541de3058
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new26.C
@@ -0,0 +1,44 @@
+// PR c++/33407
+// { dg-do run }
+// { dg-options "-O2 -fstrict-aliasing" }
+
+extern "C" void * malloc(__SIZE_TYPE__);
+extern "C" void abort(void);
+
+void *p;
+void __attribute__((noinline)) init(void)
+{
+ p = malloc(4);
+}
+
+inline void *operator new(__SIZE_TYPE__)
+{
+ return p;
+}
+
+inline void operator delete (void*) {}
+
+int * __attribute__((noinline)) doit(int n)
+{
+ float *q;
+ int *r;
+
+ for (int i=0; i<n; ++i)
+ {
+ q = new float;
+ *q = 1.0;
+ delete q;
+ r = new int;
+ *r = 1;
+ }
+
+ return r;
+}
+
+int main()
+{
+ init();
+ if (*doit(1) != 1)
+ abort();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new27.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new27.C
new file mode 100644
index 000000000..a6271c930
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new27.C
@@ -0,0 +1,40 @@
+// PR c++/34862
+// { dg-do run }
+// { dg-options "-O2" }
+
+typedef __SIZE_TYPE__ size_t;
+extern "C" void abort ();
+
+struct T
+{
+ void *operator new (size_t, char *&);
+ T () { i[0] = 1; i[1] = 2; }
+ int i[2];
+};
+
+void *
+T::operator new (size_t size, char *&p)
+{
+ void *o = (void *) p;
+ p += size;
+ return o;
+}
+
+T *
+f (char *&x)
+{
+ return new (x) T ();
+}
+
+char buf[10 * sizeof (T)] __attribute__((aligned (__alignof (T))));
+
+int
+main ()
+{
+ char *p = buf;
+ T *t = f (p);
+ if (p != buf + sizeof (T))
+ abort ();
+ if (t->i[0] != 1 || t->i[1] != 2)
+ abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new28.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new28.C
new file mode 100644
index 000000000..41a78be2a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new28.C
@@ -0,0 +1,27 @@
+// PR c++/43951
+// { dg-do run }
+// { dg-options "-O2" }
+
+extern "C" void abort ();
+
+class Foo
+{
+public:
+ Foo () : xxx (1) {};
+ const int xxx;
+};
+Foo *
+bar ()
+{
+ return new Foo;
+}
+
+int
+main ()
+{
+ Foo *p = bar ();
+
+ if (p->xxx != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new29.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new29.C
new file mode 100644
index 000000000..1ca8ca06a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new29.C
@@ -0,0 +1,33 @@
+// PR c++/43951
+// { dg-do run }
+// { dg-options "-O2" }
+
+extern "C" void abort ();
+
+class Foo
+{
+public:
+ Foo () : xxx (1) {};
+ const int xxx;
+};
+
+struct Foo2
+{
+ Foo foo;
+};
+
+Foo2 *
+bar ()
+{
+ return new Foo2;
+}
+
+int
+main ()
+{
+ Foo2 *p = bar ();
+
+ if (p->foo.xxx != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new3.C
new file mode 100644
index 000000000..d0eab73cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new3.C
@@ -0,0 +1,8 @@
+// Test that new-expressions at file scope work properly.
+
+struct A { static char* p; };
+
+int i = 1;
+char* A::p = new char[i];
+
+void foo() {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new30.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new30.C
new file mode 100644
index 000000000..24582d8fb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new30.C
@@ -0,0 +1,15 @@
+// PR c++/40975
+
+struct data_type
+{
+ // constructor required to reproduce compiler bug
+ data_type() {}
+};
+
+struct ptr_type
+{
+ // array new as default argument required to reproduce compiler bug
+ ptr_type (data_type* ptr = new data_type[1]) { delete[] ptr; }
+};
+
+ptr_type obj;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new31.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new31.C
new file mode 100644
index 000000000..33c94aaab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new31.C
@@ -0,0 +1,18 @@
+// PR c++/48834
+// { dg-options -Wuninitialized }
+// { dg-do run }
+
+struct S
+{
+ S ():i (0)
+ {
+ }
+ int i;
+};
+
+int
+main ()
+{
+ S *s = new S[2];
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new32.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new32.C
new file mode 100644
index 000000000..f82785749
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new32.C
@@ -0,0 +1,16 @@
+// PR c++/48873
+
+#include <new>
+
+struct D {
+private:
+ ~D();
+};
+
+template<class T>
+T& create();
+
+void f()
+{
+ D* dp = new (((void*) 0)) D(create<D>()); // #
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new33.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new33.C
new file mode 100644
index 000000000..18da79e7e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new33.C
@@ -0,0 +1,11 @@
+// PR c++/53356
+// { dg-do compile }
+
+struct A {};
+struct B { operator const A & () const; };
+struct C { operator const A & () const; C (); };
+struct D { operator const A & () const; D (); ~D (); };
+
+A *foo () { return new A (B ()); }
+A *bar () { return new A (C ()); }
+A *baz () { return new A (D ()); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new34.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new34.C
new file mode 100644
index 000000000..9e67eb341
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new34.C
@@ -0,0 +1,11 @@
+// PR c++/53356
+
+struct A { A(); ~A(); };
+
+struct B {
+ operator const A () const;
+};
+
+A* cause_ICE() {
+ return new A((A(),A()));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new35.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new35.C
new file mode 100644
index 000000000..7d07cf57f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new35.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "" }
+
+int
+main (int argc, char **argv)
+{
+ typedef char A[argc];
+ new A; // { dg-warning "array" }
+ new A[0]; // { dg-error "must be constant|not a constant" }
+ new A[5]; // { dg-error "must be constant|not a constant" }
+ new (A[0]); // { dg-error "must be constant|not a constant" }
+ new (A[5]); // { dg-error "must be constant|not a constant" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new36.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new36.C
new file mode 100644
index 000000000..c9b7af2d8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new36.C
@@ -0,0 +1,153 @@
+// Testcase for invocation of constructors/destructors in operator new[].
+// { dg-do run }
+
+#include <stdlib.h>
+
+struct E {
+ virtual ~E() { }
+};
+
+struct S {
+ S();
+ ~S();
+};
+
+static int count;
+static int max;
+static int throwAfter = -1;
+static S *pS;
+
+S::S()
+{
+ if (throwAfter >= 0 && count >= throwAfter)
+ throw E();
+ if (pS)
+ {
+ ++pS;
+ if (this != pS)
+ abort();
+ }
+ else
+ pS = this;
+ ++count;
+ max = count;
+}
+
+S::~S()
+{
+ if (count > 1)
+ {
+ if (this != pS)
+ abort();
+ --pS;
+ }
+ else
+ pS = 0;
+ --count;
+}
+
+void __attribute__((noinline)) doit(int n)
+{
+ {
+ S *s = new S[n];
+ if (count != n)
+ abort();
+ if (pS != s + n - 1)
+ abort();
+ delete [] s;
+ if (count != 0)
+ abort();
+ }
+ throwAfter = 2;
+ max = 0;
+ try
+ {
+ new S[n];
+ abort();
+ }
+ catch (E)
+ {
+ if (max != 2)
+ abort();
+ }
+ throwAfter = -1;
+}
+
+int main()
+{
+ {
+ S s;
+ if (count != 1)
+ abort();
+ if (pS != &s)
+ abort();
+ }
+ if (count != 0)
+ abort();
+ {
+ S *s = new S;
+ if (count != 1)
+ abort();
+ if (pS != s)
+ abort();
+ delete s;
+ if (count != 0)
+ abort();
+ }
+ {
+ S *s = new S[1];
+ if (count != 1)
+ abort();
+ if (pS != s)
+ abort();
+ delete [] s;
+ if (count != 0)
+ abort();
+ }
+ {
+ S *s = new S[5];
+ if (count != 5)
+ abort();
+ if (pS != s + 4)
+ abort();
+ delete [] s;
+ if (count != 0)
+ abort();
+ }
+ typedef S A[5];
+ {
+ S *s = new A;
+ if (count != 5)
+ abort();
+ if (pS != s + 4)
+ abort();
+ delete [] s;
+ if (count != 0)
+ abort();
+ }
+ throwAfter = 2;
+ max = 0;
+ try
+ {
+ new S[5];
+ abort();
+ }
+ catch (E)
+ {
+ if (max != 2)
+ abort();
+ }
+ max = 0;
+ try
+ {
+ new A;
+ abort();
+ }
+ catch (E)
+ {
+ if (max != 2)
+ abort();
+ }
+ throwAfter = -1;
+ doit(5);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new37.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new37.C
new file mode 100644
index 000000000..eab785421
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new37.C
@@ -0,0 +1,63 @@
+// { dg-do compile }
+
+void
+nonconst(int n)
+{
+ new (long[n][n]); // { dg-error "variable length|array size|not a constant|runtime bound" }
+ new long[n][n]; // { dg-error "variable length|array size|not a constant" }
+}
+
+template <typename T>
+void *
+callnew(int n)
+{
+ return new long[n][T::n];
+}
+
+template <typename T>
+void *
+callnew_fail_1(int n)
+{
+ return new long[n][T::n]; // { dg-error "variable length|array size|usable in a constant" }
+}
+
+template <typename T>
+void *
+callnew_fail_2()
+{
+ return new long[T::n]; // { dg-error "size in array new" }
+}
+
+template <typename T>
+void *
+callnew_fail_3()
+{
+ return new T[2][T::n]; // { dg-error "size of array has non-integral type" }
+}
+
+struct T1 {
+ static int n;
+};
+
+struct T2 {
+ static const double n = 2; // { dg-error "non-integral type" }
+};
+
+struct T3 {
+ static const int n = 2;
+};
+
+struct T4 {
+ enum { n = 3 };
+};
+
+void
+test_callnew(int n)
+{
+ new long[0.2]; // { dg-error "integral or enumeration type" }
+ callnew_fail_1<T1>(n);
+ callnew_fail_2<T2>();
+ callnew_fail_3<T2>();
+ callnew<T3>(n);
+ callnew<T4>(n);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new38.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new38.C
new file mode 100644
index 000000000..1672f229d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new38.C
@@ -0,0 +1,54 @@
+// { dg-do compile }
+
+void
+large_array_char(int n)
+{
+ new char[n]
+ [1ULL << (sizeof(void *) * 4)]
+ [1ULL << (sizeof(void *) * 4)]; // { dg-error "size of array" }
+}
+
+template <typename T>
+void
+large_array_char_template(int n)
+{
+ new char[n]
+ [1ULL << (sizeof(void *) * 4)]
+ [1ULL << (sizeof(void *) * 4)]; // { dg-error "size of array" }
+}
+
+
+template <typename T>
+void
+large_array_template1(int n)
+{
+ new T[n] // { dg-error "size of array is too large" }
+ [(1ULL << (sizeof(void *) * 4)) / sizeof(T)]
+ [1ULL << (sizeof(void *) * 4)];
+}
+
+template <typename T>
+void
+large_array_template2(int n)
+{
+ new T[n] // { dg-error "size of array is too large" }
+ [(1ULL << (sizeof(void *) * 4)) / sizeof(T)]
+ [1ULL << (sizeof(void *) * 4)];
+}
+
+template <typename T>
+void
+large_array_template3(int n)
+{
+ new T[n] // { dg-error "size of array is too large" }
+ [(1ULL << (sizeof(void *) * 4)) / sizeof(T)]
+ [1ULL << (sizeof(void *) * 4)];
+}
+
+void
+call_large_array_template(int n)
+{
+ large_array_template1<char>(n);
+ large_array_template2<int>(n);
+ large_array_template3<double>(n);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new39.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new39.C
new file mode 100644
index 000000000..f274ebb7b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new39.C
@@ -0,0 +1,68 @@
+// Testcase for overflow handling in operator new[].
+// { dg-do run }
+
+#include <stdlib.h>
+#include <stdexcept>
+
+struct without_new {
+ char bar[256];
+};
+
+struct with_new {
+ char bar[256];
+ void *operator new[] (size_t sz)
+ {
+ if (sz != -1)
+ abort ();
+ throw std::bad_alloc();
+ }
+};
+
+template <typename T>
+inline void
+test (size_t s)
+{
+ try {
+ new T[s];
+ abort ();
+ } catch (std::bad_alloc &) {
+ }
+}
+
+template <typename T>
+void
+test_noopt (size_t s) __attribute__((noinline));
+
+template <typename T>
+void
+test_noopt (size_t s)
+{
+ __asm__ ("");
+ test<T> (s);
+}
+
+template <typename T>
+void
+all_tests ()
+{
+ test<T>(-1);
+ test<T>(size_t(-1) / sizeof (T) + 1);
+ test<T>(size_t(-1) / sizeof (T) + 2);
+ test_noopt<T>(-1);
+ test_noopt<T>(size_t(-1) / sizeof (T) + 1);
+ test_noopt<T>(size_t(-1) / sizeof (T) + 2);
+}
+
+int
+main ()
+{
+ try {
+ ::operator new(size_t(-1));
+ abort ();
+ } catch (std::bad_alloc &) {
+ }
+ all_tests<without_new> ();
+ all_tests<with_new> ();
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new4.C
new file mode 100644
index 000000000..ab2fe3131
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new4.C
@@ -0,0 +1 @@
+int *x = new int [2] ();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new40.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new40.C
new file mode 100644
index 000000000..026712dc1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new40.C
@@ -0,0 +1,114 @@
+// Testcase for overflow handling in operator new[].
+// Optimization of unnecessary overflow checks.
+// In C++11 we throw bad_array_new_length instead.
+// { dg-options -std=c++03 }
+// { dg-do run }
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdexcept>
+
+static size_t magic_allocation_size
+ = 1 + (size_t (1) << (sizeof (size_t) * 8 - 1));
+
+struct exc : std::bad_alloc {
+};
+
+static size_t expected_size;
+
+struct pod_with_new {
+ char ch;
+ void *operator new[] (size_t sz)
+ {
+ if (sz != expected_size)
+ abort ();
+ throw exc ();
+ }
+};
+
+struct with_new {
+ char ch;
+ with_new () { }
+ ~with_new () { }
+ void *operator new[] (size_t sz)
+ {
+ if (sz != size_t (-1))
+ abort ();
+ throw exc ();
+ }
+};
+
+struct non_pod {
+ char ch;
+ non_pod () { }
+ ~non_pod () { }
+};
+
+void *
+operator new (size_t sz) _GLIBCXX_THROW (std::bad_alloc)
+{
+ if (sz != expected_size)
+ abort ();
+ throw exc ();
+}
+
+int
+main ()
+{
+ if (sizeof (pod_with_new) == 1)
+ expected_size = magic_allocation_size;
+ else
+ expected_size = -1;
+
+ try {
+ new pod_with_new[magic_allocation_size];
+ abort ();
+ } catch (exc &) {
+ }
+
+ if (sizeof (with_new) == 1)
+ expected_size = magic_allocation_size;
+ else
+ expected_size = -1;
+
+ try {
+ new with_new[magic_allocation_size];
+ abort ();
+ } catch (exc &) {
+ }
+
+ expected_size = magic_allocation_size;
+ try {
+ new char[magic_allocation_size];
+ abort ();
+ } catch (exc &) {
+ }
+
+ expected_size = -1;
+
+ try {
+ new pod_with_new[magic_allocation_size][2];
+ abort ();
+ } catch (exc &) {
+ }
+
+ try {
+ new with_new[magic_allocation_size][2];
+ abort ();
+ } catch (exc &) {
+ }
+
+ try {
+ new char[magic_allocation_size][2];
+ abort ();
+ } catch (exc &) {
+ }
+
+ try {
+ new non_pod[magic_allocation_size];
+ abort ();
+ } catch (exc &) {
+ }
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new41.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new41.C
new file mode 100644
index 000000000..0559b1dac
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new41.C
@@ -0,0 +1,22 @@
+// PR c++/55446
+// { dg-do run }
+
+struct S
+{
+ S() { }
+};
+
+int n = 1;
+
+void* operator new[](__SIZE_TYPE__)
+{
+ n = -1;
+ return &n;
+}
+
+int main()
+{
+ new S[0];
+ if (n != -1)
+ __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new5.C
new file mode 100644
index 000000000..0d99f93c6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new5.C
@@ -0,0 +1,18 @@
+// { dg-do run }
+
+#include <new>
+
+void * operator new[](std::size_t, std::nothrow_t const &) throw()
+{ return 0; }
+
+struct X {
+ struct Inner { ~Inner() {} };
+
+ X() {
+ Inner * ic = new (std::nothrow) Inner[1]; // SegFault here
+ }
+};
+
+int main() {
+ X table;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new6.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new6.C
new file mode 100644
index 000000000..ecbafd13e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new6.C
@@ -0,0 +1,8 @@
+// { dg-options "-fkeep-inline-functions" }
+
+struct B1 { virtual ~B1(); };
+struct B2 { virtual ~B2(); };
+struct D : B1, B2 {};
+struct X : D { X (); };
+
+X::X () { new int; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new7.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new7.C
new file mode 100644
index 000000000..e07d22617
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new7.C
@@ -0,0 +1,7 @@
+template <class T>
+ struct Foo
+ {};
+
+ template <class T>
+ void Foo<T>::NON_EXISTENT(int* val = new int()) {} // { dg-error "" }
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new8.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new8.C
new file mode 100644
index 000000000..1fefc366b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new8.C
@@ -0,0 +1,17 @@
+typedef __SIZE_TYPE__ size_t;
+
+enum Refcount_Type {
+ NO_REFCOUNT
+};
+
+struct d0_Unknown_Object
+{
+ void* operator new (size_t, size_t, Refcount_Type type);
+ void operator delete (void*, size_t, Refcount_Type);
+ d0_Unknown_Object ();
+};
+
+void make ()
+{
+ new (10, NO_REFCOUNT) d0_Unknown_Object;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/new9.C b/gcc-4.9/gcc/testsuite/g++.dg/init/new9.C
new file mode 100644
index 000000000..6729d76fd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/new9.C
@@ -0,0 +1,22 @@
+// PR 12337
+
+class A {};
+
+template <typename T>
+class X : public A {
+public:
+ X(T&);
+};
+
+class B {
+public:
+ bool foo(A*);
+ template <typename T>
+ bool foo(T& t) { return foo(new X<T>(t)); }
+};
+
+int main()
+{
+ B x, y;
+ x.foo(y);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/no-elide1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/no-elide1.C
new file mode 100644
index 000000000..75b648ed1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/no-elide1.C
@@ -0,0 +1,14 @@
+// PR c++/47503
+// { dg-options "-fno-elide-constructors" }
+
+struct A
+{
+ int i;
+ A ();
+};
+
+struct B
+{
+ A a;
+ B (A &aa) : a (aa) { }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/null1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/null1.C
new file mode 100644
index 000000000..2c05dc3dc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/null1.C
@@ -0,0 +1,7 @@
+// PR c++/16489
+// { dg-do compile { target { ! c++11 } } }
+
+const int NULL = 0;
+int main() {
+ double* p = NULL;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/placement1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/placement1.C
new file mode 100644
index 000000000..382fae8ed
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/placement1.C
@@ -0,0 +1,10 @@
+// PR c++/11266
+// We were expanding the same TARGET_EXPR twice, for placement new and
+// delete.
+
+void* operator new (__SIZE_TYPE__, void*) throw();
+void operator delete (void*, void*) throw();
+
+struct A { A(); };
+
+void foo() { new(new A)A; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/placement2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/placement2.C
new file mode 100644
index 000000000..7a9d6d082
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/placement2.C
@@ -0,0 +1,22 @@
+// Bug: We were calling f() twice, for both the placement new and placement
+// delete calls.
+
+// { dg-do run }
+
+void* operator new (__SIZE_TYPE__ sz, void*) { return operator new (sz); }
+void operator delete (void* p, void*) { operator delete (p); }
+
+struct A { A() { throw 1; } };
+
+int c;
+void *f() { ++c; return 0; }
+
+int main()
+{
+ try
+ {
+ new (f()) A;
+ }
+ catch (...) {}
+ return c != 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/placement3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/placement3.C
new file mode 100644
index 000000000..919e2a816
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/placement3.C
@@ -0,0 +1,30 @@
+typedef __SIZE_TYPE__ size_t;
+extern "C" void *malloc (size_t);
+
+int i;
+
+struct S {
+ S(int) {
+ throw 3;
+ }
+
+ void *operator new(size_t s, int) {
+ ++i;
+ return malloc (s);
+ }
+
+ void operator delete(void *, int) {
+ --i;
+ }
+
+ void operator delete(void *, int, int) ;
+};
+
+int main () {
+ try {
+ new (7) S (12);
+ } catch (int) {
+ if (i)
+ return 1;
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/placement4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/placement4.C
new file mode 100644
index 000000000..3cfe27d63
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/placement4.C
@@ -0,0 +1,32 @@
+// PR c++/34158
+
+typedef __SIZE_TYPE__ size_t;
+extern "C" void* malloc (size_t);
+extern "C" void free (void *);
+
+template <class T> class undef;
+
+struct A {
+ A() { throw 1; }
+};
+
+template<typename T> class Pool { };
+
+void *operator new(size_t size,Pool<int>& pool)
+{
+ return malloc(size);
+}
+
+template<typename T>
+void operator delete(void *p,Pool<T>& pool)
+{
+ undef<T> t; // { dg-error "incomplete" }
+ free(p);
+}
+
+int main ()
+{
+ Pool<int> pool;
+ new (pool) A(); // { dg-message "required" }
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/placement5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/placement5.C
new file mode 100644
index 000000000..1d540daca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/placement5.C
@@ -0,0 +1,32 @@
+// 5.3.4/19: If the lookup finds the two-parameter form of a usual
+// deallocation function (3.7.4.2) and that function, considered as a
+// placement deallocation function, would have been selected as a match for
+// the allocation function, the program is ill-formed.
+
+// But we should only complain about using op delete (void *, size_t) for
+// placement delete if it would also be selected for normal delete, not if
+// there's also an op delete (void *).
+
+typedef __SIZE_TYPE__ size_t;
+
+struct A
+{
+ A();
+ void* operator new (size_t, size_t);
+ void operator delete (void *, size_t); // { dg-error "non-placement" }
+};
+
+struct B
+{
+ B();
+ void * operator new (size_t);
+ void * operator new (size_t, size_t);
+ void operator delete (void *);
+ void operator delete (void *, size_t);
+};
+
+int main()
+{
+ A* ap = new (24) A; // { dg-error "placement delete" }
+ B* bp = new (24) B;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pm1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pm1.C
new file mode 100644
index 000000000..c0aed2410
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pm1.C
@@ -0,0 +1,88 @@
+// { dg-do run }
+
+// Copyright 2002 Free Software Foundation
+// Contributed by Jason Merrill and Alexandre Oliva
+
+// Test zero-initialization of pointers to data members. Their NULL
+// value is represented with -1, not 0.
+
+#include <stdlib.h>
+
+struct A
+{
+ int i;
+};
+
+int A::* gp;
+
+typedef int A::* iApm;
+
+iApm gp_zero = 0;
+iApm gp_dflt = iApm();
+iApm gp_cast = (iApm)0;
+iApm gp_func = iApm(0);
+iApm gp_stat = static_cast<iApm>(0);
+
+struct AD : A {};
+
+int AD::* gp_impl = gp_dflt;
+int AD::* gp_down = static_cast<int AD::*>(gp_stat);
+
+int A::* ga[2];
+
+// Test use in a simple struct.
+struct B
+{
+ int A::* mp;
+};
+
+B gb;
+
+struct D;
+struct C;
+extern D gd;
+extern C gc;
+
+// Test that in a class with a constructor, the pointer to member is
+// zero-initialized until the constructor is run.
+struct C
+{
+ int A::* mp;
+ inline C ();
+};
+
+int fail;
+struct D
+{
+ int count;
+ inline D ();
+};
+
+C::C() : mp (&A::i) { gd.count++; }
+
+D::D() : count (0)
+{
+ if (gc.mp != 0)
+ abort ();
+}
+
+// The D must come first for this to work.
+D gd;
+C gc;
+
+int main()
+{
+ static int A::* slp;
+ static int A::* sla[2];
+ static B slb;
+
+ if (gp != 0 || slp != 0
+ || gp_zero != 0 || gp_dflt != 0 || gp_cast != 0
+ || gp_func != 0 || gp_stat != 0
+ || gp_impl != 0 || gp_down != 0)
+ abort ();
+ if (ga[1] != 0 || sla[1] != 0)
+ abort ();
+ if (gb.mp != 0 || slb.mp != 0)
+ abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pm2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pm2.C
new file mode 100644
index 000000000..35b9b32fe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pm2.C
@@ -0,0 +1,7 @@
+struct S {
+ S ();
+ int S::* sp;
+ int i;
+};
+
+S s[2] = {};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pm3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pm3.C
new file mode 100644
index 000000000..980790db3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pm3.C
@@ -0,0 +1,10 @@
+// PR c++/12218
+// { dg-do run }
+
+struct C { int i, j; };
+typedef int C::*mPtr;
+extern const mPtr should_be_0 = &C::i;
+extern const mPtr should_be_4 = &C::j;
+
+int main () {
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pmf1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pmf1.C
new file mode 100644
index 000000000..93c67bdd7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pmf1.C
@@ -0,0 +1,17 @@
+// PR c++/14089
+// { dg-do compile }
+//
+// C++ front end generated assignment between types that were not
+// compatible in any sense visible to the optimizers.
+
+struct pair {
+ typedef void (pair::*fp)();
+ int first;
+ pair::fp second;
+ pair(const int& a, const pair::fp& b) : first(a), second(b) {}
+ void f(const int& a, const pair::fp& b) { first = a; second = b; }
+};
+
+void op() {
+ pair(5, pair::fp());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr20039.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr20039.C
new file mode 100644
index 000000000..aaac8bd4e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr20039.C
@@ -0,0 +1,20 @@
+// PR c++/20039
+// { dg-do compile }
+
+struct M
+{
+ M() : m(0) { }
+ int m;
+};
+
+struct X
+{
+ M m;
+ int i;
+};
+
+int mymain()
+{
+ const X *p = new const X[2]; // { dg-error "uninitialized const" }
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr25811-3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr25811-3.C
new file mode 100644
index 000000000..631da5b4c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr25811-3.C
@@ -0,0 +1,38 @@
+// { dg-do compile }
+
+struct A { int const i; };
+struct B { int& i; };
+struct C { int i; };
+
+template< class T >
+class is_constructible_via_new_without_initializer
+{
+ template<int> class size {};
+
+ typedef char yes_type;
+ struct no_type { char data[2]; };
+
+ template <class U>
+ static yes_type sfinae (size< sizeof (new U) >*);
+
+ template <class U>
+ static no_type sfinae (...);
+
+public:
+ static const bool value = sizeof (sfinae<T>(0)) == sizeof (yes_type);
+};
+
+#define JOIN( X, Y ) DO_JOIN( X, Y )
+#define DO_JOIN( X, Y ) DO_JOIN2(X,Y)
+#define DO_JOIN2( X, Y ) X##Y
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# define STATIC_ASSERT(Expr) static_assert(Expr, #Expr)
+#else
+# define STATIC_ASSERT(Expr) int JOIN(a,__LINE__)[Expr? 1 : -1]
+#endif
+
+STATIC_ASSERT (!is_constructible_via_new_without_initializer<A>::value);
+STATIC_ASSERT (!is_constructible_via_new_without_initializer<B>::value);
+STATIC_ASSERT (is_constructible_via_new_without_initializer<C>::value);
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr25811-4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr25811-4.C
new file mode 100644
index 000000000..abfb3d9f3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr25811-4.C
@@ -0,0 +1,38 @@
+// { dg-do compile }
+// { dg-options "-fpermissive" }
+
+struct A { int const i; };
+struct B { int& i; };
+struct C { int i; };
+
+template< class T >
+class is_constructible_via_new_without_initializer
+{
+ template<int> class size {};
+
+ typedef char yes_type;
+ struct no_type { char data[2]; };
+
+ template <class U>
+ static yes_type sfinae (size< sizeof (new U) >*);
+
+ template <class U>
+ static no_type sfinae (...);
+
+public:
+ static const bool value = sizeof (sfinae<T>(0)) == sizeof (yes_type);
+};
+
+#define JOIN( X, Y ) DO_JOIN( X, Y )
+#define DO_JOIN( X, Y ) DO_JOIN2(X,Y)
+#define DO_JOIN2( X, Y ) X##Y
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# define STATIC_ASSERT(Expr) static_assert(Expr, #Expr)
+#else
+# define STATIC_ASSERT(Expr) int JOIN(a,__LINE__)[Expr? 1 : -1]
+#endif
+
+STATIC_ASSERT (!is_constructible_via_new_without_initializer<A>::value);
+STATIC_ASSERT (!is_constructible_via_new_without_initializer<B>::value);
+STATIC_ASSERT (is_constructible_via_new_without_initializer<C>::value);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr25811.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr25811.C
new file mode 100644
index 000000000..0a462be54
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr25811.C
@@ -0,0 +1,195 @@
+// PR c++/25811
+// { dg-do compile }
+
+struct A1 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const j; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct A2 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct A3 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct A4 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct A5 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+template <class T> struct S1 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+template <class T> struct S2 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ T const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+template <class T> struct S3 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+template <class T> struct S4 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+ T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct X
+{
+ X () : c (0), r (c) {}
+ int const c;
+ int const& r;
+};
+
+struct Y11 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Y1 // { dg-error "deleted" "" { target c++11 } }
+{
+ Y11 a[1];
+};
+
+struct Y22 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Y2 // { dg-error "deleted" "" { target c++11 } }
+{
+ Y22 a[1];
+};
+
+struct Z1 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Z2 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Z3 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Z4 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Z5
+{
+ int i;
+};
+
+struct Z // { dg-error "deleted" "" { target c++11 } }
+{
+ Z1 z1;
+ Z2 z2;
+ Z3 z3;
+ Z4 z4;
+ Z5 z5;
+};
+
+union U // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+void f1 ()
+{
+ new A1; // { dg-error "deleted|uninitialized const member" }
+}
+
+void f2 ()
+{
+ new A2; // { dg-error "deleted|uninitialized const member" }
+}
+
+void f3 ()
+{
+ new A3; // { dg-error "deleted|uninitialized reference member" }
+}
+
+void f4 ()
+{
+ new A4; // { dg-error "deleted|uninitialized reference member" }
+}
+
+void f5 ()
+{
+ new A5; // { dg-error "deleted|uninitialized reference member|uninitialized const member" }
+}
+
+void f6 ()
+{
+ new S1<int>; // { dg-error "deleted|uninitialized const member" }
+}
+
+void f7 ()
+{
+ new S2<int>; // { dg-error "deleted|uninitialized const member" }
+}
+
+void f8 ()
+{
+ new S3<int>; // { dg-error "deleted|uninitialized reference member" }
+}
+
+void f9 ()
+{
+ new S4<int>; // { dg-error "deleted|uninitialized reference member|uninitialized const member" }
+}
+
+void f10 ()
+{
+ new X;
+}
+
+void f11 ()
+{
+ new A1[1]; // { dg-error "deleted|uninitialized const member" }
+}
+
+void f12 ()
+{
+ new A3[1]; // { dg-error "deleted|uninitialized reference member" }
+}
+
+void f13 ()
+{
+ new Y1; // { dg-error "deleted|uninitialized const member" }
+}
+
+void f14 ()
+{
+ new Y2; // { dg-error "deleted|uninitialized reference member" }
+}
+
+void f15 ()
+{
+ new Z; // { dg-error "deleted|uninitialized reference member|uninitialized const member" }
+}
+
+void f16 ()
+{
+ new U; // { dg-error "deleted|uninitialized const member" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr29043.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr29043.C
new file mode 100644
index 000000000..f341f8c8f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr29043.C
@@ -0,0 +1,52 @@
+// PR c++/29043
+// { dg-do compile }
+
+struct S // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+class C
+{
+public:
+ C() {} // { dg-error "uninitialized const member|deleted" }
+ S s;
+};
+
+struct S2 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+class C2
+{
+public:
+ C2() {} // { dg-error "uninitialized reference member|deleted" }
+ S2 s;
+};
+
+class C3
+{
+ C3() { }
+ struct s {
+ const int i;
+ };
+};
+
+struct S4 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct C4
+{
+ C4() {} // { dg-error "uninitialized const member|deleted" }
+ S4 s4[ 1 ];
+};
+
+struct C5
+{
+ C5() {} // { dg-message "uninitialized" }
+ int const iit[ 1 ];
+};
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr29571.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr29571.C
new file mode 100644
index 000000000..d0dc678cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr29571.C
@@ -0,0 +1,13 @@
+// PR c++/29571
+
+struct A
+{
+ static const int i = 0/0 + ""; // { dg-warning "division by zero" }
+ // { dg-error "constant|conversion|initializ" "" { target *-*-* } 5 }
+ static const int j = int(i);
+};
+
+// Currently G++ complains about a non-constant initializer for 'j' in
+// C++11 mode, but not C++98. Either way is correct because it depends on
+// the erroneous initializer for i, so don't require the error.
+// { dg-prune-output ":7:" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr42556.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr42556.C
new file mode 100644
index 000000000..27370af79
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr42556.C
@@ -0,0 +1,10 @@
+// { dg-do compile }
+// { dg-options "-fdump-tree-gimple" }
+
+void foo (int a, int b, int c, int d)
+{
+ int v[4] = {a, b, c, d};
+}
+
+// { dg-final { scan-tree-dump-not "v = {}" "gimple" } }
+// { dg-final { cleanup-tree-dump "gimple" } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr42844.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr42844.C
new file mode 100644
index 000000000..299a30a91
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr42844.C
@@ -0,0 +1,56 @@
+// PR c++/42844
+// { dg-do compile }
+
+struct A
+{
+ A(){}
+};
+
+struct B : A { int i; }; // { dg-message "user-provided default constructor" }
+
+struct C : A { int i; }; // { dg-message "user-provided default constructor" }
+
+struct D : B { D() {} };
+
+struct E { int i; }; // { dg-message "user-provided default constructor" }
+
+template <class T>
+struct F : A { T t; }; // { dg-message "user-provided default constructor" }
+
+template <class T>
+struct G { T t; }; // { dg-message "user-provided default constructor" }
+
+void f ()
+{
+ B const b; // { dg-error "uninitialized const" }
+ extern B const bext;
+
+ C const c[ 1 ]; // { dg-error "uninitialized const" }
+ extern C const cext[ 1 ];
+
+ D const d;
+ extern D const dext;
+
+ E const e; // { dg-error "uninitialized const" }
+ extern E const eext;
+
+ F<int> const f; // { dg-error "uninitialized const" }
+ extern F<int> const fext;
+
+ G<int> const g; // { dg-error "uninitialized const" }
+ extern G<int> const gext;
+}
+
+struct H { int i; }; // { dg-message "user-provided default constructor" }
+
+struct I : A { int i; }; // { dg-message "user-provided default constructor" }
+
+template <class T>
+void g ()
+{
+ T const t; // { dg-error "uninitialized const" }
+ extern T const text;
+}
+
+template void g<H> ();
+template void g<I> ();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr43719.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr43719.C
new file mode 100644
index 000000000..81930d07d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr43719.C
@@ -0,0 +1,197 @@
+// PR c++/43719
+// { dg-do compile }
+
+struct A1 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const j; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct A2 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct A3 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct A4 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct A5 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+template <class T> struct S1 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+template <class T> struct S2 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ T const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+template <class T> struct S3 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+template <class T> struct S4 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+ T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct X
+{
+ X () : c (0), r (c) {}
+ int const c;
+ int const& r;
+};
+
+struct Y11 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Y1 // { dg-error "deleted" "" { target c++11 } }
+{
+ Y11 a[1];
+};
+
+struct Y22 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Y2 // { dg-error "deleted" "" { target c++11 } }
+{
+ Y22 a[1];
+};
+
+struct Z1 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Z2 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Z3 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Z4 // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+struct Z5
+{
+ int i;
+};
+
+struct Z // { dg-error "deleted" "" { target c++11 } }
+{
+ Z1 z1;
+ Z2 z2;
+ Z3 z3;
+ Z4 z4;
+ Z5 z5;
+};
+
+union U // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+
+void f1 ()
+{
+ A1 a1; // { dg-error "uninitialized const member|deleted" }
+}
+
+void f2 ()
+{
+ A2 a2; // { dg-error "uninitialized const member|deleted" }
+}
+
+void f3 ()
+{
+ A3 a3; // { dg-error "uninitialized reference member|deleted" }
+}
+
+void f4 ()
+{
+ A4 a4; // { dg-error "uninitialized reference member|deleted" }
+}
+
+void f5 ()
+{
+ A5 a5; // { dg-error "uninitialized reference member|uninitialized const member|deleted" }
+}
+
+void f6 ()
+{
+ S1<int> s; // { dg-error "uninitialized const member|deleted" }
+}
+
+void f7 ()
+{
+ S2<int> s; // { dg-error "uninitialized const member|deleted" }
+}
+
+void f8 ()
+{
+ S3<int> s; // { dg-error "uninitialized reference member|deleted" }
+}
+
+void f9 ()
+{
+ S4<int> s; // { dg-error "uninitialized reference member|uninitialized const member|deleted" }
+}
+
+void f10 ()
+{
+ X x;
+}
+
+void f11 ()
+{
+ A1 a[ 1 ]; // { dg-error "uninitialized const member|deleted" }
+}
+
+void f12 ()
+{
+ A3 a[ 1 ]; // { dg-error "uninitialized reference member|deleted" }
+}
+
+void f13 ()
+{
+ Y1 y1; // { dg-error "uninitialized const member|deleted" }
+}
+
+void f14 ()
+{
+ Y2 y2; // { dg-error "uninitialized reference member|deleted" }
+}
+
+void f15 ()
+{
+ Z z; // { dg-error "uninitialized reference member|uninitialized const member|deleted" }
+}
+
+void f16 ()
+{
+ U u; // { dg-error "uninitialized const member|deleted" }
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr43890.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr43890.C
new file mode 100644
index 000000000..1b2807d0d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr43890.C
@@ -0,0 +1,39 @@
+// PR c++/43890
+// { dg-do compile }
+
+class Outer
+{
+ public:
+ Outer()
+ : i(*this)
+ {
+ }
+
+ class Inner
+ {
+ public:
+ Inner(Outer& o)
+ : o(o)
+ , i(0)
+ {
+ }
+
+ private:
+ Outer& o;
+ int const i;
+ };
+
+ private:
+ Inner i;
+};
+
+class A {
+ Outer o;
+};
+
+int main()
+{
+ A *a = new A;
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr44086.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr44086.C
new file mode 100644
index 000000000..96b5bef1c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr44086.C
@@ -0,0 +1,15 @@
+// PR c++/44086
+// { dg-do compile }
+
+struct A // { dg-error "uninitialized" "" { target c++11 } }
+{
+ int const i : 2; // { dg-message "should be initialized" "" { target { ! c++11 } } }
+};
+
+void f()
+{
+ A a; // { dg-error "deleted|uninitialized const" }
+ new A; // { dg-error "deleted|uninitialized const" }
+ A(); // { dg-error "deleted" "" { target c++11 } }
+ new A(); // { dg-error "deleted" "" { target c++11 } }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr48859.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr48859.C
new file mode 100644
index 000000000..8ef5c2ee4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr48859.C
@@ -0,0 +1,14 @@
+// PR c++/48859
+// { dg-do compile }
+
+struct HasConstructor {
+ HasConstructor() {}
+};
+
+class ConstMember {
+ const HasConstructor empty_;
+};
+
+void foo() {
+ new ConstMember;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr55497.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr55497.C
new file mode 100644
index 000000000..b50f3fbdf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr55497.C
@@ -0,0 +1,15 @@
+// PR c++/55497
+// { dg-options "-g" }
+
+int get();
+
+struct B
+{
+ B()
+ {
+ static const int v = get();
+ char BUFFER[v];
+ }
+};
+
+B b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr58811.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr58811.C
new file mode 100644
index 000000000..42e7fac42
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr58811.C
@@ -0,0 +1,11 @@
+// PR c++/58811
+
+struct B
+{
+ struct A a; // { dg-error "incomplete type" }
+};
+
+void foo()
+{
+ B();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/pr60572.C b/gcc-4.9/gcc/testsuite/g++.dg/init/pr60572.C
new file mode 100644
index 000000000..a39dfa09a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/pr60572.C
@@ -0,0 +1,13 @@
+// PR c++/60572
+// { dg-do compile }
+
+struct A
+{
+ A x; // { dg-error "incomplete type" }
+ virtual ~A () {}
+};
+
+struct B : A
+{
+ B () : A () {}
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn1.C
new file mode 100644
index 000000000..0cbabbf80
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn1.C
@@ -0,0 +1,12 @@
+// PR c++/29016
+// { dg-options "-O2" }
+
+class A;
+class B
+{
+ typedef void (*C[5]) (A *);
+ static C D;
+ static void E (A*) {}
+};
+B::C B::D={E};
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn2.C
new file mode 100644
index 000000000..0ca922b9c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn2.C
@@ -0,0 +1,14 @@
+// { dg-options "" }
+// { dg-do compile }
+// C++/30221
+// We would ICE while trying to reshape the pointer to
+// member function element which is not needed.
+
+
+class abstract {};
+typedef void (abstract::*fptr1) (short & s ) const;
+struct s {};
+s array[] =
+{
+ (fptr1)0
+};// { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn3.C
new file mode 100644
index 000000000..960085063
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrfn3.C
@@ -0,0 +1,14 @@
+// { dg-options "" }
+// { dg-do compile }
+// C++/30221
+// We would ICE while trying to reshape the pointer to
+// member function element which is not needed.
+
+
+class abstract {};
+typedef void (abstract::*fptr1) (short & s ) const;
+struct s {fptr1 f;};
+s array[] =
+{
+ (fptr1)0
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem1.C
new file mode 100644
index 000000000..6f1604faf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem1.C
@@ -0,0 +1,7 @@
+// PR c++/16853
+
+struct A {};
+struct B {};
+
+int B::* b;
+int A::* a = b; // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem2.C
new file mode 100644
index 000000000..54b69215b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem2.C
@@ -0,0 +1,12 @@
+// PR c++/19916
+// { dg-do run }
+
+struct S {
+ char k;
+};
+
+char const volatile S::* const p01 = &S::k;
+int main(void)
+{
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem3.C
new file mode 100644
index 000000000..95b60379b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem3.C
@@ -0,0 +1,8 @@
+// PR c++/28148
+
+struct foo {
+public:
+ virtual int bar(int);
+};
+
+void (foo::*__Virtual__foo__Var1)() = (void (foo::*)())(&foo::bar);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem4.C
new file mode 100644
index 000000000..44ab8cf65
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ptrmem4.C
@@ -0,0 +1,13 @@
+// PR c++/32245
+// { dg-do run }
+
+struct foo {
+ int mem1;
+ int foo::* mem2;
+};
+
+int main () {
+ foo x = { 0 } ;
+ if (x.mem2 != foo().mem2)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref1.C
new file mode 100644
index 000000000..12caff2d0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref1.C
@@ -0,0 +1,5 @@
+void f(void)
+{
+ short x = 0;
+ const int &y = x;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref10.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref10.C
new file mode 100644
index 000000000..7a280dd41
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref10.C
@@ -0,0 +1,14 @@
+// PR c++/13478
+
+struct A {};
+struct B : protected A {
+ B() {}
+ B(const A& ) {}
+private:
+ B(const B& ) {}
+};
+
+void foo(const A* ap)
+{
+ const B& br = *ap;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref11.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref11.C
new file mode 100644
index 000000000..b283e3a69
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref11.C
@@ -0,0 +1,13 @@
+// PR c++/14230
+
+struct A {
+ A ();
+ A (const A&);
+ A& operator= (const A&);
+};
+
+struct D {
+ A a;
+};
+
+const A& z = D().a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref12.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref12.C
new file mode 100644
index 000000000..4430e174b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref12.C
@@ -0,0 +1,30 @@
+// PR c++/17435
+// { dg-do run }
+
+extern "C" void abort ();
+
+bool ok;
+
+struct A
+{
+ void func() const
+ {
+ ok = 1;
+ }
+
+ ~A()
+ {
+ if (!ok)
+ abort ();
+ }
+};
+
+struct B : public A
+{
+};
+
+int main()
+{
+ A const& r1 = B();
+ r1.func();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref13.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref13.C
new file mode 100644
index 000000000..6be57aa2e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref13.C
@@ -0,0 +1,7 @@
+// PR c++/28338
+
+void foo()
+{
+ { static const int& i = 0; }
+ { static const int& i = 0; }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref14.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref14.C
new file mode 100644
index 000000000..6ac42415b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref14.C
@@ -0,0 +1,13 @@
+// PR c++/33459
+// { dg-prune-output "uninitialized" }
+// { dg-prune-output "deleted" }
+
+union A
+{
+ int &i; // { dg-error "may not have reference type" }
+};
+
+void foo()
+{
+ A();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref15.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref15.C
new file mode 100644
index 000000000..bc9c01dc2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref15.C
@@ -0,0 +1,34 @@
+// PR c++/20416. We correctly constructed the temporary S in foo(),
+// but incorrectly destroyed it every time foo() was called.
+// When using a wrapped target, there is no way to override the exit
+// code after returning from main.
+// { dg-do run { target unwrapped } }
+extern "C" void abort (void);
+extern "C" void _exit (int);
+
+int c, exiting;
+struct S {
+ S() { ++c; }
+ S(const S &) { ++c; }
+ ~S()
+ {
+ if (!exiting) abort ();
+ _exit (0);
+ }
+};
+void
+foo (void)
+{
+ static const S &s = S();
+}
+int main ()
+{
+ if (c != 0)
+ abort ();
+ foo ();
+ foo ();
+ if (c != 1)
+ abort ();
+ exiting = 1;
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref16.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref16.C
new file mode 100644
index 000000000..2d56395cb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref16.C
@@ -0,0 +1,23 @@
+// PR c++/35548
+// { dg-do run }
+
+int c;
+struct A
+{
+ A() { ++c; }
+ A(const A&) { ++c; }
+ ~A() { --c; }
+};
+
+A f()
+{
+ return A();
+}
+
+int i;
+const A* ap;
+int main()
+{
+ const A& ar = i ? *ap : f();
+ return (c == 0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref17.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref17.C
new file mode 100644
index 000000000..2c8c22b8d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref17.C
@@ -0,0 +1,23 @@
+// PR c++/35650
+// { dg-do compile }
+
+void f1 ();
+
+namespace N
+{
+ using::f1;
+ void f2 ();
+ void f3 ();
+}
+
+using N::f3;
+
+void
+test ()
+{
+ void (&a) () = f1;
+ void (&b) () = N::f1;
+ void (&c) () = N::f2;
+ void (&d) () = f3;
+ void (&e) () = ::f3;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref18.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref18.C
new file mode 100644
index 000000000..e704077c2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref18.C
@@ -0,0 +1,12 @@
+// PR c++/49395
+
+volatile int foo();
+struct A { volatile int i; };
+typedef volatile int vi;
+
+volatile int i;
+
+const int& ir1 = foo();
+//const int& ir2 = A().i; // line 8
+const int& ir3 = static_cast<volatile int>(i);
+const int& ir4 = vi(); // line 10
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref19.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref19.C
new file mode 100644
index 000000000..ed78c939b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref19.C
@@ -0,0 +1,17 @@
+// PR c++/49528
+// { dg-do run }
+
+int d;
+
+struct A
+{
+ int i;
+ ~A() { ++d; };
+};
+
+int main()
+{
+ const int &r = A().i;
+ if (d != 1)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref2.C
new file mode 100644
index 000000000..231ea047f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref2.C
@@ -0,0 +1,10 @@
+struct Base {
+ Base();
+ Base(const Base &);
+ Base & operator = (const Base &);
+};
+
+struct Derived : public Base {};
+
+Derived derived();
+const Base &b = derived();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref20.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref20.C
new file mode 100644
index 000000000..b64cb57e0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref20.C
@@ -0,0 +1,8 @@
+// PR c++/50787
+// { dg-do run }
+
+int main() {
+ const int Ci = 0;
+ const int &rCi = Ci;
+ if (!(&Ci == &rCi)) __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref21.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref21.C
new file mode 100644
index 000000000..db4ac4a30
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref21.C
@@ -0,0 +1,7 @@
+struct A
+{
+ const int &i1;
+ const int &i2;
+};
+
+A a = { 1, 2 };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref3.C
new file mode 100644
index 000000000..776f2d0c5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref3.C
@@ -0,0 +1,12 @@
+struct Base { };
+struct Derived : public Base { };
+struct Choose {
+ operator Base&();
+ operator Derived&();
+};
+
+void f()
+{
+ Choose c;
+ Base& ref = c;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref4.C
new file mode 100644
index 000000000..6b65d9925
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref4.C
@@ -0,0 +1,18 @@
+// { dg-do run }
+
+int c;
+
+struct Base {
+ Base() {}
+ Base(const Base &) { ++c; }
+ Base & operator = (const Base &);
+};
+
+struct Derived : public Base {};
+
+const Base &b = Derived();
+
+int main()
+{
+ return c; // No copies should be required.
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref5.C
new file mode 100644
index 000000000..ad1c30c36
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref5.C
@@ -0,0 +1,12 @@
+struct A { };
+struct B : public A { };
+struct X {
+ operator B();
+};
+X x;
+
+int main()
+{
+ const A& r = x;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref6.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref6.C
new file mode 100644
index 000000000..50a963603
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref6.C
@@ -0,0 +1,12 @@
+struct B {
+ void g() { }
+};
+
+struct A {
+ void f() {
+ B &b = b;
+ b.g();
+ }
+};
+
+int main(void) { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref7.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref7.C
new file mode 100644
index 000000000..0832069e3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref7.C
@@ -0,0 +1,9 @@
+class hop
+{
+public:
+ hop operator* () const;
+};
+int main(void)
+{
+ const hop &x = *x;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref8.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref8.C
new file mode 100644
index 000000000..406cc1040
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref8.C
@@ -0,0 +1,10 @@
+struct A {
+ A operator=(const A&);
+};
+
+A operator*(A, A);
+
+A& operator+=(A& a, const A& b)
+{
+ return a = a * b; // { dg-error "non-const reference" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/ref9.C b/gcc-4.9/gcc/testsuite/g++.dg/init/ref9.C
new file mode 100644
index 000000000..127b7d8e1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/ref9.C
@@ -0,0 +1,36 @@
+// { dg-do run }
+
+struct ex;
+struct basic {
+ int refcount;
+ ex eval() const;
+ basic() : refcount(0) {}
+};
+
+struct ex {
+ basic *bp;
+ ex() : bp(0) { }
+ ex(const basic &);
+ virtual ~ex();
+ void construct_from_basic(const basic &);
+};
+
+ex basic::eval() const {
+ throw 1;
+}
+
+inline ex::ex(const basic &b) { construct_from_basic (b); }
+inline ex::~ex() { if (--bp->refcount == 0) delete bp; }
+void ex::construct_from_basic(const basic &b) {
+ const ex & tmpex = b.eval();
+ bp = tmpex.bp;
+ bp->refcount++;
+}
+
+ex pow() { return basic(); }
+
+int main()
+{
+ try { pow (); } catch (int) {}
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/reference1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/reference1.C
new file mode 100644
index 000000000..7ce5f90fb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/reference1.C
@@ -0,0 +1,11 @@
+// { dg-do compile }
+// This code used to be accepted but it is invalid as there is no
+// value initialization of a reference type.
+// PR c++/36695
+
+int main()
+{
+ typedef int& T;
+ T a = T(); // { dg-error "value-initialization of reference" }
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/reference2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/reference2.C
new file mode 100644
index 000000000..42f537426
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/reference2.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// This code used to be accepted but it is invalid as there is no
+// value initialization of a reference type.
+// PR c++/36695
+
+// We should we able to diagnostic this without instantiating the template
+template <int a1>
+int f()
+{
+ typedef int& T;
+ T a = T(); // { dg-error "value-initialization of reference" }
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/reference3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/reference3.C
new file mode 100644
index 000000000..8cc5afd6f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/reference3.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// This code used to be accepted but it is invalid as there is no
+// value initialization of a reference type.
+// PR c++/36695
+
+template <typename T>
+T f()
+{
+ T a = T(); // { dg-error "value-initialization of reference" }
+}
+
+int &a = f<int&>(); // { dg-message "required from here" }
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/save1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/save1.C
new file mode 100644
index 000000000..2358eb50c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/save1.C
@@ -0,0 +1,20 @@
+// PR c++/8748
+// We were wrapping the ARRAY_REF in a SAVE_EXPR, causing us to try to make a bitwise
+// copy of b[0].
+
+struct A
+{
+ int i;
+};
+
+struct B : A
+{
+ virtual ~B();
+};
+
+struct C
+{
+ B b[1];
+};
+
+void foo() { C().b[0].i; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/self1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/self1.C
new file mode 100644
index 000000000..dd37c8e60
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/self1.C
@@ -0,0 +1,19 @@
+// PR c++/29106
+// { dg-do run }
+
+int i;
+
+void f(__SIZE_TYPE__) {
+ i = 3;
+}
+
+
+int main()
+{
+ int* const savepos = sizeof(*savepos) ? 0 : 0;
+
+ f (sizeof (*savepos));
+
+ if (i != 3)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/static-init1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/static-init1.C
new file mode 100644
index 000000000..298d17140
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/static-init1.C
@@ -0,0 +1,5 @@
+// Related to the patch for 38880.
+// Make sure we don't think we can initialize a at compile time.
+
+char c;
+short a[] = { (short)((__PTRDIFF_TYPE__)&c + (__PTRDIFF_TYPE__)&c) };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/static-init2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/static-init2.C
new file mode 100644
index 000000000..34bf2b238
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/static-init2.C
@@ -0,0 +1,3 @@
+// PR c++/36912
+// { dg-options -frounding-math }
+const double c = .1, d = c+1;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/static-init3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/static-init3.C
new file mode 100644
index 000000000..9f89c3119
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/static-init3.C
@@ -0,0 +1,9 @@
+// PR c++/55137
+// s should have constant initialization.
+// { dg-final { scan-assembler-not "GLOBAL" } }
+
+struct S {
+ int b;
+};
+
+struct S s = { -1 + (int)(sizeof(int) - 1) };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/static1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/static1.C
new file mode 100644
index 000000000..7609215dd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/static1.C
@@ -0,0 +1,4 @@
+struct A {
+ static const int size = BOGUS; // { dg-error "" }
+};
+const int A::size;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/static2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/static2.C
new file mode 100644
index 000000000..b0344f480
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/static2.C
@@ -0,0 +1,25 @@
+// PR 14804
+// { dg-do run }
+
+struct A {
+ virtual void foo() = 0;
+};
+
+struct B : public A {
+ virtual void bar() = 0;
+};
+
+typedef void (A::*mfptr)();
+
+struct D {
+ mfptr p;
+};
+
+static const D ds[] = {
+ { reinterpret_cast<mfptr>(&B::bar) },
+};
+
+int main()
+{
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/static3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/static3.C
new file mode 100644
index 000000000..8fac85fbc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/static3.C
@@ -0,0 +1,26 @@
+// { dg-do run }
+
+struct T
+{
+ static void (*handler)();
+ static void func() {}
+};
+
+bool fail;
+
+struct S {
+ S() {
+ if (T::handler != T::func)
+ fail = true;
+ }
+};
+
+static S s;
+
+void (*T::handler)() = func;
+
+int main()
+{
+ if (fail)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/static4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/static4.C
new file mode 100644
index 000000000..0cdc48b0e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/static4.C
@@ -0,0 +1,6 @@
+// PR c++/51461
+
+struct A
+{
+ static const A a = 0; // { dg-error "incomplete|non-integral" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/string1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/string1.C
new file mode 100644
index 000000000..597b8619e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/string1.C
@@ -0,0 +1,8 @@
+extern void f (char*);
+
+extern const char * const target = "foo";
+
+void g ()
+{
+ f (target); // { dg-error "conversion" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/struct1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/struct1.C
new file mode 100644
index 000000000..e23faef50
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/struct1.C
@@ -0,0 +1,6 @@
+struct bug {
+ const char *name;
+ __SIZE_TYPE__ type;
+};
+
+struct bug s = { 0, (__SIZE_TYPE__) &s | 1 };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/struct2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/struct2.C
new file mode 100644
index 000000000..85aacc6fa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/struct2.C
@@ -0,0 +1,22 @@
+/* PR c++/23180. */
+/* Initialize a local structure with an expression that attempts to use
+ pointer arithmetic to calculate another structure field offset. */
+
+void saveLoadEntries(const void *);
+
+void saveOrLoad() {
+ struct Track {
+ char soundName[15];
+ };
+ struct SaveLoadEntry {
+ int offs;
+ int type;
+ int size;
+ };
+
+ SaveLoadEntry trackEntries = {
+ ((long) (__SIZE_TYPE__) (&((Track *) 42)->soundName[0])) - 42,
+ 0, 1
+ };
+ saveLoadEntries(&trackEntries);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/struct3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/struct3.C
new file mode 100644
index 000000000..53804b3d1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/struct3.C
@@ -0,0 +1,15 @@
+/* PR c++/23180. */
+/* Initialize a global variable with an expression that attempts to use
+ pointer arithmetic to calculate a structure field offset. */
+
+struct Track {
+ char soundName[15];
+};
+
+struct SaveLoadEntry {
+ int offs;
+ int type;
+ int size;
+};
+
+int foobar = ((long) (__SIZE_TYPE__) (& ((Track *) 42)->soundName[0])) - 42;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/switch1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/switch1.C
new file mode 100644
index 000000000..b0b06b748
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/switch1.C
@@ -0,0 +1,8 @@
+int f(int c)
+{
+ switch (c)
+ {
+ case d: /* { dg-error "'d' was not declared" } */
+ int optBzip2 = true;
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/synth1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/synth1.C
new file mode 100644
index 000000000..6c00bc022
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/synth1.C
@@ -0,0 +1,17 @@
+// PR middle-end/17525
+
+struct A
+{
+ ~A();
+ int a;
+};
+
+struct B : public A
+{
+ virtual ~B();
+};
+
+void run (B& b, B& b1)
+{
+ b1 = b;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/synth2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/synth2.C
new file mode 100644
index 000000000..ed5046715
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/synth2.C
@@ -0,0 +1,18 @@
+// PR c++/34180
+
+struct G {
+ G(); // { dg-message "" "candidate" }
+ G(G&); // { dg-message "" "candidate" }
+};
+
+class A // { dg-error "" }
+// { dg-message "candidate" "candidate note" { target *-*-* } 8 }
+{
+ const G g;
+};
+
+int main()
+{
+ A a;
+ A b = a; // { dg-message "required here|deleted" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/synth3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/synth3.C
new file mode 100644
index 000000000..d656ddb2e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/synth3.C
@@ -0,0 +1,21 @@
+// Test that synthesizing the C copy constructor doesn't require B<int> to
+// be complete.
+
+template <class T>
+struct B
+{
+ typename T::NT nt;
+};
+
+struct A
+{
+ A ();
+ A (const A&);
+ A (const B<int>&);
+};
+
+struct C: A { };
+
+C c;
+C c2(c);
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/synth4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/synth4.C
new file mode 100644
index 000000000..2b0b0b95a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/synth4.C
@@ -0,0 +1,18 @@
+// PR c++/45822
+
+struct A
+{
+ A(int);
+};
+
+struct B
+{
+ B(A = 0);
+};
+
+struct C
+{
+ B b;
+};
+
+C c;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/uninitialized1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/uninitialized1.C
new file mode 100644
index 000000000..1e4f7ae84
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/uninitialized1.C
@@ -0,0 +1,12 @@
+// PR c++/58126
+
+struct A { // { dg-error "uninitialized" "" { target c++11 } }
+ const int value1;
+ int& value2;
+};
+
+struct B : A { }; // { dg-error "deleted" "" { target c++11 } }
+
+A a; // { dg-error "deleted|uninitialized const member in 'struct A'|uninitialized reference member in 'struct A'" }
+
+B b; // { dg-error "deleted|uninitialized const member in base 'struct A' of 'struct B'|uninitialized reference member in base 'struct A' of 'struct B'" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/union1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/union1.C
new file mode 100644
index 000000000..0049f4429
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/union1.C
@@ -0,0 +1,5 @@
+// PR c++/14401
+
+union U {
+ int& i; // { dg-error "" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/union2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/union2.C
new file mode 100644
index 000000000..ac39f6092
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/union2.C
@@ -0,0 +1,13 @@
+// PR c++/15938
+// { dg-do compile }
+// { dg-options "" }
+
+typedef union
+{
+ struct { int i; };
+ struct { char c; };
+} A;
+
+A a = { 0 };
+A b = {{ 0 }};
+A c = {{{ 0 }}}; // { dg-error "braces" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/value1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/value1.C
new file mode 100644
index 000000000..9dbc2e067
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/value1.C
@@ -0,0 +1,22 @@
+// Test that with value-initialization, i is initialized to 0
+// and the vtable pointer is properly initialized.
+
+// { dg-do run }
+
+struct A
+{
+ int i;
+ virtual void f() {}
+};
+
+void f (A& a)
+{
+ a.f();
+}
+
+int main()
+{
+ A a = A();
+ f (a);
+ return a.i;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/value10.C b/gcc-4.9/gcc/testsuite/g++.dg/init/value10.C
new file mode 100644
index 000000000..2066410a0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/value10.C
@@ -0,0 +1,27 @@
+// PR c++/51331
+// { dg-do run }
+
+struct A {
+ A(): x(10) {}
+ virtual ~A() {}
+
+ int x;
+};
+
+struct B: public virtual A {
+};
+
+struct C: public virtual A {
+};
+
+struct D: public B, virtual public C {
+ D(): B(), C() {} // note an explicit call to C() which is auto-generated
+};
+
+int main() {
+ D* d = new D();
+
+ // Crashes here with the following message:
+ // *** glibc detected *** ./test: free(): invalid next size (fast)
+ delete d;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/value2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/value2.C
new file mode 100644
index 000000000..fbe166471
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/value2.C
@@ -0,0 +1,23 @@
+// PR c++/35116
+// Test that break_out_target_exprs works properly with complex
+// value-initialization.
+
+struct A
+{
+ virtual void f ();
+};
+
+struct B
+{
+ A a;
+};
+
+struct C
+{
+ C (int, B = B());
+};
+
+void f ()
+{
+ C c (4);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/value3.C b/gcc-4.9/gcc/testsuite/g++.dg/init/value3.C
new file mode 100644
index 000000000..487baabec
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/value3.C
@@ -0,0 +1,31 @@
+// Testcase for value-initialization in new-expressions.
+// { dg-do run }
+
+#include <stdlib.h>
+#include <string.h>
+
+// Make sure that we return memory that isn't already set to 0.
+void *operator new(size_t s)
+{
+ void *p = malloc (s);
+ memset (p, 42, s);
+ return p;
+}
+
+struct A { A() {} ~A() {} };
+struct B { A a; int i; };
+
+int main()
+{
+ B *p = new B();
+ if (p->i != 0)
+ abort();
+
+ p = new B[2]();
+ if (p[0].i != 0 || p[1].i != 0)
+ abort();
+
+ B(*p2)[2] = new B[2][2]();
+ if (p2[0][0].i != 0 || p2[0][1].i != 0)
+ abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/value4.C b/gcc-4.9/gcc/testsuite/g++.dg/init/value4.C
new file mode 100644
index 000000000..fa7a02cc7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/value4.C
@@ -0,0 +1,35 @@
+// PR c++/38233
+
+template<class _T1, class _T2>
+ struct pair
+ {
+ _T1 first;
+ _T2 second;
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 265. std::pair::pair() effects overly restrictive
+ /** The default constructor creates @c first and @c second using their
+ * respective default constructors. */
+ pair()
+ : first(), second() { }
+};
+
+class a {
+ public:
+ a();
+};
+
+class b {
+ public:
+ // implicit default ctor
+ bool operator<(const b& rhs) const;
+
+ private:
+ a a_val;
+};
+
+typedef pair<const b, int> my_pair;
+
+void func() {
+ my_pair x;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/value5.C b/gcc-4.9/gcc/testsuite/g++.dg/init/value5.C
new file mode 100644
index 000000000..d705f87b6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/value5.C
@@ -0,0 +1,17 @@
+// PR c++/38232
+
+class base {
+ public:
+ base();
+ virtual ~base();
+
+ private:
+ int& int_ref; // initialized by base ctor, not visible here
+};
+
+class derived : public base {
+};
+
+base *make_derived() {
+ return new derived();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/value6.C b/gcc-4.9/gcc/testsuite/g++.dg/init/value6.C
new file mode 100644
index 000000000..d7d29bf0a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/value6.C
@@ -0,0 +1,13 @@
+// PR c++/39109
+
+struct N
+{
+ private:
+ virtual ~N ();
+};
+
+N *
+foo ()
+{
+ return new N ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/value7.C b/gcc-4.9/gcc/testsuite/g++.dg/init/value7.C
new file mode 100644
index 000000000..c79de4a68
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/value7.C
@@ -0,0 +1,17 @@
+// PR c++/30111
+// { dg-do run }
+
+struct pod {
+ int i;
+};
+
+struct inherit : pod {
+ inherit() : pod() {}
+};
+
+int main()
+{
+ inherit i;
+ return i.i != 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/value8.C b/gcc-4.9/gcc/testsuite/g++.dg/init/value8.C
new file mode 100644
index 000000000..0a9b90b64
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/value8.C
@@ -0,0 +1,19 @@
+// PR c++/45315
+
+struct A
+{
+ A ();
+};
+
+template < int > struct B : A
+{
+ void foo ()
+ {
+ new B < 0 > ();
+ }
+};
+
+int main()
+{
+ B<1>().foo();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/value9.C b/gcc-4.9/gcc/testsuite/g++.dg/init/value9.C
new file mode 100644
index 000000000..4899bd810
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/value9.C
@@ -0,0 +1,32 @@
+// PR c++/50793
+// { dg-do run }
+
+struct NonTrivial
+{
+ NonTrivial() { }
+};
+
+struct S
+{
+ NonTrivial nt;
+ int i;
+};
+
+int f(S s)
+{
+ s.i = 0xdeadbeef;
+ return s.i;
+}
+
+int g(S s = S())
+{
+ return s.i;
+}
+
+int main()
+{
+ f(S()); // make stack dirty
+
+ if ( g() )
+ __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/vbase1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/vbase1.C
new file mode 100644
index 000000000..bbfd58f5c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/vbase1.C
@@ -0,0 +1,39 @@
+// PR c++/50618
+// { dg-do run }
+
+struct Base
+{
+ const int text;
+ Base():text(1) {}
+ Base(int aText)
+ : text(aText) {}
+};
+struct SubA : public virtual Base
+{
+protected:
+ int x;
+public:
+ SubA(int aX)
+ : x(aX) {}
+};
+class SubB : public virtual Base
+{};
+struct Diamond : public SubA, public SubB
+{
+ Diamond(int text)
+ : Base(text), SubA(5), SubB() {}
+
+ void printText()
+ {
+ if(text != 2)
+ __builtin_abort();
+ if(x!=5)
+ __builtin_abort();
+ }
+};
+
+int main(int, char**)
+{
+ Diamond x(2);
+ x.printText();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/vector1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/vector1.C
new file mode 100644
index 000000000..f33df2a92
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/vector1.C
@@ -0,0 +1,79 @@
+// PR c++/19263
+// { dg-do run }
+// { dg-options "-O2 -fpermissive" }
+// { dg-prune-output "narrowing" }
+
+typedef signed char v8qi __attribute__ ((vector_size (8)));
+
+extern "C" void abort (void);
+
+static unsigned char S[16];
+
+struct A
+{
+ int i;
+ v8qi j, k;
+ int l;
+};
+
+void
+foo (unsigned char v)
+{
+ A a = { 1, { v, v, v, v, v, v, v, v },
+ { v + 1, v + 1, v + 1, v + 1, v + 1, v + 1, v + 1, v + 1 }, 3 };
+ v8qi *s = (v8qi *) &S[0];
+ *s = a.j;
+ s[1] = a.k;
+}
+
+void
+bar (unsigned char v)
+{
+ v8qi val8 = { v, v, v, v, v, v, v, v };
+ v8qi *s = (v8qi *) &S[0];
+ *s = val8;
+}
+
+int n = 5, cnt;
+
+int
+num (void)
+{
+ ++cnt;
+ return n;
+}
+
+void
+baz (void)
+{
+ static A a = { 0, { num (), num (), num (), num (), 6, 6, 6, 6 },
+ { 7, 7, 7, 7, 8, 8, 8, 8 }, 0 };
+ v8qi *s = (v8qi *) &S[0];
+ *s = a.j;
+ s[1] = a.k;
+}
+
+int
+main ()
+{
+ int i;
+ foo (1);
+ for (i = 0; i < 8; ++i)
+ if (S[i] != 1)
+ abort ();
+ for (; i < 16; ++i)
+ if (S[i] != 2)
+ abort ();
+ bar (3);
+ for (i = 0; i < 8; ++i)
+ if (S[i] != 3)
+ abort ();
+ return 0;
+ baz ();
+ if (cnt != 4)
+ abort ();
+ for (i = 0; i < 16; ++i)
+ if (S[i] != 5 + (i / 4))
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/void1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/void1.C
new file mode 100644
index 000000000..ed41a90de
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/void1.C
@@ -0,0 +1,6 @@
+// PR c++/48569
+
+int main()
+{
+ void();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/volatile1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/volatile1.C
new file mode 100644
index 000000000..9080ed5dc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/volatile1.C
@@ -0,0 +1,16 @@
+// PR c++/26577
+// The call to bar() was causing an inappropriate dereference of *this,
+// which led to an abort in cp_expr_size.
+
+struct A
+{
+ A(const A&);
+ A& operator=(const A&);
+ static void bar();
+ void baz() volatile;
+};
+
+void A::baz() volatile
+{
+ bar();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/volatile2.C b/gcc-4.9/gcc/testsuite/g++.dg/init/volatile2.C
new file mode 100644
index 000000000..036d5f162
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/volatile2.C
@@ -0,0 +1,13 @@
+// PR c++/47003
+
+struct A
+{
+ A(int);
+};
+
+volatile int i;
+
+int main()
+{
+ A *q = new A (i);
+}