aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8.1/gcc/testsuite/g++.dg/abi
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8.1/gcc/testsuite/g++.dg/abi')
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/aarch64_guard1.C17
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag1.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag2.C5
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag3.C36
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag4.C8
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/align1.C27
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/anon1.C5
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C34
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_cxa_vec2.C41
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_rtti1.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list.C15
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list2.C7
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list2.h4
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield1.C34
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield10.C5
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield11.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield12.C5
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield2.C34
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield3.C86
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield4.C41
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield5.C15
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield6.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield7.C7
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield8.C22
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield9.C12
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/cookie1.C15
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/cookie2.C16
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant1.C26
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant2.C32
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant3.C85
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant4.C46
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant5.C52
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant6.C34
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/dcast1.C29
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/dtor1.C23
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/dtor2.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty10.C28
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty11.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty4.C86
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty5.C17
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty6.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty7.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty8.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty9.C17
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/enum1.C16
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/forced.C25
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard1.C10
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard2.C16
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard3.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/inline1.C6
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/key1.C26
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/key2.C16
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout1.C31
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout2.C33
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout3.C27
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout4.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/local1-a.cc14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/local1.C22
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/local2.C17
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro0.C5
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro1.C5
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro2.C5
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle-neon-aarch64.C55
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle-neon.C49
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle1.C28
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle10.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle11.C10
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle12.C11
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle13.C28
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle14.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle15.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle16.C18
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle17.C11
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle18-1.C23
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle18-2.C23
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle19-1.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle19-2.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle2.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle20-1.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle20-2.C16
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle21.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle22.C9
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle23.C9
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle24.C12
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle25.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle26.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle27.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle28.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle29.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle3-2.C20
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle3.C20
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle30.C22
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle31.C35
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle32.C44
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle33.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle34.C41
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle35.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle36.C9
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle37.C35
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle39.C28
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle40.C28
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle41.C8
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle42.C15
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle43.C43
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle44.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle45.C25
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle46.C15
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle47.C11
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle48.C29
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle49.C22
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle5.C6
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle50.C25
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle51.C27
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle52.C21
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle53.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle54.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle55.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle56.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle57.C16
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle58.C25
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle59.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle6.C23
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle60.C20
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle61.C28
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle7.C6
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle8.C16
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle9.C12
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/noreturn1.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/noreturn2.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/offsetof.C22
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/packed1.C24
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/param1.C28
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/param2.C19
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1.h11
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1a.C12
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1b.C15
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2.h12
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2a.C12
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2b.C15
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3.h11
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3a.C12
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3b.C15
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/pragma-pack1.C37
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/regparm1.C51
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti1.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti2.C12
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti3.C16
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/structret1.C31
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk1.C24
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk2.C27
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk3.C22
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk4.C25
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk5.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vague1.C17
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase1.C60
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase10.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase11.C13
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase12.C14
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase13.C17
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase14.C6
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase15.C30
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-10.C75
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-21.C75
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-22.C80
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-4.C78
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase9.C29
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vcall1.C36
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk1.C45
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk2.C17
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk3.C27
-rw-r--r--gcc-4.8.1/gcc/testsuite/g++.dg/abi/vtt1.C11
171 files changed, 3857 insertions, 0 deletions
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/aarch64_guard1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/aarch64_guard1.C
new file mode 100644
index 000000000..ca1778b87
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/aarch64_guard1.C
@@ -0,0 +1,17 @@
+// Check that the initialization guard variable is an 8-byte aligned,
+// 8-byte doubleword and that only the least significant bit is used
+// for initialization guard variables.
+// { dg-do compile { target aarch64*-*-* } }
+// { dg-options "-O -fdump-tree-original -fno-section-anchors" }
+
+int bar();
+
+int *foo ()
+{
+ static int x = bar ();
+ return &x;
+}
+
+// { dg-final { scan-assembler _ZGVZ3foovE1x,8,8 } }
+// { dg-final { scan-tree-dump "_ZGVZ3foovE1x & 1" "original" } }
+// { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag1.C
new file mode 100644
index 000000000..942929cdd
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag1.C
@@ -0,0 +1,19 @@
+// { dg-options "-Wabi-tag" }
+
+// { dg-final { scan-assembler "_Z1fB3barB3fooi" } }
+void f(int) __attribute ((abi_tag ("foo","bar")));
+
+struct __attribute ((abi_tag ("bar"))) A { };
+
+struct B: A { }; // { dg-warning "bar. abi tag" }
+struct D { A* ap; }; // { dg-warning "bar. abi tag" }
+
+// { dg-final { scan-assembler "_Z1gB3baz1AB3bar" } }
+void g(A) __attribute ((abi_tag ("baz")));
+void g(A) __attribute ((abi_tag ("baz")));
+
+int main()
+{
+ f(42);
+ g(A());
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag2.C
new file mode 100644
index 000000000..0e92dcc1d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag2.C
@@ -0,0 +1,5 @@
+void f(int);
+void f(int) __attribute ((abi_tag ("foo"))); // { dg-error "adds abi tag" }
+
+struct C;
+struct __attribute ((abi_tag ("foo"))) C; // { dg-error "adds abi tag" }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag3.C
new file mode 100644
index 000000000..05fd58e94
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag3.C
@@ -0,0 +1,36 @@
+// An explicit specialization doesn't get the tag from its template unless
+// it is specified there, too.
+
+// { dg-final { scan-assembler "_ZN3FooB5cxx11IcE1fEv" } }
+template<typename T>
+struct __attribute ((abi_tag("cxx11"))) Foo
+{
+ int f();
+};
+
+// { dg-final { scan-assembler "_ZN3FooB5cxx11IiE1fEv" } }
+template<>
+struct
+__attribute ((abi_tag("cxx11")))
+Foo<int>
+{
+ int f();
+};
+
+// { dg-final { scan-assembler "_ZN3FooIdE1fEv" } }
+template<>
+struct
+Foo<double>
+{
+ int f();
+};
+
+int main()
+{
+ Foo<int> f;
+ f.f();
+ Foo<char> f1;
+ f1.f();
+ Foo<double> f2;
+ f2.f();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag4.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag4.C
new file mode 100644
index 000000000..3f8d7bfbc
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/abi-tag4.C
@@ -0,0 +1,8 @@
+// { dg-options "-Wabi-tag" }
+
+struct __attribute ((abi_tag ("X"))) A { };
+
+struct B // { dg-warning "abi tag" }
+{
+ virtual void f(A); // { dg-message "declared here" }
+};
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/align1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/align1.C
new file mode 100644
index 000000000..2a70bce60
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/align1.C
@@ -0,0 +1,27 @@
+// This was failuring on powerpc-darwin and powerpc-aix as
+// we were taking the embeded type as the first field decl.
+// This was PR target/18761.
+// { dg-do run }
+
+
+union A {
+ double d;
+};
+union B {
+ enum E { e };
+ double d;
+};
+struct AlignA {
+ char c;
+ A a;
+};
+struct AlignB {
+ char c;
+ B b;
+};
+extern "C" void abort ();
+int main () {
+ if ( __alignof__ (AlignA) != __alignof__ (AlignB))
+ abort ();
+}
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/anon1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/anon1.C
new file mode 100644
index 000000000..c45917a1b
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/anon1.C
@@ -0,0 +1,5 @@
+// PR c++/54883
+
+namespace { enum E { E1 }; } void f(E e) { }
+
+// { dg-final { scan-assembler-not "globl" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C
new file mode 100644
index 000000000..4c462d5f3
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C
@@ -0,0 +1,34 @@
+// Check that __cxa_vec_[c]ctor returns a pointer to the array
+// { dg-do run { target arm*-*-* } }
+
+#include <cxxabi.h>
+
+#ifdef __ARM_EABI__
+using namespace __cxxabiv1;
+static __cxa_cdtor_return_type cctor (void * a, void * b)
+{
+ *(char *) a = *(char *) b;
+ return a;
+}
+
+int main()
+{
+ char data;
+ char data2;
+ char *p;
+
+ p = (char *) __cxa_vec_ctor (&data, 1, 1, NULL, NULL);
+ if (p != &data)
+ return 1;
+ p = (char *) __cxa_vec_cctor (&data2, &data, 1, 1, cctor, NULL);
+ if (p != &data2)
+ return 1;
+
+ return 0;
+}
+#else
+int main()
+{
+ return 0;
+}
+#endif
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_cxa_vec2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_cxa_vec2.C
new file mode 100644
index 000000000..76f327aca
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_cxa_vec2.C
@@ -0,0 +1,41 @@
+// Check that ARM vector delete functions accept NULL pointers as
+// inputs.
+// { dg-do run { target arm*-*-* } }
+
+#ifdef __ARM_EABI__
+#include <cxxabi.h>
+
+typedef void *(dtor_type)(void *);
+
+extern "C" {
+ void abort();
+ void *__aeabi_vec_dtor_cookie(void *, dtor_type);
+ void __aeabi_vec_delete(void *, dtor_type);
+ void __aeabi_vec_delete3(void *,
+ dtor_type,
+ void (*)(void *, __SIZE_TYPE__));
+ void __aeabi_vec_delete3_nodtor(void *,
+ void (*)(void *, __SIZE_TYPE__));
+}
+
+// These functions should never be called.
+void* dtor(void *)
+{
+ abort ();
+}
+
+void dealloc(void *, size_t) {
+ abort ();
+}
+
+int main () {
+ if (__aeabi_vec_dtor_cookie (NULL, &dtor) != NULL)
+ return 1;
+ // These do not return values, but should not crash.
+ __aeabi_vec_delete (NULL, &dtor);
+ __aeabi_vec_delete3 (NULL, &dtor, &dealloc);
+ __aeabi_vec_delete3_nodtor (NULL, &dealloc);
+}
+#else
+int main () {}
+#endif
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_rtti1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_rtti1.C
new file mode 100644
index 000000000..a481bdd1f
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_rtti1.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target arm*-*-eabi* arm*-*-symbianelf* } }
+// { dg-options "-O2" }
+// Check that, even when optimizing, we emit an out-of-line call to
+// the type-info comparison function.
+// { dg-final { scan-assembler _ZNKSt9type_infoeqERKS_ } }
+
+#include <typeinfo>
+
+extern const std::type_info& t1;
+extern const std::type_info& t2;
+
+bool f() {
+ return t1 == t2;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list.C
new file mode 100644
index 000000000..4f6f3a46d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target { aarch64*-*-* arm*-*-* } } }
+// { dg-options "-Wno-abi" }
+// { dg-require-effective-target arm_eabi { target arm*-*-* } }
+
+// AAPCS \S 7.1.4 requires that va_list be a typedef for "struct
+// __va_list". The mangling is as if it were "std::__va_list".
+// AAPCS64 \S 7.1.4 has the same requirement for AArch64 targets.
+// #include <stdarg.h>
+typedef __builtin_va_list va_list;
+
+// { dg-final { scan-assembler "\n_Z1fPSt9__va_list:" } }
+void f(va_list*) {}
+
+// { dg-final { scan-assembler "\n_Z1gSt9__va_listS_:" } }
+void g(va_list, va_list) {}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list2.C
new file mode 100644
index 000000000..f5e4ca43d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list2.C
@@ -0,0 +1,7 @@
+// { dg-do compile }
+// { dg-options "-Wpsabi" }
+// { dg-require-effective-target arm_eabi }
+
+#include <stdarg.h>
+#include "arm_va_list2.h"
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list2.h b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list2.h
new file mode 100644
index 000000000..ebfb2deac
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/arm_va_list2.h
@@ -0,0 +1,4 @@
+// The mangling of va_list changed in GCC 4.4. We want to warn about
+// that -- but not in a system header.
+#pragma GCC system_header
+void f(va_list) {}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield1.C
new file mode 100644
index 000000000..d5d04bcd7
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield1.C
@@ -0,0 +1,34 @@
+// { dg-do run }
+// { dg-options "-ansi -pedantic-errors -funsigned-bitfields" }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 15 Dec 2001 <nathan@codesourcery.com>
+
+typedef int Int;
+typedef signed int SInt;
+typedef unsigned int UInt;
+
+struct A
+{
+ SInt bitS : 1; // signed
+ UInt bitU : 1; // unsigned
+ Int bit : 1; // signedness by -f{signed,unsigned}-bitfields
+};
+
+int main ()
+{
+ A a;
+
+ a.bitS = 1; // { dg-warning "overflow" }
+ a.bitU = 1;
+ a.bit = 1;
+
+ if (a.bitS != -1)
+ return 1;
+ if (a.bitU != 1)
+ return 2;
+ if (a.bit != 1)
+ return 3;
+
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield10.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield10.C
new file mode 100644
index 000000000..df40fa3f2
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield10.C
@@ -0,0 +1,5 @@
+// { dg-options "-w" }
+
+struct S {
+ int i : 64;
+};
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield11.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield11.C
new file mode 100644
index 000000000..e78ea121d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield11.C
@@ -0,0 +1,14 @@
+// { dg-do run }
+// { dg-options "-w -fabi-version=0" }
+
+struct S {
+ char c : 1024;
+};
+
+S s;
+
+int main () {
+ s.c = 1;
+ if (*(char *)&s != 1)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield12.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield12.C
new file mode 100644
index 000000000..6cfda5d47
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield12.C
@@ -0,0 +1,5 @@
+// { dg-options "-Wabi -fabi-version=1" }
+
+struct S { // { dg-warning "ABI" }
+ char c : 1024; // { dg-warning "width" }
+};
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield2.C
new file mode 100644
index 000000000..452861ec2
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield2.C
@@ -0,0 +1,34 @@
+// { dg-do run }
+// { dg-options "-ansi -pedantic-errors -fsigned-bitfields" }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 15 Dec 2001 <nathan@codesourcery.com>
+
+typedef int Int;
+typedef signed int SInt;
+typedef unsigned int UInt;
+
+struct A
+{
+ SInt bitS : 1; // signed
+ UInt bitU : 1; // unsigned
+ Int bit : 1; // signedness by -f{signed,unsigned}-bitfields
+};
+
+int main ()
+{
+ A a;
+
+ a.bitS = 1; // { dg-warning "overflow" }
+ a.bitU = 1;
+ a.bit = 1; // { dg-warning "overflow" }
+
+ if (a.bitS != -1)
+ return 1;
+ if (a.bitU != 1)
+ return 2;
+ if (a.bit != -1)
+ return 3;
+
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield3.C
new file mode 100644
index 000000000..6908ab6e7
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield3.C
@@ -0,0 +1,86 @@
+// Test for oversized bitfield alignment in structs on IA-32
+// { dg-do run { target { { i?86-*-* x86_64-*-* } && ia32 } } }
+// { dg-options "-O2" }
+// Cygwin and mingw default to MASK_ALIGN_DOUBLE. Override to ensure
+// 4-byte alignment.
+// { dg-additional-options "-mno-align-double" { target i?86-*-cygwin* i?86-*-mingw* } }
+// As for mingw target the ms-bitfield switch is activated by default,
+// make sure for this test that it is disabled.
+// { dg-additional-options "-mno-ms-bitfields" { target i?86-*-mingw* } }
+
+struct A
+{
+ char a;
+ int b : 224; // { dg-warning "exceeds its type" "" }
+ char c;
+} a, a4[4];
+
+struct B
+{
+ char d;
+ A e;
+ char f;
+} b;
+
+struct C
+{
+ char g;
+ long long h : 64;
+ char i;
+} c, c4[4];
+
+struct D
+{
+ char j;
+ C k;
+ char l;
+} d;
+
+struct E
+{
+ char m;
+ long long n : 160; // { dg-warning "exceeds its type" "" }
+ char o;
+} e, e4[4];
+
+struct F
+{
+ char p;
+ E q;
+ char r;
+} f;
+
+int main (void)
+{
+ if (&a.c - &a.a != 32)
+ return 1;
+ if (sizeof (a) != 36)
+ return 2;
+ if (sizeof (a4) != 4 * 36)
+ return 3;
+ if (sizeof (b) != 2 * 4 + 36)
+ return 4;
+ if (__alignof__ (b.e) != 4)
+ return 5;
+ if (&c.i - &c.g != 12)
+ return 6;
+ if (sizeof (c) != 16)
+ return 7;
+ if (sizeof (c4) != 4 * 16)
+ return 8;
+ if (sizeof (d) != 2 * 4 + 16)
+ return 9;
+ if (__alignof__ (d.k) != 4)
+ return 10;
+ if (&e.o - &e.m != 24)
+ return 11;
+ if (sizeof (e) != 28)
+ return 12;
+ if (sizeof (e4) != 4 * 28)
+ return 13;
+ if (sizeof (f) != 2 * 4 + 28)
+ return 14;
+ if (__alignof__ (f.q) != 4)
+ return 15;
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield4.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield4.C
new file mode 100644
index 000000000..5434dd973
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield4.C
@@ -0,0 +1,41 @@
+/* { dg-do run { target { pcc_bitfield_type_matters || default_packed } } } */
+
+/* Check bitfields and non-bitfields are aligned & sized similarly.
+
+ Copyright (C) 2002 Free Software Foundation Inc
+ Contributed by Nathan Sidwell <nathan@codesourcery.com>
+*/
+
+#include <limits.h>
+#include <stdio.h>
+
+static int fail;
+
+#define CHECK1(N, T) do { \
+ typedef struct Field_##N { char c; T f; } Field_##N; \
+ typedef struct BitField_##N { char c; T f : sizeof (T) * CHAR_BIT; } BitField_##N; \
+ if (sizeof (Field_##N) != sizeof (BitField_##N)) { \
+ fail = 1; printf ("sizeof %s failed\n", #T); \
+ } \
+ if (__alignof__ (Field_##N) != __alignof__ (BitField_##N)) { \
+ fail = 1; printf ("__alignof__ %s failed\n", #T); \
+ } \
+} while (0)
+
+#define CHECK(N, T) do { \
+ CHECK1(N, T); \
+ CHECK1 (s##N, signed T); \
+ CHECK1 (u##N, unsigned T); \
+} while (0)
+
+int main ()
+{
+
+ CHECK (c, char);
+ CHECK (s, short);
+ CHECK (i, int);
+ CHECK (l, long);
+ CHECK (ll, long long);
+
+ return fail;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield5.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield5.C
new file mode 100644
index 000000000..531314014
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield5.C
@@ -0,0 +1,15 @@
+// { dg-do compile }
+// { dg-options "-Wabi -fabi-version=1" }
+// { dg-options "-Wabi -fabi-version=1 -mno-ms-bitfields" { target i?86-*-* x86_64-*-* } }
+
+struct A {
+ virtual void f();
+ int f1 : 1;
+};
+
+struct B : public A {
+ int f2 : 1; // { dg-warning "ABI" }
+ int : 0;
+ int f3 : 4;
+ int f4 : 3;
+};
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield6.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield6.C
new file mode 100644
index 000000000..50f76ab82
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield6.C
@@ -0,0 +1,14 @@
+// { dg-do run }
+// { dg-options "-w -fabi-version=0" }
+
+#include <limits>
+
+union U {
+ int i: 4096;
+};
+
+int main () {
+ if (sizeof (U) * std::numeric_limits<unsigned char>::digits != 4096)
+ return 1;
+}
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield7.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield7.C
new file mode 100644
index 000000000..b5b656ffa
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield7.C
@@ -0,0 +1,7 @@
+// { dg-do compile }
+// { dg-options "-Wabi -fabi-version=1" }
+
+union U { // { dg-warning "ABI" }
+ int i: 4096; // { dg-warning "exceeds" }
+};
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield8.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield8.C
new file mode 100644
index 000000000..58e74be08
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield8.C
@@ -0,0 +1,22 @@
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-options "-fabi-version=0" }
+// { dg-require-effective-target ilp32 }
+
+
+struct A {
+ virtual void f() {}
+ int f1 : 1;
+};
+
+struct B : public A {
+ int f2 : 31;
+ int f3 : 4;
+ int f4 : 3;
+};
+
+int main ()
+{
+ if (sizeof (B) != 16)
+ return 1;
+}
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield9.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield9.C
new file mode 100644
index 000000000..0d3a8bf89
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/bitfield9.C
@@ -0,0 +1,12 @@
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+// { dg-options -w }
+
+struct X {
+ char : 45;
+};
+
+int main () {
+ if (__alignof__ (X) != 4)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/cookie1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/cookie1.C
new file mode 100644
index 000000000..defc4887b
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/cookie1.C
@@ -0,0 +1,15 @@
+// { dg-options "-fabi-version=0" }
+
+void *operator new[](__SIZE_TYPE__, void *);
+
+struct A {
+ ~A(){}
+};
+
+int main()
+{
+ A * a = (A*) new char[20];
+ A * b = new(a) A[3];
+ if (a != b)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/cookie2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/cookie2.C
new file mode 100644
index 000000000..dc180453b
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/cookie2.C
@@ -0,0 +1,16 @@
+// { dg-options "-fabi-version=1" }
+
+void *operator new[](__SIZE_TYPE__, void *);
+
+struct A {
+ ~A(){}
+};
+
+int main()
+{
+ A * a = (A*) new char[20];
+ A * b = new(a) A[3];
+ // In the 3.2 ABI, a cookie was allocated in this case.
+ if (a == b)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant1.C
new file mode 100644
index 000000000..97737ddb9
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant1.C
@@ -0,0 +1,26 @@
+// { dg-do compile }
+// { dg-options "-w" }
+
+// If a covariant thunk is overriding a virtual primary base, we have to
+// use the vcall offset even though we know it will be 0.
+
+struct c4 {};
+
+struct c6 : c4 { virtual c4* f17(); };
+
+c4* c6::f17() { return 0; }
+
+struct c11 : virtual c6 { int i; };
+
+struct c12 : c11 { };
+
+struct c14 :
+ virtual c12,
+ virtual c11 { virtual void f(); c12* f17(); };
+
+void c14::f() { }
+
+// { dg-final { scan-assembler "_ZTcv0_n12_v0_n16_N3c143f17Ev" { target { ilp32 && { ! { ia64-*-hpux* } } } } } }
+// { dg-final { scan-assembler-not "_ZTch0_v0_n16_N3c143f17Ev" } }
+// { dg-final { scan-assembler "_ZTcv0_n24_v0_n32_N3c143f17Ev" { target { lp64 || { ia64-*-hpux* } } } } }
+// { dg-final { scan-assembler-not "_ZTch0_v0_n32_N3c143f17Ev" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant2.C
new file mode 100644
index 000000000..3231cc4c8
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant2.C
@@ -0,0 +1,32 @@
+// { dg-do compile }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 12 Dec 2003 <nathan@codesourcery.com>
+// Origin: grigory@stl.sarov.ru
+
+// PR c++/12881. ICE in thunk generation
+
+struct c1 {};
+
+struct c3 : virtual c1
+{
+ virtual c1* f6() {}
+ int i;
+};
+
+struct c6 : virtual c3 { };
+
+struct c7 : c3
+{
+ virtual c3* f6() {}
+};
+
+struct c24 : virtual c7
+{
+ virtual c6* f6();
+};
+
+c6* c24::f6() { return 0; }
+
+struct c31 : c24 {};
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant3.C
new file mode 100644
index 000000000..178157c58
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant3.C
@@ -0,0 +1,85 @@
+// { dg-do run }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 12 Dec 2003 <nathan@codesourcery.com>
+// Origin: grigory@stl.sarov.ru
+
+// PR c++/13118. Missing covariant thunk.
+
+struct c0 {};
+struct c1 : virtual c0 {
+ virtual c0* f6();
+};
+
+struct c5 {
+ virtual void foo();
+};
+
+struct c10 : virtual c1 {
+ virtual void foo();
+};
+
+struct c1a : c1 {}; // disambiguation
+
+struct c11 : virtual c10, c1a {
+ int i;
+ virtual c1* f6 () = 0;
+};
+
+struct c18 : c5, virtual c1 {
+ virtual void bar();
+};
+
+struct c28 : virtual c0, virtual c11 {
+ virtual c18* f6();
+};
+
+c0 *c1::f6 () {}
+void c5::foo () {}
+void c10::foo () {}
+void c18::bar () {}
+
+c18 ret;
+
+c18 *c28::f6 ()
+{
+ return &ret;
+}
+
+bool check_c1 (c1 *ptr)
+{
+ c0 *r = ptr->f6 ();
+ return r != &ret;
+}
+bool check_c10 (c10 *ptr)
+{
+ c0 *r = ptr->f6 ();
+ return r != &ret;
+}
+bool check_c11 (c11 *ptr)
+{
+ c1 *r = ptr->f6 ();
+ return r != &ret;
+}
+bool check_c28 (c28 *ptr)
+{
+ c18 *r = ptr->f6 ();
+ return r != &ret;
+}
+
+int main ()
+{
+ c28 obj;
+
+ if (check_c1 (static_cast<c1a *> (&obj)))
+ return 1;
+ if (check_c1 (static_cast<c10 *> (&obj)))
+ return 2;
+ if (check_c10 (&obj))
+ return 3;
+ if (check_c11 (&obj))
+ return 4;
+ if (check_c28 (&obj))
+ return 5;
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant4.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant4.C
new file mode 100644
index 000000000..942b1686e
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant4.C
@@ -0,0 +1,46 @@
+// { dg-do run }
+
+// Copyright (C) 2005 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 11 Feb 2005 <nathan@codesourcery.com>
+
+// Origin: bredelin@ucla.edu
+// Bug 19891: Incorrect covariant vtables
+
+struct Model {
+ bool full_tree;
+ virtual Model* clone() const =0;
+ virtual const char *name() const =0;
+ virtual ~Model() {}
+};
+
+struct R: virtual public Model {
+ virtual R* clone() const =0;
+};
+struct A: virtual public Model {
+ virtual A* clone() const=0;
+};
+struct RA: public R, public A {
+ virtual RA* clone() const=0;
+};
+
+static const char *string = "EQU";
+
+struct EQU: public RA {
+ virtual EQU* clone() const {return new EQU(*this);}
+ const char *name() const {return string;}
+};
+
+int main() {
+ Model* M1 = new EQU();
+ Model* M2 = M1->clone();
+ Model* M3 = M2->clone();
+
+ if (M1->name () != string)
+ return 1;
+ if (M2->name () != string)
+ return 2;
+ if (M3->name () != string)
+ return 3;
+
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant5.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant5.C
new file mode 100644
index 000000000..03e55583d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant5.C
@@ -0,0 +1,52 @@
+// Copyright (C) 2005 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 4 Apr 2005 <nathan@codesourcery.com>
+
+// { dg-do run }
+
+// PR 20746: Covariant return pointer could be null.
+
+// Origin: yanliu@ca.ibm.com
+// nathan@codesourcery.com
+
+struct A {
+ virtual void One ();
+};
+struct B {
+ virtual B *Two ();
+ virtual B &Three ();
+};
+
+struct C : A, B
+{
+ virtual C *Two ();
+ virtual C &Three ();
+};
+void A::One () {}
+B *B::Two() {return this;}
+B &B::Three() {return *this;}
+C *C::Two () {return 0;}
+C &C::Three () {return *(C *)0;}
+
+B *Foo (B *b)
+{
+ return b->Two ();
+}
+
+B &Bar (B *b)
+{
+ return b->Three ();
+}
+
+int main ()
+{
+ C c;
+
+ /* We should not adjust a null pointer. */
+ if (Foo (&c))
+ return 1;
+ /* But we should adjust a (bogus) null reference. */
+ if (!&Bar (&c))
+ return 2;
+
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant6.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant6.C
new file mode 100644
index 000000000..143b4ad36
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/covariant6.C
@@ -0,0 +1,34 @@
+struct A
+{
+ virtual A* f();
+};
+
+struct B: virtual A
+{
+ virtual A* f();
+};
+
+struct C: B
+{
+ virtual C* f();
+};
+
+C* C::f() { return 0; }
+
+// When we emit C::f, we should emit both thunks: one for B and one for A.
+// { dg-final { scan-assembler "_ZTch0_v0_n16_N1C1fEv" { target { ilp32 && { ! { ia64-*-hpux* } } } } } }
+// { dg-final { scan-assembler "_ZTch0_v0_n32_N1C1fEv" { target { lp64 || { ia64-*-hpux* } } } } }
+// { dg-final { scan-assembler "_ZTcv0_n12_v0_n16_N1C1fEv" { target { ilp32 && { ! { ia64-*-hpux* } } } } } }
+// { dg-final { scan-assembler "_ZTcv0_n24_v0_n32_N1C1fEv" { target { lp64 || { ia64-*-hpux* } } } } }
+
+struct D: B
+{
+ virtual void dummy ();
+ virtual D* f();
+};
+
+void D::dummy() { }
+
+// When we emit the D vtable, it should refer to the thunk for B.
+// { dg-final { scan-assembler "_ZTch0_v0_n16_N1D1fEv" { target { ilp32 && { ! { ia64-*-hpux* } } } } } }
+// { dg-final { scan-assembler "_ZTch0_v0_n32_N1D1fEv" { target { lp64 || { ia64-*-hpux* } } } } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/dcast1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/dcast1.C
new file mode 100644
index 000000000..99f678ff3
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/dcast1.C
@@ -0,0 +1,29 @@
+// { dg-do compile }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 28 Jan 2003 <nathan@codesourcery.com>
+
+// PR 9433. segfault at runtime.
+
+struct A { virtual void f() {} };
+struct B {int b;};
+struct C : A, B { virtual void f() {} int c;};
+struct D : C {int d;};
+struct E : C {int e;};
+struct F : protected D, E {int f;};
+struct H : virtual F {int h;};
+struct I : H {int i;};
+struct J : H {int j;};
+struct K : I, J { virtual void f() {} int k; };
+struct M : K {int m;};
+struct N : M {int n;};
+struct O : M {int o;};
+struct P : N, O { virtual void f() {} int p;};
+
+int main()
+{
+ P obj;
+ A* a1 = (D *) (&obj);
+ H* hp = dynamic_cast<H*>(a1);
+ return hp != 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/dtor1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/dtor1.C
new file mode 100644
index 000000000..f9425e013
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/dtor1.C
@@ -0,0 +1,23 @@
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+// { dg-options "-fabi-version=0" }
+
+struct A {
+ virtual void a ();
+};
+
+struct B {
+ virtual ~B ();
+};
+
+struct C : public A, public B {
+ virtual void c ();
+};
+
+struct D : virtual public C {
+ virtual void d ();
+};
+
+void D::d () {}
+
+// { dg-final { scan-assembler _ZTv0_n20_N1DD1Ev } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/dtor2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/dtor2.C
new file mode 100644
index 000000000..6b89cc8ea
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/dtor2.C
@@ -0,0 +1,14 @@
+// { dg-do compile }
+// { dg-options "-Wabi -fabi-version=1" }
+
+struct A {
+ virtual void a ();
+};
+
+struct B {
+ virtual ~B ();
+};
+
+struct C : public A, public B { // { dg-warning "virtual" }
+ virtual void c ();
+};
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty10.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty10.C
new file mode 100644
index 000000000..ae992944d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty10.C
@@ -0,0 +1,28 @@
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+// { dg-options "-fabi-version=0 -w" }
+
+struct E {};
+struct E2 : public E {};
+
+struct A {
+ int i;
+};
+
+struct B {
+ int j;
+};
+
+struct C :
+ public E,
+ public A,
+ public E2,
+ virtual public B {
+};
+
+C c;
+
+int main () {
+ if (((char*)(B*)&c - (char*)&c) != 8)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty11.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty11.C
new file mode 100644
index 000000000..b35363f5b
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty11.C
@@ -0,0 +1,19 @@
+// { dg-do run }
+// { dg-options "-w -fabi-version=0" }
+
+struct E {};
+struct E2 : public E {};
+struct E3 : public E, public E2 {};
+struct E4 : public E, public E2, public E3 { };
+struct E5 : public E, public E2, public E3, public E4 {};
+
+struct S : public virtual E5 {
+ E e;
+};
+
+S s;
+
+int main () {
+ if ((char*)(E4*)&s - (char*)&s == 0)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty4.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty4.C
new file mode 100644
index 000000000..d20a55cf7
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty4.C
@@ -0,0 +1,86 @@
+// { dg-do run }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 31 Jul 2001 <nathan@codesourcery.com>
+
+// Bug 3820. We were bit copying empty bases including the
+// padding. Which clobbers whatever they overlay.
+
+struct Empty {};
+
+struct Inter : Empty {};
+
+long now = 0;
+
+struct NonPod
+{
+ long m;
+
+ NonPod () {m = 0x12345678;}
+ NonPod (long m_) {m = m_;}
+ NonPod &operator= (NonPod const &src) {now = m; m = src.m; return *this;}
+ NonPod (NonPod const &src) {m = src.m;}
+};
+
+struct A : Inter
+{
+ A (long c) {m = c;}
+
+ NonPod m;
+};
+
+struct B
+{
+ Inter empty;
+ NonPod m;
+
+ B (long c) {m = c;}
+};
+
+struct C : NonPod, Inter
+{
+ C (long c) : NonPod (c), Inter () {}
+};
+
+int main ()
+{
+ A a (0x12131415);
+
+ long was = a.m.m;
+
+ a = 0x22232425;
+
+ if (was != now)
+ return 1; // we copied the empty base which clobbered a.m.m's
+ // original value.
+
+ A b (0x32333435);
+ *(Inter *)&a = *(Inter *)&b;
+
+ if (a.m.m != 0x22232425)
+ return 2; // we copied padding, which clobbered a.m.m
+
+ A b2 (0x32333435);
+ (Inter &)b2 = Inter ();
+ if (b2.m.m != 0x32333435)
+ return 2; // we copied padding, which clobbered b2.m.m
+
+ B c (0x12131415);
+ was = c.m.m;
+ c = 0x22232425;
+ if (was != now)
+ return 3;
+
+ B d (0x32333435);
+ c.empty = d.empty;
+
+ if (c.m.m != 0x22232425)
+ return 4;
+
+ C e (0x32333435);
+
+ if (e.m != 0x32333435)
+ return 2; // we copied padding
+
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty5.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty5.C
new file mode 100644
index 000000000..c3717727e
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty5.C
@@ -0,0 +1,17 @@
+// { dg-options "-fabi-version=0" }
+
+struct A {};
+
+struct B {
+ A a;
+ virtual void f () {}
+};
+
+struct C : public B, public A {};
+
+C c;
+
+int main () {
+ if ((void*) (A*) &c != &c)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty6.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty6.C
new file mode 100644
index 000000000..1b14a6d03
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty6.C
@@ -0,0 +1,14 @@
+// { dg-options "-Wabi -fabi-version=1" }
+
+struct A {};
+
+struct B {
+ A a; // { dg-warning "empty" "" { xfail mmix-*-* } }
+ virtual void f () {}
+} __attribute__((aligned(2 * sizeof (void *))));
+/* The preceding attribute is necessary on targets with
+ BIGGEST_ALIGNMENT <= POINTER_SIZE to trigger the warning, as
+ otherwise the offset of 'a' (i.e. POINTER_SIZE) is split into a
+ non-zero DECL_FIELD_OFFSET and a zero DECL_FIELD_BIT_OFFSET,
+ and then there is no discrepancy between DECL_FIELD_OFFSET and
+ byte_position to warn about. */
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty7.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty7.C
new file mode 100644
index 000000000..0a665a845
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty7.C
@@ -0,0 +1,19 @@
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+// { dg-options "-fabi-version=0" }
+
+struct S1 {};
+struct S2 { virtual void f () {} S1 s1[4]; };
+struct S3 : virtual public S2 {};
+struct S4 : virtual public S2 { int i; };
+struct S5 : public S3, virtual public S4 {};
+struct S6 { S5 s5; };
+struct S7 { S1 s1[5]; };
+struct S8 : public S1, public S6, virtual public S7 { };
+
+S8 s8;
+
+int main () {
+ if ((char *)(S7 *)&s8 - (char *)&s8 != 24)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty8.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty8.C
new file mode 100644
index 000000000..a5287b15f
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty8.C
@@ -0,0 +1,14 @@
+// { dg-do run }
+// { dg-options "-fabi-version=0" }
+
+struct E1 {};
+struct E2 : public E1 {};
+struct S1 { int i; };
+struct S2 : public S1, E2 {};
+
+S2 s2;
+
+int main () {
+ if ((char *)(E2*) &s2 != (char *)&s2)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty9.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty9.C
new file mode 100644
index 000000000..06e616adb
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/empty9.C
@@ -0,0 +1,17 @@
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+// { dg-options "-w -fabi-version=0" }
+
+struct E1 {};
+struct E2 : public E1 {
+ virtual void f ();
+};
+struct E3 : virtual public E1 {
+};
+struct S : public E2, virtual public E3 {
+};
+
+int main () {
+ if (sizeof (S) != 12)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/enum1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/enum1.C
new file mode 100644
index 000000000..32e52fe0f
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/enum1.C
@@ -0,0 +1,16 @@
+// { dg-do run }
+
+#include <cstdlib>
+
+enum foo
+{
+ foo1 = 0,
+ foo2 = 0xffffffffffffffffULL,
+ foo3 = 0xf0fffffffffffffeULL
+};
+
+int main ()
+{
+ if (sizeof (enum foo) != sizeof (unsigned long long))
+ std::abort ();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/forced.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/forced.C
new file mode 100644
index 000000000..7a9c35964
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/forced.C
@@ -0,0 +1,25 @@
+// This test only applies to glibc (NPTL) targets.
+// { dg-do run { target *-*-linux* } }
+// { dg-options "-pthread" }
+
+#include <pthread.h>
+#include <cxxabi.h>
+extern "C" int printf (const char *, ...);
+
+int main()
+{
+ try
+ {
+ pthread_exit (0);
+ }
+ catch (abi::__forced_unwind &)
+ {
+ printf ("caught forced unwind\n");
+ throw;
+ }
+ catch (...)
+ {
+ printf ("caught ...\n");
+ return 1;
+ }
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard1.C
new file mode 100644
index 000000000..76b43d30f
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard1.C
@@ -0,0 +1,10 @@
+// PR c++/41611
+// { dg-final { scan-assembler-not "_ZGVZN1A1fEvE1i" } }
+
+struct A {
+ static int f()
+ {
+ static int &i = *new int();
+ return i;
+ }
+};
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard2.C
new file mode 100644
index 000000000..988fd385b
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard2.C
@@ -0,0 +1,16 @@
+// PR c++/41611
+// Test that the guard gets its own COMDAT group.
+// { dg-final { scan-assembler "_ZGVZN1A1fEvE1i,comdat" { target *-*-linux* } } }
+
+struct A {
+ static int f()
+ {
+ static int &i = *new int();
+ return i;
+ }
+};
+
+int main()
+{
+ return A::f();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard3.C
new file mode 100644
index 000000000..fd9d00e27
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/guard3.C
@@ -0,0 +1,14 @@
+// PR c++/45603
+
+extern "C" int __cxa_guard_acquire();
+
+struct A
+{
+ ~A();
+};
+
+A* f()
+{
+ static A a;
+ return &a;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/inline1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/inline1.C
new file mode 100644
index 000000000..97082aa73
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/inline1.C
@@ -0,0 +1,6 @@
+struct S {
+ S() {}
+ virtual void g() {}
+};
+
+// { dg-final { scan-assembler-not "_ZTV1S" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/key1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/key1.C
new file mode 100644
index 000000000..6c0380926
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/key1.C
@@ -0,0 +1,26 @@
+// On ARM EABI platforms, key methods may never be inline.
+// { dg-do compile { target arm*-*-eabi* arm*-*-symbianelf* } }
+// { dg-final { scan-assembler-not _ZTV1S } }
+// { dg-final { scan-assembler-not _ZTV1T } }
+// { dg-final { scan-assembler _ZTV1U } }
+
+struct S {
+ virtual void f();
+};
+
+inline void S::f() {}
+
+struct T {
+ virtual void g();
+ virtual void h();
+};
+
+inline void T::g() {}
+
+struct U {
+ virtual void i();
+ virtual void j();
+};
+
+inline void U::i() {}
+void U::j () {}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/key2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/key2.C
new file mode 100644
index 000000000..0d1347aaa
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/key2.C
@@ -0,0 +1,16 @@
+// On Darwin, key methods that are inline result in comdat style things. */
+// PR darwin/25908
+
+// { dg-do compile { target *-*-darwin* } }
+// { dg-final { scan-assembler ".globl __ZTV1f\\n .weak_definition __ZTV1f(\\n .section __DATA,__const_coal,coalesced)?\\n .align" } }
+// { dg-final { scan-assembler ".globl __ZTS1f\\n .weak_definition __ZTS1f\\n .section __TEXT,__const_coal,coalesced" } }
+// { dg-final { scan-assembler ".globl __ZTI1f\\n .weak_definition __ZTI1f(\\n .section __DATA,__const_coal,coalesced)?\\n .align" } }
+
+class f
+{
+ virtual void g();
+ virtual void h();
+} c;
+inline void f::g() {}
+int sub(void)
+{}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout1.C
new file mode 100644
index 000000000..645ed6acf
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout1.C
@@ -0,0 +1,31 @@
+// Red Hat bugzilla 64535
+// Bug: We are allocationg stuff into the tail padding of POD class "A".
+// { dg-do run }
+
+struct A
+{
+ int x;
+ char y;
+};
+
+struct B : public A {
+ virtual void f () {}
+ char z;
+};
+
+A a = { 21, 42 };
+B b;
+
+int
+main (void)
+{
+ b.x = 12;
+ b.y = 24;
+ b.z = 36;
+
+ A *ap = &b;
+
+ *ap = a;
+
+ return (b.z != 36);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout2.C
new file mode 100644
index 000000000..fb4e1e5d9
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout2.C
@@ -0,0 +1,33 @@
+// Red Hat bugzilla 65210
+// { dg-do run }
+
+struct A {
+ int a;
+};
+
+struct B : public virtual A {};
+
+struct C {
+ long double c;
+};
+
+struct D : public virtual C {
+ int d;
+};
+
+struct E : public B, public D {
+ int e;
+};
+
+E e;
+
+/* The layout of E should begin with the B-in-E vtable pointer, followed by
+ the D-in-E vtable pointer. The bug was that we used to pad out the D
+ fields for long double alignment. */
+
+int main ()
+{
+ D* dp = &e;
+ unsigned long d_offset = ((char*)dp) - ((char*) &e);
+ return (d_offset != sizeof(void *));
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout3.C
new file mode 100644
index 000000000..a30a85219
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout3.C
@@ -0,0 +1,27 @@
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+// { dg-options "-fabi-version=0 -w" }
+
+struct S {
+ virtual void f() {}
+};
+
+struct T : virtual public S { };
+
+struct U : public S, virtual public T {
+ char c[100];
+};
+
+struct V : public U, virtual public S {};
+
+struct W : public V {
+ int i;
+};
+
+int main () {
+ W w;
+
+ if ((char*) &w.i - (char *) &w != 104)
+ return 1;
+}
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout4.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout4.C
new file mode 100644
index 000000000..da3c2f5d8
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/layout4.C
@@ -0,0 +1,19 @@
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+// { dg-options "-fabi-version=1" }
+
+struct C4
+{
+ int b:30;
+ C4(){};
+};
+
+struct C1: virtual C4
+{
+ int i;
+};
+
+int main() {
+ if (sizeof (C1) != 12)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/local1-a.cc b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/local1-a.cc
new file mode 100644
index 000000000..638479e74
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/local1-a.cc
@@ -0,0 +1,14 @@
+struct B {
+ virtual void b() {}
+};
+
+static B* f() {
+ struct D : public B {
+ };
+
+ return new D;
+}
+
+B* g() {
+ return f();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/local1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/local1.C
new file mode 100644
index 000000000..518193c89
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/local1.C
@@ -0,0 +1,22 @@
+// { dg-do run }
+// { dg-additional-sources "local1-a.cc" }
+
+#include <typeinfo>
+
+struct B {
+ virtual void b() {}
+};
+
+static B* f() {
+ struct D : public B {
+ };
+
+ return new D;
+}
+
+extern B* g();
+
+int main () {
+ if (typeid (*f()) == typeid (*g()))
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/local2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/local2.C
new file mode 100644
index 000000000..f56701610
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/local2.C
@@ -0,0 +1,17 @@
+// PR c++/42010
+// { dg-final { scan-assembler "ZZN1A1fEvE1s" } }
+
+struct A {
+ static int f()
+ {
+ static struct {
+ int i;
+ } s;
+ return s.i;
+ }
+};
+
+int main()
+{
+ return A::f();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro0.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro0.C
new file mode 100644
index 000000000..6c391e689
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro0.C
@@ -0,0 +1,5 @@
+// { dg-options "-fabi-version=0" }
+
+#if __GXX_ABI_VERSION != 999999
+#error "Incorrect value of __GXX_ABI_VERSION"
+#endif
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro1.C
new file mode 100644
index 000000000..871208da3
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro1.C
@@ -0,0 +1,5 @@
+// { dg-options "-fabi-version=1" }
+
+#if __GXX_ABI_VERSION != 102
+#error "Incorrect value of __GXX_ABI_VERSION"
+#endif
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro2.C
new file mode 100644
index 000000000..9f0af9cff
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/macro2.C
@@ -0,0 +1,5 @@
+// { dg-options "-fabi-version=2" }
+
+#if __GXX_ABI_VERSION != 1002
+#error "Incorrect value of __GXX_ABI_VERSION"
+#endif
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle-neon-aarch64.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle-neon-aarch64.C
new file mode 100644
index 000000000..09540e841
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle-neon-aarch64.C
@@ -0,0 +1,55 @@
+// Test that AArch64 AdvSIMD (NEON) vector types have their names mangled
+// correctly.
+
+// { dg-do compile { target { aarch64*-*-* } } }
+
+#include <arm_neon.h>
+
+void f0 (int8x8_t a) {}
+void f1 (int16x4_t a) {}
+void f2 (int32x2_t a) {}
+void f3 (uint8x8_t a) {}
+void f4 (uint16x4_t a) {}
+void f5 (uint32x2_t a) {}
+void f6 (float32x2_t a) {}
+void f7 (poly8x8_t a) {}
+void f8 (poly16x4_t a) {}
+
+void f9 (int8x16_t a) {}
+void f10 (int16x8_t a) {}
+void f11 (int32x4_t a) {}
+void f12 (int64x2_t a) {}
+void f13 (uint8x16_t a) {}
+void f14 (uint16x8_t a) {}
+void f15 (uint32x4_t a) {}
+void f16 (uint64x2_t a) {}
+void f17 (float32x4_t a) {}
+void f18 (float64x2_t a) {}
+void f19 (poly8x16_t a) {}
+void f20 (poly16x8_t a) {}
+
+void f21 (int8x16_t, int8x16_t) {}
+
+
+// { dg-final { scan-assembler "_Z2f010__Int8x8_t:" } }
+// { dg-final { scan-assembler "_Z2f111__Int16x4_t:" } }
+// { dg-final { scan-assembler "_Z2f211__Int32x2_t:" } }
+// { dg-final { scan-assembler "_Z2f311__Uint8x8_t:" } }
+// { dg-final { scan-assembler "_Z2f412__Uint16x4_t:" } }
+// { dg-final { scan-assembler "_Z2f512__Uint32x2_t:" } }
+// { dg-final { scan-assembler "_Z2f613__Float32x2_t:" } }
+// { dg-final { scan-assembler "_Z2f711__Poly8x8_t:" } }
+// { dg-final { scan-assembler "_Z2f812__Poly16x4_t:" } }
+// { dg-final { scan-assembler "_Z2f911__Int8x16_t:" } }
+// { dg-final { scan-assembler "_Z3f1011__Int16x8_t:" } }
+// { dg-final { scan-assembler "_Z3f1111__Int32x4_t:" } }
+// { dg-final { scan-assembler "_Z3f1211__Int64x2_t:" } }
+// { dg-final { scan-assembler "_Z3f1312__Uint8x16_t:" } }
+// { dg-final { scan-assembler "_Z3f1412__Uint16x8_t:" } }
+// { dg-final { scan-assembler "_Z3f1512__Uint32x4_t:" } }
+// { dg-final { scan-assembler "_Z3f1612__Uint64x2_t:" } }
+// { dg-final { scan-assembler "_Z3f1713__Float32x4_t:" } }
+// { dg-final { scan-assembler "_Z3f1813__Float64x2_t:" } }
+// { dg-final { scan-assembler "_Z3f1912__Poly8x16_t:" } }
+// { dg-final { scan-assembler "_Z3f2012__Poly16x8_t:" } }
+// { dg-final { scan-assembler "_Z3f2111__Int8x16_tS_:" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle-neon.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle-neon.C
new file mode 100644
index 000000000..af1fe49f1
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle-neon.C
@@ -0,0 +1,49 @@
+// Test that ARM NEON vector types have their names mangled correctly.
+
+// { dg-do compile }
+// { dg-require-effective-target arm_neon_ok }
+// { dg-add-options arm_neon }
+
+#include <arm_neon.h>
+
+void f0 (int8x8_t a) {}
+void f1 (int16x4_t a) {}
+void f2 (int32x2_t a) {}
+void f3 (uint8x8_t a) {}
+void f4 (uint16x4_t a) {}
+void f5 (uint32x2_t a) {}
+void f6 (float32x2_t a) {}
+void f7 (poly8x8_t a) {}
+void f8 (poly16x4_t a) {}
+
+void f9 (int8x16_t a) {}
+void f10 (int16x8_t a) {}
+void f11 (int32x4_t a) {}
+void f12 (uint8x16_t a) {}
+void f13 (uint16x8_t a) {}
+void f14 (uint32x4_t a) {}
+void f15 (float32x4_t a) {}
+void f16 (poly8x16_t a) {}
+void f17 (poly16x8_t a) {}
+
+void f18 (int8x16_t, int8x16_t) {}
+
+// { dg-final { scan-assembler "_Z2f015__simd64_int8_t:" } }
+// { dg-final { scan-assembler "_Z2f116__simd64_int16_t:" } }
+// { dg-final { scan-assembler "_Z2f216__simd64_int32_t:" } }
+// { dg-final { scan-assembler "_Z2f316__simd64_uint8_t:" } }
+// { dg-final { scan-assembler "_Z2f417__simd64_uint16_t:" } }
+// { dg-final { scan-assembler "_Z2f517__simd64_uint32_t:" } }
+// { dg-final { scan-assembler "_Z2f618__simd64_float32_t:" } }
+// { dg-final { scan-assembler "_Z2f716__simd64_poly8_t:" } }
+// { dg-final { scan-assembler "_Z2f817__simd64_poly16_t:" } }
+// { dg-final { scan-assembler "_Z2f916__simd128_int8_t:" } }
+// { dg-final { scan-assembler "_Z3f1017__simd128_int16_t:" } }
+// { dg-final { scan-assembler "_Z3f1117__simd128_int32_t:" } }
+// { dg-final { scan-assembler "_Z3f1217__simd128_uint8_t:" } }
+// { dg-final { scan-assembler "_Z3f1318__simd128_uint16_t:" } }
+// { dg-final { scan-assembler "_Z3f1418__simd128_uint32_t:" } }
+// { dg-final { scan-assembler "_Z3f1519__simd128_float32_t:" } }
+// { dg-final { scan-assembler "_Z3f1617__simd128_poly8_t:" } }
+// { dg-final { scan-assembler "_Z3f1718__simd128_poly16_t:" } }
+// { dg-final { scan-assembler "_Z3f1816__simd128_int8_tS_:" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle1.C
new file mode 100644
index 000000000..ab377d13b
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle1.C
@@ -0,0 +1,28 @@
+// Test for mangling of simple testcase involving construction vtables.
+
+// { dg-do compile }
+// { dg-options "-fno-inline" }
+
+struct A {
+ virtual void f () { }
+};
+
+struct B: public virtual A { };
+struct C: public B { };
+
+C c;
+
+// { dg-final { scan-assembler "\n_?_ZN1A1fEv\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZN1AC2Ev\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZN1BC2Ev\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZN1CC1Ev\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTC1C0_1B\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTI1A\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTI1B\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTI1C\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTS1A\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTS1B\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTS1C\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTT1C\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTV1A\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTV1C\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle10.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle10.C
new file mode 100644
index 000000000..d5782ba6d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle10.C
@@ -0,0 +1,13 @@
+// { dg-options "-fabi-version=0" }
+
+template <template <typename> class Q>
+void f (typename Q<int>::X) {}
+
+template <typename Q>
+struct S {
+ typedef int X;
+};
+
+template void f<S> (int);
+
+// { dg-final { scan-assembler _Z1fI1SEvNT_IiE1XE } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle11.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle11.C
new file mode 100644
index 000000000..722d43c85
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle11.C
@@ -0,0 +1,10 @@
+// { dg-options "-Wabi -fabi-version=1" }
+
+template <typename Q>
+void f (typename Q::X) {} // { dg-warning "mangle" }
+
+struct S {
+ typedef int X;
+};
+
+template void f<S> (int); // { dg-message "required" }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle12.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle12.C
new file mode 100644
index 000000000..92f49c22f
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle12.C
@@ -0,0 +1,11 @@
+// { dg-options "-Wabi -fabi-version=1" }
+
+template <template <typename> class Q>
+void f (typename Q<int>::X) {} // { dg-warning "mangle" }
+
+template <typename Q>
+struct S {
+ typedef int X;
+};
+
+template void f<S> (int); // { dg-message "required" }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle13.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle13.C
new file mode 100644
index 000000000..716c4c36f
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle13.C
@@ -0,0 +1,28 @@
+// { dg-options "-fabi-version=0" }
+
+struct A {
+ template <typename T> int f ();
+ int operator+();
+ operator int ();
+ template <typename T>
+ int operator-();
+};
+
+typedef int (A::*P)();
+
+template <P> struct S {};
+
+template <typename T> void g (S<&T::template f<int> >) {}
+template <typename T> void g (S<&T::operator+ >) {}
+template <typename T> void g (S<&T::operator int>) {}
+template <typename T> void g (S<&T::template operator- <double> >) {}
+
+template void g<A> (S<&A::f<int> >);
+template void g<A> (S<&A::operator+>);
+template void g<A> (S<&A::operator int>);
+template void g<A> (S<&A::operator-<double> >);
+
+// { dg-final { scan-assembler _Z1gI1AEv1SIXadsrT_1fIiEEE } }
+// { dg-final { scan-assembler _Z1gI1AEv1SIXadsrT_plEE } }
+// { dg-final { scan-assembler _Z1gI1AEv1SIXadsrT_cviEE } }
+// { dg-final { scan-assembler _Z1gI1AEv1SIXadsrT_miIdEEE } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle14.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle14.C
new file mode 100644
index 000000000..2b38255ac
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle14.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "-Wabi -fabi-version=1" }
+// { dg-final { scan-assembler "_Z1g1SIXadsr1ANS0_1fIiEEivEE" } }
+
+struct A {
+ template <typename T> int f ();
+};
+
+typedef int (A::*P)();
+
+template <P> struct S {};
+
+void g (S<&A::f<int> >) {} // { dg-warning "mangle" }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle15.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle15.C
new file mode 100644
index 000000000..3c112e263
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle15.C
@@ -0,0 +1,14 @@
+// { dg-do compile }
+// { dg-options "-fabi-version=0" }
+
+struct A {
+ template <typename T> int f ();
+};
+
+typedef int (A::*P)();
+
+template <P> struct S {};
+
+void g (S<&A::f<int> >) {}
+
+// { dg-final { scan-assembler _Z1g1SIXadL_ZN1A1fIiEEivEEE } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle16.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle16.C
new file mode 100644
index 000000000..1f3039f86
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle16.C
@@ -0,0 +1,18 @@
+// { dg-options "-fabi-version=0" }
+
+enum E { e = 3 };
+
+template <int I> struct S {};
+
+template <int I> void f (S<e + 1>) {}
+template void f<7>(S<e + 1>);
+
+template <int I> void g (S<e>) {}
+template void g<7>(S<e>);
+
+template <int I> void h (S<I + 1>) {}
+template void h<7>(S<7 + 1>);
+
+// { dg-final { scan-assembler _Z1fILi7EEv1SILi4EE } }
+// { dg-final { scan-assembler _Z1gILi7EEv1SILi3EE } }
+// { dg-final { scan-assembler _Z1hILi7EEv1SIXplT_Li1EEE } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle17.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle17.C
new file mode 100644
index 000000000..f98e2717d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle17.C
@@ -0,0 +1,11 @@
+// { dg-options "-Wabi -fabi-version=1" }
+
+enum E { e = 3 };
+
+template <int I> struct S {};
+
+template <int I> void f (S<I + e + int (3.7)>) {} // { dg-warning "mangle" }
+template void f<7>(S<7 + e + int (3.7)>); // { dg-message "required" }
+
+template <int I> void g (S<I + e + int (3.7)>) {} // { dg-warning "mangle" }
+template void g<7>(S<7 + e + int (3.7)>); // { dg-message "required" }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle18-1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle18-1.C
new file mode 100644
index 000000000..a1be5e48c
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle18-1.C
@@ -0,0 +1,23 @@
+// { dg-do compile }
+// { dg-options "-fabi-version=2" }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 30 Nov 2003 <nathan@codesourcery.com>
+
+// PR 13241
+// mangled template arguments that are external objects incorrectly
+
+extern "C" void Foo ();
+namespace NMS
+{
+ extern "C" int V;
+}
+
+template <void (*)()> struct S {};
+template <int *> struct T {};
+
+void f (S<Foo>){}
+// { dg-final { scan-assembler "\n_?_Z1f1SIXadL_Z3FooEEE\[: \t\n\]" } }
+
+void g (T<&NMS::V>){}
+// { dg-final { scan-assembler "\n_?_Z1g1TIXadL_Z1VEEE\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle18-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle18-2.C
new file mode 100644
index 000000000..a231d495f
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle18-2.C
@@ -0,0 +1,23 @@
+// { dg-do compile }
+// { dg-options "-fabi-version=1 -Wabi" }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 30 Nov 2003 <nathan@codesourcery.com>
+
+// PR 13241
+// mangled template arguments that are external objects incorrectly
+
+extern "C" void Foo ();
+namespace NMS
+{
+ extern "C" int V;
+}
+
+template <void (*)()> struct S {};
+template <int *> struct T {};
+
+void f (S<Foo>){} // { dg-warning "mangled name" }
+// { dg-final { scan-assembler "\n_?_Z1f1SIXadL3FooEEE\[: \t\n\]" } }
+
+void g (T<&NMS::V>){} // { dg-warning "mangled name" }
+// { dg-final { scan-assembler "\n_?_Z1g1TIXadL_ZN3NMS1VEEEE\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle19-1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle19-1.C
new file mode 100644
index 000000000..1463d03f3
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle19-1.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "-fabi-version=2 -Wno-abi" }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 15 Dec 2003 <nathan@codesourcery.com>
+
+// PR 13242
+// mangled template arguments that are external objects incorrectly
+
+extern int N;
+template <int &> struct S {};
+void n (S<N>) {}
+// { dg-final { scan-assembler "\n_?_Z1n1SILZ1NEE\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle19-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle19-2.C
new file mode 100644
index 000000000..f0855e69d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle19-2.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "-fabi-version=1 -Wabi" }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 15 Dec 2003 <nathan@codesourcery.com>
+
+// PR 13242
+// mangled template arguments that are external objects incorrectly
+
+extern int N;
+template <int &> struct S {};
+void n (S<N>) {} // { dg-warning "mangled name" }
+// { dg-final { scan-assembler "\n_?_Z1n1SIXadL_Z1NEEE\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle2.C
new file mode 100644
index 000000000..e8b5f409d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle2.C
@@ -0,0 +1,19 @@
+// Test that we handle mangling of statics in inlines properly.
+// { dg-options -fno-weak }
+// { dg-do run }
+
+inline int f ()
+{
+ static int nested;
+ nested = 24;
+ {
+ static int nested;
+ nested = 42;
+ }
+ return (nested != 24);
+}
+
+int main()
+{
+ return f ();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle20-1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle20-1.C
new file mode 100644
index 000000000..1985fe3c9
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle20-1.C
@@ -0,0 +1,19 @@
+// { dg-do compile }
+// { dg-options "-fabi-version=2" }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 15 Dec 2003 <nathan@codesourcery.com>
+
+// PR 9043
+// mangled array types in templates
+
+template <int I> void f(int (*)[2]) {}
+template <int I> void g(int (*)[I+2]) {}
+
+static const int I=1;
+static const int J=2;
+
+template void f<1>(int (*)[2]);
+// { dg-final { scan-assembler "\n_?_Z1fILi1EEvPA2_i\[: \t\n\]" } }
+template void g<1>(int (*)[3]);
+// { dg-final { scan-assembler "\n_?_Z1gILi1EEvPAplT_Li2E_i\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle20-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle20-2.C
new file mode 100644
index 000000000..5ba6bac03
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle20-2.C
@@ -0,0 +1,16 @@
+// { dg-do compile }
+// { dg-options "-fabi-version=1 -Wabi" }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 15 Dec 2003 <nathan@codesourcery.com>
+
+// PR 9043
+// mangled array types in templates
+
+template <int I> void f(int (*)[2]) {} // { dg-warning "mangled name" }
+template <int I> void g(int (*)[I+2]) {}
+
+template void f<1>(int (*)[2]); // { dg-message "required" }
+// { dg-final { scan-assembler "\n_?_Z1fILi1EEvPALi2E_i\[: \t\n\]" } }
+template void g<1>(int (*)[3]);
+// { dg-final { scan-assembler "\n_?_Z1gILi1EEvPAplT_Li2E_i\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle21.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle21.C
new file mode 100644
index 000000000..f457d600c
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle21.C
@@ -0,0 +1,13 @@
+// PR c++/14324
+// { dg-do assemble }
+
+extern "C" {
+
+void fun1(void)
+{
+ do { static int xyz __attribute__((unused)) = 1; } while (0);
+ do { static int xyz __attribute__((unused)) = 2; } while (0);
+ do { static int xyz __attribute__((unused)) = 3; } while (0);
+}
+
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle22.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle22.C
new file mode 100644
index 000000000..93ddd1e87
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle22.C
@@ -0,0 +1,9 @@
+// PR c++/16240
+// { dg-options "-fabi-version=3" }
+
+void foo(char);
+template<void (&)(char)> struct CB {};
+
+void g(CB<foo> i) {}
+
+// { dg-final { scan-assembler "\n_?_Z1g2CBIL_Z3foocEE\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle23.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle23.C
new file mode 100644
index 000000000..f22347a04
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle23.C
@@ -0,0 +1,9 @@
+// PR c++/16240
+// { dg-options "-fabi-version=2 -Wno-abi" }
+
+void foo(char);
+template<void (&)(char)> struct CB {};
+
+void g(CB<foo> i) {}
+
+// { dg-final { scan-assembler "\n_?_Z1g2CBILZ3foocEE\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle24.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle24.C
new file mode 100644
index 000000000..1f5c5c1c3
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle24.C
@@ -0,0 +1,12 @@
+// Test mangling of __float80.
+// The C++ ABI document says __float80 is mangled as "e". It
+// also says that "long double" is mangled as "e", so these conflict on
+// ia64-hpux where "long double" is "e" and __float80 is "u9__float80".
+// Origin: Joseph Myers <joseph@codesourcery.com>
+// { dg-do compile { target i?86-*-* x86_64-*-* ia64-*-* } }
+// { dg-options "" }
+// { dg-final { scan-assembler "_Z1fe" { target i?86-*-* x86_64-*-* } } }
+// { dg-final { scan-assembler "_Z1fe" { target { ia64-*-* && { ! "ia64-*-hpux*" } } } } }
+// { dg-final { scan-assembler "_Z1fu9__float80" { target ia64-*-hpux* } } }
+
+int f(__float80 x) { return 0; }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle25.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle25.C
new file mode 100644
index 000000000..74397f778
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle25.C
@@ -0,0 +1,13 @@
+// Test mangling of __float128.
+// The C++ ABI document says __float128 is mangled as "g". It
+// also says that "long double" is mangled as "e", so these conflict on
+// ia64-hpux where "long double" is "e" and __float128 is synonymous with
+// "long double".
+// Origin: Joseph Myers <joseph@codesourcery.com>
+// { dg-do compile { target ia64-*-* i?86-*-* x86_64-*-* } }
+// { dg-options "" }
+// { dg-final { scan-assembler "_Z1fg" { target i?86-*-* x86_64-*-* } } }
+// { dg-final { scan-assembler "_Z1fg" { target { ia64-*-* && { ! "ia64-*-hpux*" } } } } }
+// { dg-final { scan-assembler "_Z1fe" { target ia64-*-hpux* } } }
+
+int f(__float128 x) { return 0; }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle26.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle26.C
new file mode 100644
index 000000000..5d1609596
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle26.C
@@ -0,0 +1,14 @@
+// Test of std mangling
+
+// { dg-do compile }
+// { dg-options "-fno-inline" }
+
+namespace std {
+ struct A {
+ A() { }
+ };
+}
+
+std::A a;
+
+// { dg-final { scan-assembler "\n_?_ZNSt1AC\[12\]Ev\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle27.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle27.C
new file mode 100644
index 000000000..2d15abbf9
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle27.C
@@ -0,0 +1,14 @@
+// Test of std::basic_iostream<char, std::char_traits<char> > mangling
+
+// { dg-do compile }
+// { dg-options "-fno-inline" }
+
+namespace std {
+ template<typename> struct char_traits;
+
+ template<typename, typename> struct basic_iostream { basic_iostream(){} };
+}
+
+std::basic_iostream<char,std::char_traits<char> > s1;
+
+// { dg-final { scan-assembler "\n_?_ZNSdC\[12\]Ev\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle28.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle28.C
new file mode 100644
index 000000000..bea8ce019
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle28.C
@@ -0,0 +1,14 @@
+// Test of std::basic_istream<char, std::char_traits<char> > mangling
+
+// { dg-do compile }
+// { dg-options "-fno-inline" }
+
+namespace std {
+ template<typename> struct char_traits;
+
+ template<typename, typename> struct basic_istream { basic_istream(){} };
+}
+
+std::basic_istream<char,std::char_traits<char> > s1;
+
+// { dg-final { scan-assembler "\n_?_ZNSiC\[12\]Ev\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle29.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle29.C
new file mode 100644
index 000000000..aaff2b4eb
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle29.C
@@ -0,0 +1,14 @@
+// Test of std::basic_ostream<char, std::char_traits<char> > mangling
+
+// { dg-do compile }
+// { dg-options "-fno-inline" }
+
+namespace std {
+ template<typename> struct char_traits;
+
+ template<typename, typename> struct basic_ostream { basic_ostream(){} };
+}
+
+std::basic_ostream<char,std::char_traits<char> > s1;
+
+// { dg-final { scan-assembler "\n_?_ZNSoC\[12\]Ev\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle3-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle3-2.C
new file mode 100644
index 000000000..ac85fb045
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle3-2.C
@@ -0,0 +1,20 @@
+// Test mangling of type casts
+// { dg-options "-fabi-version=0" }
+// { dg-do compile }
+
+template<int i> class A {};
+template<bool b> class B {};
+
+template<int i> void f(A<i> &, B<bool(i)> &) {}
+template<int i> void g(A<i> &, B<static_cast<bool>(i)> &) {}
+
+int main()
+{
+ A<1> a;
+ B<true> b;
+ f(a, b);
+ g(a, b);
+}
+
+// { dg-final { scan-assembler "\n_?_Z1fILi1EEvR1AIXT_EER1BIXcvbT_EE\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_Z1gILi1EEvR1AIXT_EER1BIXscbT_EE\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle3.C
new file mode 100644
index 000000000..5f44f7677
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle3.C
@@ -0,0 +1,20 @@
+// Test mangling of type casts
+// { dg-options "-fabi-version=2" }
+// { dg-do compile }
+
+template<int i> class A {};
+template<bool b> class B {};
+
+template<int i> void f(A<i> &, B<bool(i)> &) {}
+template<int i> void g(A<i> &, B<static_cast<bool>(i)> &) {}
+
+int main()
+{
+ A<1> a;
+ B<true> b;
+ f(a, b);
+ g(a, b);
+}
+
+// { dg-final { scan-assembler "\n_?_Z1fILi1EEvR1AIXT_EER1BIXcvbT_EE\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_Z1gILi1EEvR1AIXT_EER1BIXcvbT_EE\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle30.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle30.C
new file mode 100644
index 000000000..f0b83dbe9
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle30.C
@@ -0,0 +1,22 @@
+// Test for mangling of template args in a typename type.
+
+struct A
+{
+ template <class T>
+ struct B
+ {
+ typedef T myT;
+ };
+};
+
+struct C {};
+
+template <class T>
+void f (T t, typename T::template B<C>::myT u, typename T::template B<int>::myT v);
+
+int main()
+{
+ f (A(), C(), 1);
+}
+
+// { dg-final { scan-assembler "_Z1fI1AEvT_NS1_1BI1CE3myTENS2_IiE3myTE" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle31.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle31.C
new file mode 100644
index 000000000..4be2e0b03
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle31.C
@@ -0,0 +1,35 @@
+// PR c++/39095
+// { dg-do compile }
+
+struct B
+{
+ int b;
+};
+
+struct A
+{
+ B *operator->();
+ A ();
+ B b;
+};
+
+A::A ()
+{
+}
+
+B *
+A::operator->()
+{
+ return &b;
+}
+
+A a;
+
+int
+foo ()
+{
+ return a->b;
+}
+
+// { dg-final { scan-assembler "_ZN1AptEv" } }
+// { dg-final { scan-assembler-not "_ZN1AdtEv" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle32.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle32.C
new file mode 100644
index 000000000..244d07490
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle32.C
@@ -0,0 +1,44 @@
+// Testcase for mangling of unnamed types.
+
+// namespace-scope unnamed types have no linkage, so we only test that they
+// are distinct.
+
+// { dg-options -std=c++0x }
+
+typedef struct { } *A;
+typedef struct { } *B;
+
+void f(A) { }
+void f(B) { }
+
+struct C
+{
+ typedef struct { }* D;
+ typedef enum { }* E;
+};
+
+// { dg-final { scan-assembler "_Z2g1PN1CUt_E" } }
+void g1(C::D) { }
+// { dg-final { scan-assembler "_Z2g2PN1CUt0_E" } }
+void g2(C::E) { }
+
+template <class T>
+void h1(T t) { }
+
+template <class T>
+void h2(T t) { }
+
+inline void j()
+{
+ typedef enum { }* F;
+// { dg-final { scan-assembler "_Z2h1IPZ1jvEUt_EvT_" } }
+ h1(F());
+ typedef struct { }* G;
+// { dg-final { scan-assembler "_Z2h2IPZ1jvEUt0_EvT_" } }
+ h2(G());
+}
+
+int main()
+{
+ j();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle33.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle33.C
new file mode 100644
index 000000000..f0a4e5012
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle33.C
@@ -0,0 +1,19 @@
+// Testcase for mangling very long names.
+
+#define N \
+abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklm
+
+namespace N {
+ int i;
+}
+
+#undef N
+#define N \
+abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk
+
+namespace N {
+ int j;
+}
+
+// { dg-final { scan-assembler "_ZN4043abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklm1iE" } }
+// { dg-final { scan-assembler "_ZN4041abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk1jE" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle34.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle34.C
new file mode 100644
index 000000000..08c3bc0a1
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle34.C
@@ -0,0 +1,41 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin PR c++/40808
+// { dg-do compile }
+// This tests the mangling of empty template argument list in a template
+// id.
+// { dg-final { scan-assembler "_ZNK5DummyclI3GenEENT_3SigIE10ResultTypeERKS2_" } }
+
+
+struct Void {};
+
+template <class R> struct FunType {
+ typedef R ResultType;
+};
+
+struct WrongNumberOfSigArgs {};
+
+template <typename R> struct CFunType {
+ template <class Dummy1=Void, class Dummy2=Void> struct Sig : public
+FunType<WrongNumberOfSigArgs> {};
+ template <class Dummy> struct Sig<Void,Dummy> : public FunType<R> {};
+};
+
+struct Dummy {
+ template <typename F> typename F::template Sig<>::ResultType operator()(F
+const& f) const {
+ return typename F::template Sig<>::ResultType(0);
+ }
+};
+
+struct Gen: public CFunType<int> {
+ int operator()() const {return 0;}
+ Gen() {}
+};
+
+int myfunction() {
+ return Dummy()(Gen());
+}
+
+int main() {
+ myfunction();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle35.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle35.C
new file mode 100644
index 000000000..78d993344
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle35.C
@@ -0,0 +1,13 @@
+// PR c++/38600
+// { dg-final { scan-assembler "_Z3barIiE1AIX3fooIT_EEEv" } }
+
+template<void (*)()> struct A {};
+
+template<typename> void foo();
+
+template<typename T> A<foo<T> > bar();
+
+void baz()
+{
+ bar<int>();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle36.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle36.C
new file mode 100644
index 000000000..aaace6570
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle36.C
@@ -0,0 +1,9 @@
+// PR c++/41959
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-options "-mavx -fabi-version=4" }
+// { dg-final { scan-assembler "_Z1fDv4_f" } }
+// { dg-final { scan-assembler "_Z1fDv8_f" } }
+
+#include <x86intrin.h>
+void f(__m128) { }
+void f(__m256) { }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle37.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle37.C
new file mode 100644
index 000000000..7270861ac
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle37.C
@@ -0,0 +1,35 @@
+// Testcase for mangling of expressions involving operator names.
+// { dg-options -std=c++0x }
+// { dg-final { scan-assembler "_Z1fI1AEDTclonplfp_fp_EET_" } }
+// { dg-final { scan-assembler "_Z1gI1AEDTclonplIT_Efp_fp_EES1_" } }
+// { dg-final { scan-assembler "_Z1hI1AEDTcldtfp_miEET_" } }
+// { dg-final { scan-assembler "_Z1iI1AEDTcldtfp_srT_miEES1_" } }
+// { dg-final { scan-assembler "_Z1jI1AEDTcldtfp_cvPT_EES1_" } }
+
+struct A {
+ void operator-();
+ template <class T>
+ operator T();
+};
+template <class T>
+T operator+(T,T);
+
+template <class T>
+auto f (T t) -> decltype(operator+(t,t));
+template <class T>
+auto g (T t) -> decltype(operator+<T>(t,t));
+template <class T>
+auto h (T t) -> decltype(t.operator-());
+template <class T>
+auto i (T t) -> decltype(t.T::operator-());
+template <class T>
+auto j (T t) -> decltype(t.operator T*());
+
+int main()
+{
+ f(A());
+ g(A());
+ h(A());
+ i(A());
+ j(A());
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle39.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle39.C
new file mode 100644
index 000000000..289635610
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle39.C
@@ -0,0 +1,28 @@
+// PR c++/42338
+// { dg-options "-std=c++0x -fabi-version=5" }
+// { dg-final { scan-assembler "_Z1fIPiEDTcmppfp_Li0EET_" } }
+// { dg-final { scan-assembler "_Z1gIiEvRK1AIT_EDTixfL0p_Li0EE" } }
+
+template<typename T>
+auto f(T t) -> decltype(++t, 0)
+{
+ ++t;
+ return 0;
+}
+
+template <class T>
+struct A
+{
+ T operator[](int) const { return 0; }
+};
+
+template< typename T >
+void g(const A<T> &a, decltype(a[0]) t) { }
+
+int main()
+{
+ f((int*)0);
+
+ A<int> a;
+ g(a,1);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle40.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle40.C
new file mode 100644
index 000000000..2b8300bff
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle40.C
@@ -0,0 +1,28 @@
+// PR c++/12909
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-require-weak "" }
+// { dg-require-alias "" }
+// { dg-options "-mavx -Wabi -fabi-version=2" }
+// { dg-final { scan-assembler "(weak|glob)\[^\n\]*_Z1fIDv4_fEvT_" } }
+// { dg-final { scan-assembler "(weak|glob)\[^\n\]*_Z1fIU8__vectorfEvT_" } }
+// { dg-final { scan-assembler "(weak|glob)\[^\n\]*_ZN1AIDv4_fE1tE" } }
+// { dg-final { scan-assembler "(weak|glob)\[^\n\]*_ZN1AIU8__vectorfE1tE" } }
+
+#include <x86intrin.h>
+
+template <class T>
+struct A
+{
+ static T t;
+};
+
+template <class T>
+T A<T>::t; // { dg-warning "mangled name" }
+
+template <class T>
+void f (T t) { } // { dg-warning "mangled name" }
+
+int main()
+{
+ f (A<__m128>::t);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle41.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle41.C
new file mode 100644
index 000000000..4c0d0038e
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle41.C
@@ -0,0 +1,8 @@
+// PR c++/41959
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-options "-mavx -fabi-version=2" }
+
+#include <x86intrin.h>
+void f(__m128) { } // { dg-message "previous declaration" }
+void f(__m256) { } // { dg-error "conflicts" }
+// { dg-message "mangling" "" { target *-*-* } 7 }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle42.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle42.C
new file mode 100644
index 000000000..b7e3bd561
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle42.C
@@ -0,0 +1,15 @@
+// Origin: PR c++/43375
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-options "-msse2 -std=gnu++0x" }
+// { dg-require-effective-target sse2 }
+
+typedef float __v4sf __attribute__ ((__vector_size__ (16)));
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
+__v4sf my_asin(__v4sf x)
+{
+ static const __v4si g_Mask{0x7fffffff,
+ 0x00000000,
+ 0x7fffffff,
+ 0x7fffffff };
+ return __builtin_ia32_andnps ((__v4sf) g_Mask, x);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle43.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle43.C
new file mode 100644
index 000000000..4dfa425f6
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle43.C
@@ -0,0 +1,43 @@
+// { dg-do compile { target int128 } }
+// { dg-options "" }
+
+struct S {
+ S(void) { m_i128 = 0; m_u128 = 0; }
+ ~S(void) { }
+ __int128 get1 (void) { return m_i128; }
+ unsigned __int128 get2 (void) { return m_u128; }
+ void set1 (__int128 i) { m_i128 = i; }
+ void set2 (unsigned int i) { m_u128 = 1; }
+ __int128 m_i128;
+ unsigned __int128 m_u128;
+};
+
+struct S glb;
+
+__int128 fo1 (void) { return glb.get1 (); }
+unsigned __int128 fo2 (void) { return glb.get2 (); }
+__int128 fo3 (__int128 i) { __int128 v = fo1 (); glb.set1 (i); return v; }
+unsigned __int128 fo4 (unsigned __int128 i)
+{
+ unsigned __int128 v = fo2 (); glb.set2 (i);
+ return v;
+}
+
+__int128 fo5 (__int128 i)
+{
+ return fo3 (i);
+}
+
+__int128 fo5 (unsigned __int128 i)
+{
+ return (__int128) fo4 (i);
+}
+
+
+// { dg-final { scan-assembler "\n_?_Z3fo1v\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_Z3fo2v\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_Z3fo3n\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_Z3fo4o\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_Z3fo5n\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_Z3fo5o\[: \t\n\]" } }
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle44.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle44.C
new file mode 100644
index 000000000..845414842
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle44.C
@@ -0,0 +1,19 @@
+// PR c++/45008
+
+template <typename T>
+struct A
+{
+ void fn1 () {
+ struct Nested {
+ static void fn2 () { }
+ };
+ Nested::fn2();
+ }
+};
+
+void fn3 () {
+ A<double> a;
+ a.fn1();
+}
+
+// { dg-final { scan-assembler-not "_ZZN1AIT_E3fn1EvEN6Nested3fn2Ev" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle45.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle45.C
new file mode 100644
index 000000000..3ce9abcb0
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle45.C
@@ -0,0 +1,25 @@
+// Testcase for mangling of parameters used other than in a trailing return type
+// { dg-options "-std=c++0x -fabi-version=5" }
+
+template<class T> void f(T p, decltype(p)) { } // L = 1
+template<class T> void g(T p, decltype(p) (*)()) { } // L = 1
+// G++ incorrectly rejects these currently.
+// template<class T> void h(T p, auto (*)()->decltype(p)); // L = 1
+// template<class T> void i(T p, auto (*)(T q)->decltype(q)); // L = 0
+// template<class T> void j(T p, auto (*)(decltype(p))->T); // L = 2
+template<class T> void k(T p, int (*(*)(T* p))[sizeof(p)]) {} // L = 1
+
+int garg();
+int (*karg (int*))[sizeof(int)];
+int main()
+{
+ // { dg-final { scan-assembler "_Z1fIiEvT_DtfL0p_E" } }
+ f (1,0);
+ // { dg-final { scan-assembler "_Z1gIiEvT_PFDtfL0p_EvE" } }
+ g (1,garg);
+ // h (1,0);
+ // i (1,0);
+ // j (1,0);
+ // { dg-final { scan-assembler "_Z1kIiEvT_PFPAszfL0p__iPS0_E" } }
+ k (1,karg);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle46.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle46.C
new file mode 100644
index 000000000..fddc88d0a
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle46.C
@@ -0,0 +1,15 @@
+// PR c++/48008
+// { dg-options -fabi-version=5 }
+// Test that we retain function-cv-quals in template argument mangling.
+
+template <class T>
+struct A
+{ };
+
+typedef void cfn(int) const;
+typedef void fn(int);
+
+// { dg-final { scan-assembler "_Z1f1AIFviEE" } }
+void f(A<fn>) { }
+// { dg-final { scan-assembler "_Z1f1AIKFviEE" } }
+void f(A<cfn>) { }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle47.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle47.C
new file mode 100644
index 000000000..2c1b636dc
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle47.C
@@ -0,0 +1,11 @@
+// PR c++/47132
+// { dg-options -std=c++0x }
+// { dg-final { scan-assembler "_Z1fIiEDToRfp_Li1EET_" } }
+
+template <typename T>
+auto f (T t) -> decltype(t |= 1);
+
+int main()
+{
+ f(1);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle48.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle48.C
new file mode 100644
index 000000000..6c0e99c8d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle48.C
@@ -0,0 +1,29 @@
+// Testcase for 'this' mangling
+// { dg-options -std=c++0x }
+
+struct B
+{
+ template <class U> U f();
+};
+
+struct A
+{
+ B b;
+ // { dg-final { scan-assembler "_ZN1A1fIiEEDTcldtdtdefpT1b1fIT_EEEv" } }
+ template <class U> auto f() -> decltype (b.f<U>());
+ // { dg-final { scan-assembler "_ZN1A1gIiEEDTcldtptfpT1b1fIT_EEEv" } }
+ template <class U> auto g() -> decltype (this->b.f<U>());
+ // { dg-final { scan-assembler "_ZN1A1hIiEEDTcldtdtdefpT1bsr1B1fIT_EEEv" } }
+ template <class U> auto h() -> decltype (b.B::f<U>());
+ // { dg-final { scan-assembler "_ZN1A1iIiEEDTcldtptfpT1bsr1B1fIT_EEEv" } }
+ template <class U> auto i() -> decltype (this->b.B::f<U>());
+};
+
+int main()
+{
+ A a;
+ a.f<int>();
+ a.g<int>();
+ a.h<int>();
+ a.i<int>();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle49.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle49.C
new file mode 100644
index 000000000..a258dc2d4
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle49.C
@@ -0,0 +1,22 @@
+// PR c++/49932
+// { dg-options "-std=c++0x -fabi-version=0" }
+
+template < typename T >
+auto
+f1( T x ) // ICE on here
+ -> typename decltype( x )::type {}
+
+template < typename T >
+typename decltype( T() )::type
+f2( T x ) {} // ICE on here
+
+struct S { typedef void type; };
+
+void g()
+{
+ f1( S() );
+ f2( S() );
+}
+
+// { dg-final { scan-assembler "_Z2f1I1SENDtfp_E4typeET_" } }
+// { dg-final { scan-assembler "_Z2f2I1SENDTcvT__EE4typeES1_" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle5.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle5.C
new file mode 100644
index 000000000..99a08730f
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle5.C
@@ -0,0 +1,6 @@
+// Test mangling of pointers to cv-qualified member functions
+
+struct A;
+void f (void (A::*)() const) {}
+
+// { dg-final { scan-assembler "\n_?_Z1fM1AKFvvE\[: \t\n\]" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle50.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle50.C
new file mode 100644
index 000000000..df7afb97e
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle50.C
@@ -0,0 +1,25 @@
+// DR 342, PR c++/48582
+// { dg-options -std=c++0x }
+
+struct A;
+template < void * = nullptr > void f() { }
+template < void (A::*)() = nullptr > void g() { }
+template < int A::* = nullptr > void h() { }
+
+int main()
+{
+ // { dg-final { scan-assembler "_Z1fILPv0EEvv" } }
+ f();
+ f<nullptr>();
+
+ // { dg-final { scan-assembler "_Z1gILM1AFvvE0EEvv" } }
+ g();
+ g<nullptr>();
+
+ // { dg-final { scan-assembler "_Z1fILPv0EEvv" } }
+ h();
+ h<nullptr>();
+
+ constexpr void * ptr = nullptr;
+ f<ptr>();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle51.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle51.C
new file mode 100644
index 000000000..4992f1a32
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle51.C
@@ -0,0 +1,27 @@
+// { dg-options "-std=c++0x -fabi-version=0" }
+
+void* operator new (__SIZE_TYPE__, void *p) { return p; }
+int i;
+
+template <unsigned int> struct helper {};
+// { dg-final { scan-assembler "_Z6check1IiEvP6helperIXsznw_T_EEE" } }
+template <class T> void check1( helper<sizeof(new T)> * ) { }
+// { dg-final { scan-assembler "_Z6check2IiEvP6helperIXszgsnw_T_piEEE" } }
+template <class T> void check2( helper<sizeof(::new T())> * ) { }
+// { dg-final { scan-assembler "_Z6check3IiEvP6helperIXsznwadL_Z1iE_T_piLi1EEEE" } }
+template <class T> void check3( helper<sizeof(new (&i) T(1))> * ) { }
+// { dg-final { scan-assembler "_Z7check3aIiEvP6helperIXsznw_T_ilLi1EEEE" } }
+template <class T> void check3a( helper<sizeof(new T{1})> * ) { }
+// { dg-final { scan-assembler "_Z6check4IiEvP6helperIXszna_A1_T_EEE" } }
+template <class T> void check4( helper<sizeof(new T[1])> * ) { }
+// { dg-final { scan-assembler "_Z6check5IiEvP6helperIXszna_A1_T_piEEE" } }
+template <class T> void check5( helper<sizeof(new T[1]())> * ) { }
+int main()
+{
+ check1<int>(0);
+ check2<int>(0);
+ check3<int>(0);
+ check3a<int>(0);
+ check4<int>(0);
+ check5<int>(0);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle52.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle52.C
new file mode 100644
index 000000000..2c463415f
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle52.C
@@ -0,0 +1,21 @@
+// { dg-options "-fabi-version=0" }
+
+template <unsigned int> struct helper {};
+// { dg-final { scan-assembler "_Z6check1IiEvP6helperIXszscT_Li1EEE" } }
+template <class T> void check1( helper<sizeof(static_cast<T>(1))> * ) { }
+// { dg-final { scan-assembler "_Z6check2IiXadL_Z1iEEEvP6helperIXszccPT_T0_EE" } }
+template <class T, T* p> void check2( helper<sizeof(const_cast<T*>(p))> * ) { }
+// { dg-final { scan-assembler "_Z6check3IiEvP6helperIXszrcPT_Li0EEE" } }
+template <class T> void check3( helper<sizeof(reinterpret_cast<T*>(0))> * ) { }
+// { dg-final { scan-assembler "_Z6check4I1AXadL_Z1aEEEvP6helperIXszdcPT_T0_EE" } }
+template <class T, T* p> void check4( helper<sizeof(dynamic_cast<T*>(p))> * ) { }
+
+struct A{} a;
+int i;
+int main()
+{
+ check1<int>(0);
+ check2<int,&i>(0);
+ check3<int>(0);
+ check4<A,&a>(0);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle53.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle53.C
new file mode 100644
index 000000000..b279182d8
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle53.C
@@ -0,0 +1,13 @@
+// { dg-options "-std=c++0x" }
+
+bool b;
+// { dg-final { scan-assembler "_Z1fIiEDTquL_Z1bEfp_twLi42EET_" } }
+template <class T> auto f (T t) -> decltype(b?t:throw 42) { return 0; }
+// { dg-final { scan-assembler "_Z2f2IiEDTquL_Z1bEfp_trET_" } }
+template <class T> auto f2 (T t) -> decltype(b?t:throw) { return 0; }
+
+int main()
+{
+ f(0);
+ f2(0);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle54.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle54.C
new file mode 100644
index 000000000..ea98df17d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle54.C
@@ -0,0 +1,19 @@
+// { dg-options "-std=c++0x -fabi-version=0" }
+
+int i;
+// { dg-final { scan-assembler "_Z2f1IiEDTppfp_ET_" } }
+template <class T> auto f1 (T t) -> decltype(t++) { return i; }
+// { dg-final { scan-assembler "_Z2f2IiEDTpp_fp_ET_" } }
+template <class T> auto f2 (T t) -> decltype(++t) { return i; }
+// { dg-final { scan-assembler "_Z2f3IiEDTmmfp_ET_" } }
+template <class T> auto f3 (T t) -> decltype(t--) { return i; }
+// { dg-final { scan-assembler "_Z2f4IiEDTmm_fp_ET_" } }
+template <class T> auto f4 (T t) -> decltype(--t) { return i; }
+
+int main()
+{
+ f1(0);
+ f2(0);
+ f3(0);
+ f4(0);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle55.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle55.C
new file mode 100644
index 000000000..72caadcc2
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle55.C
@@ -0,0 +1,14 @@
+// { dg-options "-std=c++0x" }
+
+struct A { int i; };
+// { dg-final { scan-assembler "_Z2f1Ii1AEDTdsfp_fp0_ET0_MS2_T_" } }
+template <class T, class U> auto f1 (U u, T U::* p) -> decltype(u.*p) { return u.*p; }
+// { dg-final { scan-assembler "_Z2f2Ii1AEDTpmfp_fp0_EPT0_MS2_T_" } }
+template <class T, class U> auto f2 (U* u, T U::* p) -> decltype(u->*p) { return u->*p; }
+
+int main()
+{
+ A a = {};
+ f1(a, &A::i);
+ f2(&a, &A::i);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle56.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle56.C
new file mode 100644
index 000000000..0fd270169
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle56.C
@@ -0,0 +1,13 @@
+// { dg-options "-std=c++0x" }
+
+template <class T> T g(T t1, T t2) { return t2; }
+// { dg-final { scan-assembler "_Z2f1IiEDTcl1gfp_ilEEET_" } }
+template <class T> auto f1 (T t) -> decltype(g(t,{})) { return g(t,{}); }
+// { dg-final { scan-assembler "_Z2f2IiEDTcl1gfp_tlT_EEES0_" } }
+template <class T> auto f2 (T t) -> decltype(g(t,T{})) { return g(t,T{}); }
+
+int main()
+{
+ f1(0);
+ f2(0);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle57.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle57.C
new file mode 100644
index 000000000..3d9d81e55
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle57.C
@@ -0,0 +1,16 @@
+// { dg-options "-std=c++0x -fabi-version=0" }
+
+template<typename T> int cmp1(T a, T b);
+int cmp2(char a, char b);
+template<typename T, int (*cmp)(T, T)> struct A { };
+// { dg-final { scan-assembler "_Z1fIcEvR1AIT_X4cmp1EE" } }
+template <typename T> void f (A<T,cmp1> &);
+// { dg-final { scan-assembler "_Z1fIcEvR1AIT_L_Z4cmp2ccEE" } }
+template <typename T> void f (A<T,cmp2> &);
+void g()
+{
+ A<char,cmp1> a;
+ f(a);
+ A<char,cmp2> a2;
+ f(a2);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle58.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle58.C
new file mode 100644
index 000000000..54b16f256
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle58.C
@@ -0,0 +1,25 @@
+// { dg-options "-std=c++0x -fabi-version=0" }
+
+template<typename T, int (*cmp)(T, T)> struct A { };
+struct B {
+ template<typename T> static int cmp1(T a, T b);
+ static int cmp2(char a, char b);
+ // { dg-final { scan-assembler "_ZN1B1fIcEEvR1AIT_X4cmp1EE" } }
+ template <typename T> static void f (A<T,cmp1> &);
+ // { dg-final { scan-assembler "_ZN1B1gIcEEvR1AIT_XsrS_4cmp1EE" } }
+ template <typename T> static void g (A<T,B::cmp1> &);
+ // { dg-final { scan-assembler "_ZN1B1fIcEEvR1AIT_L_ZNS_4cmp2EccEE" } }
+ template <typename T> static void f (A<T,cmp2> &);
+ // { dg-final { scan-assembler "_ZN1B1gIcEEvR1AIT_L_ZNS_4cmp2EccEE" } }
+ template <typename T> static void g (A<T,B::cmp2> &);
+};
+
+void g()
+{
+ A<char,B::cmp1> a;
+ B::f(a);
+ B::g(a);
+ A<char,B::cmp2> a2;
+ B::f(a2);
+ B::g(a2);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle59.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle59.C
new file mode 100644
index 000000000..3c88ec874
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle59.C
@@ -0,0 +1,19 @@
+// { dg-options "-std=c++0x -fabi-version=0" }
+
+// { dg-final { scan-assembler "_Z1fIiEDTcmdlfp_psfp_EPT_" } }
+template <class T> auto f (T* p) -> decltype(delete p, +p) { return p; }
+// { dg-final { scan-assembler "_Z1gIiEDTcmgsdlfp_psfp_EPT_" } }
+template <class T> auto g (T* p) -> decltype(::delete p, +p) { return p; }
+// { dg-final { scan-assembler "_Z1hIiEDTcmdafp_psfp_EPT_" } }
+template <class T> auto h (T* p) -> decltype(delete[] p, +p) { return p; }
+// { dg-final { scan-assembler "_Z1iIiEDTcmgsdafp_psfp_EPT_" } }
+template <class T> auto i (T* p) -> decltype(::delete[] p, +p) { return p; }
+
+int main()
+{
+ int x;
+ f(&x);
+ g(&x);
+ h(&x);
+ i(&x);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle6.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle6.C
new file mode 100644
index 000000000..280fe2499
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle6.C
@@ -0,0 +1,23 @@
+/* Check that __int128 types are mangled. */
+/* { dg-do compile { target mips*-*-* } } */
+
+#ifdef __mips64
+typedef int int128 __attribute__ ((mode(TI)));
+typedef unsigned int uint128 __attribute__ ((mode(TI)));
+
+struct S
+{
+ int128 i;
+ int128 func1 (int128) const { return i; }
+ uint128 func2 (uint128) const { return i; }
+};
+
+int128 (S::*ptr1) (int128) const = &S::func1;
+uint128 (S::*ptr2) (uint128) const = &S::func2;
+#else
+const char *str1 = "_ZNK1S5func1En";
+const char *str2 = "_ZNK1S5func2Eo";
+#endif
+
+/* { dg-final { scan-assembler _ZNK1S5func1En } } */
+/* { dg-final { scan-assembler _ZNK1S5func2Eo } } */
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle60.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle60.C
new file mode 100644
index 000000000..f7e893a55
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle60.C
@@ -0,0 +1,20 @@
+// PR c++/51854
+// { dg-options "" }
+
+template <unsigned N> struct A;
+
+template <typename U, typename V>
+char foo(U, V);
+
+// { dg-final { scan-assembler "_Z3barIiEvP1AIXszcl3foocvT__ELCi0_42EEEE" } }
+template <typename U>
+void bar(A<sizeof(foo(U(), 42i))> *);
+
+// { dg-final { scan-assembler "_Z3bazIiEvP1AIXszcl3foocvT__ELCf00000000_00000000EEEE" } }
+template <typename U>
+void baz(A<sizeof(foo(U(), 0.0fj))> *);
+
+int main() {
+ bar<int>(0);
+ baz<int>(0);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle61.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle61.C
new file mode 100644
index 000000000..2ae336e42
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle61.C
@@ -0,0 +1,28 @@
+// PR c++/56237
+// { dg-do compile }
+
+void *p[4];
+
+void
+foo ()
+{
+ static union { } u;
+ p[0] = &u;
+ {
+ static union { } u;
+ p[1] = &u;
+ {
+ static union { } u;
+ p[2] = &u;
+ }
+ }
+ {
+ static union { } u;
+ p[3] = &u;
+ }
+}
+
+// { dg-final { scan-assembler "_ZZ3foovE1u\[^_\]" } }
+// { dg-final { scan-assembler "_ZZ3foovE1u_0" } }
+// { dg-final { scan-assembler "_ZZ3foovE1u_1" } }
+// { dg-final { scan-assembler "_ZZ3foovE1u_2" } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle7.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle7.C
new file mode 100644
index 000000000..af178d3e5
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle7.C
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+
+typedef void *const t1[2];
+float const f1(t1 (&)[79], ...) {}
+
+/* { dg-final { scan-assembler _Z2f1RA79_A2_KPvz } } */
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle8.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle8.C
new file mode 100644
index 000000000..6a073588a
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle8.C
@@ -0,0 +1,16 @@
+// Red Hat bugzilla 65035
+// Bug: We were encoding the name of the instantiation as 'operator int'
+// rather than 'operator T'.
+// { dg-do compile }
+
+struct C {
+ template <class T>
+ operator T ();
+};
+
+template <class T>
+C::operator T () { return 0; }
+
+template C::operator int ();
+
+// { dg-final { scan-assembler _ZN1CcvT_IiEEv } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle9.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle9.C
new file mode 100644
index 000000000..f3ededfb4
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/mangle9.C
@@ -0,0 +1,12 @@
+// { dg-options "-fabi-version=0" }
+
+template <typename Q>
+void f (typename Q::X) {}
+
+struct S {
+ typedef int X;
+};
+
+template void f<S> (int);
+
+// { dg-final { scan-assembler _Z1fI1SEvNT_1XE } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/noreturn1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/noreturn1.C
new file mode 100644
index 000000000..0532cf2f8
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/noreturn1.C
@@ -0,0 +1,14 @@
+// Test that attribute noreturn is not part of the mangled name.
+// { dg-options -fabi-version=0 }
+
+void baz (const char *fmt, ...);
+
+// { dg-final { scan-assembler "_Z3barPFvPKczE" } }
+void bar (void (*baz) (const char *fmt, ...)
+ __attribute__ ((noreturn, format (printf, 1, 2))));
+
+void
+foo ()
+{
+ bar (&baz);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/noreturn2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/noreturn2.C
new file mode 100644
index 000000000..72accafe6
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/noreturn2.C
@@ -0,0 +1,14 @@
+// Test for buggy mangling of attribute noreturn in abi<=4
+// { dg-options -fabi-version=4 }
+
+void baz (const char *fmt, ...);
+
+// { dg-final { scan-assembler "_Z3barPVFvPKczE" } }
+void bar (void (*baz) (const char *fmt, ...)
+ __attribute__ ((noreturn, format (printf, 1, 2))));
+
+void
+foo ()
+{
+ bar (&baz);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/offsetof.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/offsetof.C
new file mode 100644
index 000000000..d6a53e6f8
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/offsetof.C
@@ -0,0 +1,22 @@
+// Test that we can refer to the address of a base member of a null pointer
+// to get its offset. The standard says that offsetof shall not be used on
+// non-POD classes, but there seems to be no such restriction on the common
+// implementation thereof.
+
+// Yes, this is bad, naughty, evil code. But it seems to be well-formed.
+// So we'll just warn.
+
+// { dg-do run }
+
+struct A { int i; };
+
+struct B: public A {
+ virtual void f ();
+};
+
+struct C: public B { };
+
+int main ()
+{
+ return ((__SIZE_TYPE__) &((C*)0)->i) != sizeof(void*); // { dg-warning "offsetof|invalid" "" }
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/packed1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/packed1.C
new file mode 100644
index 000000000..834537532
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/packed1.C
@@ -0,0 +1,24 @@
+// PR c++/41788
+// { dg-do run }
+// { dg-options "-Wpacked -Wno-attributes" }
+
+extern "C" void abort ();
+
+struct INNER {
+ virtual int foo() const { return 1; }
+} __attribute__ ((packed));
+
+struct OUTER {
+ char c;
+ INNER inner;
+} __attribute__ ((packed));
+
+int main()
+{
+ OUTER outer;
+ int s = sizeof(outer);
+ int o = (char *)&outer.inner - (char *)&outer;
+ if (s != sizeof (char) + sizeof (void*)
+ || o != sizeof (char))
+ abort ();
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/param1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/param1.C
new file mode 100644
index 000000000..c438a1940
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/param1.C
@@ -0,0 +1,28 @@
+// { dg-do run }
+//
+
+// Failed on powerpc64-linux for structure sizes > 64 and with size not a
+// multiple of 8 after padding.
+struct object
+{
+ int i1;
+ char s1[60];
+ int i2;
+ char s2[64];
+};
+
+extern int subr (struct object obj);
+
+int main ()
+{
+ struct object obj;
+
+ obj.i1 = 1234;
+ obj.i2 = 5678;
+ return subr (obj);
+}
+
+int subr (struct object obj)
+{
+ return obj.i1 != 1234 || obj.i2 != 5678;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/param2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/param2.C
new file mode 100644
index 000000000..d28387ab3
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/param2.C
@@ -0,0 +1,19 @@
+// PR target/20795
+// Test passing aligned empty aggregate
+// { dg-do compile }
+// { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } }
+
+struct S { union {} a; } __attribute__((aligned));
+
+S
+foo (S arg)
+{
+ return arg;
+}
+
+void
+bar (void)
+{
+ S arg;
+ foo (arg);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1.h b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1.h
new file mode 100644
index 000000000..ece67daae
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1.h
@@ -0,0 +1,11 @@
+inline int
+f (int x)
+{
+ static union
+ {
+ int i;
+ };
+ int j = i;
+ i = x;
+ return j;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1a.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1a.C
new file mode 100644
index 000000000..eb646696d
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1a.C
@@ -0,0 +1,12 @@
+// PR c++/39188
+// { dg-do run }
+// { dg-options "-O2" }
+// { dg-additional-sources "pr39188-1b.C" }
+
+#include "pr39188-1.h"
+
+int
+x (int i)
+{
+ return f (i);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1b.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1b.C
new file mode 100644
index 000000000..71c992637
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-1b.C
@@ -0,0 +1,15 @@
+#include "pr39188-1.h"
+
+extern "C" void abort ();
+
+extern int x (int);
+
+int
+main (void)
+{
+ if (x (1) != 0)
+ abort ();
+ if (f (1) != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2.h b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2.h
new file mode 100644
index 000000000..6ff5f49db
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2.h
@@ -0,0 +1,12 @@
+template<typename T>
+T
+f (T x)
+{
+ static union
+ {
+ T i;
+ };
+ T j = i;
+ i = x;
+ return j;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2a.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2a.C
new file mode 100644
index 000000000..071b585f4
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2a.C
@@ -0,0 +1,12 @@
+// PR c++/39188
+// { dg-do run }
+// { dg-options "-O2" }
+// { dg-additional-sources "pr39188-2b.C" }
+
+#include "pr39188-2.h"
+
+int
+x (int i)
+{
+ return f<int> (i);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2b.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2b.C
new file mode 100644
index 000000000..f91367ba2
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-2b.C
@@ -0,0 +1,15 @@
+#include "pr39188-2.h"
+
+extern "C" void abort ();
+
+extern int x (int);
+
+int
+main (void)
+{
+ if (x (1) != 0)
+ abort ();
+ if (f<int> (1) != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3.h b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3.h
new file mode 100644
index 000000000..e0c9f619c
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3.h
@@ -0,0 +1,11 @@
+static int
+f (int x)
+{
+ static union
+ {
+ int i;
+ };
+ int j = i;
+ i = x;
+ return j;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3a.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3a.C
new file mode 100644
index 000000000..5596d1241
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3a.C
@@ -0,0 +1,12 @@
+// PR c++/39188
+// { dg-do run }
+// { dg-options "-O2" }
+// { dg-additional-sources "pr39188-3b.C" }
+
+#include "pr39188-3.h"
+
+int
+x (int i)
+{
+ return f (i);
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3b.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3b.C
new file mode 100644
index 000000000..84db157a7
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pr39188-3b.C
@@ -0,0 +1,15 @@
+#include "pr39188-3.h"
+
+extern "C" void abort ();
+
+extern int x (int);
+
+int
+main (void)
+{
+ if (x (1) != 0)
+ abort ();
+ if (f (1) != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pragma-pack1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pragma-pack1.C
new file mode 100644
index 000000000..9b76071c9
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/pragma-pack1.C
@@ -0,0 +1,37 @@
+// PR c++/7046
+
+extern "C" int printf (const char *, ...);
+
+#pragma pack(4)
+
+template <typename X >
+struct T
+{
+ char x1; /* Usually 3 padding bytes are added after x1 member. */
+ int x2;
+};
+
+template <class T>
+int f()
+{
+ struct A { char i1; int i2; };
+ return sizeof (A);
+}
+
+#pragma pack(1)
+template struct T<int>; /* T<int> is instantiated here */
+template int f<int>();
+
+#pragma pack(4)
+template struct T<float>; /* T<float> is required here */
+template int f<double>();
+
+int main()
+{
+ printf("sizeof T<int> = %d\n", sizeof(T<int>));
+ printf("sizeof T<float> = %d\n", sizeof(T<float>));
+ printf("f<int>() = %d\n", f<int>());
+ printf("f<float>() = %d\n", f<float>());
+ return (sizeof(T<int>) != sizeof(T<float>)
+ || f<int>() != f<float>());
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/regparm1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/regparm1.C
new file mode 100644
index 000000000..42a54a0e0
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/regparm1.C
@@ -0,0 +1,51 @@
+// PR c++/29911 (9381)
+// { dg-options -std=c++0x }
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+
+extern "C" int printf(const char *, ...);
+
+void *save_this;
+int *save_addr1, *save_addr2;
+
+int fail;
+
+struct Base
+{
+ __attribute((regparm(3))) void
+ set(int *addr1, int *addr2)
+ {
+ if (this != save_this)
+ {
+ ++fail;
+ printf("error! this == %p, should be %p\n", this, save_this);
+ }
+ if (addr1 != save_addr1)
+ {
+ ++fail;
+ printf("error! addr1 == %p, should be %p\n", addr1, save_addr1);
+ }
+ if (addr2 != save_addr2)
+ {
+ ++fail;
+ printf("error! addr2 == %p, should be %p\n", addr2, save_addr1);
+ }
+ }
+};
+
+int main()
+{
+ void (__attribute((regparm(3))) Base::* pfm)(int *, int *) = &Base::set;
+ __typeof (&Base::set) pfm2 = &Base::set;
+ decltype (&Base::set) pfm3 = &Base::set;
+ auto pfm4 = &Base::set;
+
+ Base obj; save_this = &obj;
+ int x, y; save_addr1 = &x; save_addr2 = &y;
+
+ (obj.* pfm) (&x, &y);
+ (obj.* pfm2) (&x, &y);
+ (obj.* pfm3) (&x, &y);
+ (obj.* pfm4) (&x, &y);
+
+ return fail;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti1.C
new file mode 100644
index 000000000..f17d88aad
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti1.C
@@ -0,0 +1,13 @@
+// Test that we don't emit the type_info for a polymorphic class other than
+// with the vtable.
+
+struct A {
+ virtual ~A();
+};
+
+void f ()
+{
+ throw A();
+}
+
+// { dg-final { scan-assembler-dem-not {\ntypeinfo for A[: \t\n]} } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti2.C
new file mode 100644
index 000000000..eece8724a
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti2.C
@@ -0,0 +1,12 @@
+// { dg-do run }
+
+#include <cxxabi.h>
+#include <typeinfo>
+
+int main () {
+ const std::type_info& ti = typeid (const int (*)[3]);
+ const abi::__pointer_type_info& pti
+ = static_cast<const abi::__pointer_type_info&>(ti);
+ if ((pti.__flags & pti.__const_mask) == 0)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti3.C
new file mode 100644
index 000000000..c03e4611c
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/rtti3.C
@@ -0,0 +1,16 @@
+// PR 20647, we must emit the typeinfo's string as weak, but not the
+// necessarily the type info object
+
+// { dg-require-weak "" }
+// { dg-skip-if "Linkonce not weak" { *-*-mingw* *-*-cygwin } { "*" } { "" } }
+// { dg-final { scan-assembler ".weak\[ \t\]_?_ZTSPP1A" { target { ! { *-*-darwin* } } } } }
+// { dg-final { scan-assembler-not ".weak\[ \t\]_?_ZTIPP1A" { target { ! { *-*-darwin* } } } } }
+// { dg-final { scan-assembler ".weak_definition\[ \t\]_?_ZTSPP1A" { target { *-*-darwin* } } } }
+// { dg-final { scan-assembler-not ".weak_definition\[ \t\]_?_ZTIPP1A" { target { *-*-darwin* } } } }
+
+struct A;
+
+void Foo ()
+{
+ throw (A **)0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/structret1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/structret1.C
new file mode 100644
index 000000000..e9d4fd0ff
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/structret1.C
@@ -0,0 +1,31 @@
+// { dg-do run { target ia64-*-* } }
+// { dg-options "-fabi-version=0" }
+
+extern "C" void abort ();
+
+struct ConstructedObject {
+ ConstructedObject() {};
+ ~ConstructedObject() {};
+ ConstructedObject(const ConstructedObject &from) {};
+};
+
+struct FrameworkObject {
+ ConstructedObject action();
+};
+
+ConstructedObject FrameworkObject::action() {
+ void *r32, *r33;
+
+ asm("mov %0 = r32\nmov %1 = r33" : "=r"(r32), "=r"(r33) : );
+ if (this != r33) {
+ abort ();
+ }
+}
+
+int main()
+{
+ FrameworkObject slawa;
+ slawa.action();
+ return 0;
+}
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk1.C
new file mode 100644
index 000000000..343a2aa6e
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk1.C
@@ -0,0 +1,24 @@
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+
+
+struct A {
+ virtual void f ();
+};
+
+struct B : public virtual A {
+ virtual void f ();
+};
+
+struct C {
+ virtual void g ();
+};
+
+struct D : public C, public B {
+ virtual void f ();
+};
+
+void D::f () {}
+
+// { dg-final { scan-assembler _ZThn4_N1D1fEv } }
+// { dg-final { scan-assembler _ZTv0_n12_N1D1fEv } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk2.C
new file mode 100644
index 000000000..e6b2924cf
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk2.C
@@ -0,0 +1,27 @@
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+// { dg-options -w }
+
+struct A {
+ virtual void f2 ();
+ virtual void f3 ();
+};
+
+struct B : virtual public A {
+ virtual void f3 ();
+};
+
+struct C : public A, public B {
+ virtual void f4 ();
+};
+
+struct D : virtual public B, virtual public C, virtual public A
+{
+ virtual void f5 ();
+ virtual void f6 ();
+ virtual void f3 ();
+};
+
+void D::f3 () {}
+
+// { dg-final { scan-assembler _ZTvn4_n20_N1D2f3Ev } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk3.C
new file mode 100644
index 000000000..f2347f79e
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk3.C
@@ -0,0 +1,22 @@
+// { dg-require-weak "" }
+// { dg-final { scan-assembler-not ".weak\[\t \]_?_ZThn._N7Derived3FooEv" { target { ! { *-*-darwin* } } } } }
+// { dg-final { scan-assembler-not ".weak_definition\[\t \]_?_ZThn._N7Derived3FooEv" { target { *-*-darwin* } } } }
+
+struct Base
+{
+ virtual void Foo ();
+};
+
+struct Filler
+{
+ virtual void Baz ();
+};
+
+struct Derived : Filler, Base
+{
+ virtual void Foo ();
+};
+
+void Derived::Foo ()
+{
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk4.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk4.C
new file mode 100644
index 000000000..fa5fbd432
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk4.C
@@ -0,0 +1,25 @@
+// { dg-require-weak "" }
+// { dg-skip-if "Linkonce not weak" { *-*-mingw* *-*-cygwin } { "*" } { "" } }
+// { dg-final { scan-assembler ".weak\[ \t\]_?_ZThn._N7Derived3FooEv" { target { ! { *-*-darwin* } } } } }
+// { dg-final { scan-assembler ".weak_definition\[ \t\]_?_ZThn._N7Derived3FooEv" { target { *-*-darwin* } } } }
+
+struct Base
+{
+ virtual void Foo ();
+};
+
+struct Filler
+{
+ virtual void Baz ();
+};
+
+struct Derived : Filler, Base
+{
+ virtual void Foo ();
+};
+
+inline void Derived::Foo ()
+{
+}
+
+Derived f;
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk5.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk5.C
new file mode 100644
index 000000000..15526bf9e
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/thunk5.C
@@ -0,0 +1,13 @@
+// PR c++/35067
+// The thunks should be weak even on targets without one-only support.
+// { dg-require-weak "" }
+// { dg-final { scan-assembler "weak.*ZTv" } }
+
+struct A
+{
+ virtual ~A() { }
+};
+
+struct B: virtual A { };
+
+B b;
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vague1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vague1.C
new file mode 100644
index 000000000..02feee9e2
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vague1.C
@@ -0,0 +1,17 @@
+// Test that we don't emit unneeded copies of static data member template
+// instantiations.
+
+// Disable debug info so we don't get confused by the symbol name there.
+// { dg-options "-g0" }
+
+template <class T> struct A {
+ static const T t = 0;
+};
+
+template <class T> const T A<T>::t;
+
+int i;
+int main ()
+{
+ i = A<int>::t; // Should just use the value
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase1.C
new file mode 100644
index 000000000..39d8b8102
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase1.C
@@ -0,0 +1,60 @@
+// { dg-do compile }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 5 Sept 2001 <nathan@codesourcery.com>
+
+// Bug 3986. Another indirect primary base problem.
+
+struct Consts
+{
+};
+
+struct MathLib :
+ virtual Consts
+{
+};
+
+struct Parallel :
+ virtual Consts
+{
+};
+
+struct Particles :
+ virtual MathLib,
+ virtual Parallel
+{
+};
+
+struct Ring :
+ virtual Particles
+{
+};
+
+struct Injection :
+ virtual Particles,
+ virtual Ring
+{
+};
+
+struct LSpaceCharge :
+ virtual Ring,
+ virtual Injection
+{
+};
+
+struct Bump :
+ virtual Consts
+{
+};
+
+struct Output :
+ virtual Injection,
+ virtual Bump
+{
+};
+
+struct Plots :
+ virtual LSpaceCharge,
+ virtual Output
+{
+};
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase10.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase10.C
new file mode 100644
index 000000000..b6e7f88fc
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase10.C
@@ -0,0 +1,14 @@
+// { dg-do compile }
+// -fpack-struct is necessary because the code below assumes the initial
+// packing is larger than 1, which cannot ge guaranteed for all targets.
+// { dg-options "-Wabi -fabi-version=1 -fpack-struct=8" }
+// On ARM processors, the alignment of B will be 4 even though it
+// contains only a single "char". That would avoids the situation
+// that the warning below is designed to catch. We therefore
+// explicitly set the default structure alignment to 1.
+// { dg-options "-Wabi -fabi-version=1 -mstructure-size-boundary=8" { target arm*-*-* } }
+
+struct A { virtual void f(); char c1; };
+struct B { B(); char c2; };
+struct C : public A, public virtual B {}; // { dg-warning "ABI" }
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase11.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase11.C
new file mode 100644
index 000000000..8c854b9c1
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase11.C
@@ -0,0 +1,13 @@
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+// { dg-options "-fabi-version=0" }
+
+struct A { virtual void f(); char c1; };
+struct B { B(); char c2; };
+struct C : public A, public virtual B { };
+
+int main () {
+ if (sizeof (C) != 8)
+ return 1;
+}
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase12.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase12.C
new file mode 100644
index 000000000..98b9054f0
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase12.C
@@ -0,0 +1,14 @@
+// { dg-do run }
+// { dg-options "-fabi-version=0" }
+
+struct A {};
+struct B { A a; virtual void f () {} };
+struct C : public B, virtual public A {};
+struct D : public C, virtual public A {};
+
+D d;
+
+int main () {
+ if (((char*)(A*)&d - (char*)&d) != 0)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase13.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase13.C
new file mode 100644
index 000000000..6a0bff484
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase13.C
@@ -0,0 +1,17 @@
+// { dg-do run }
+// { dg-options "-fabi-version=0 -w" }
+
+struct E1 {};
+struct E2 : public E1 {};
+struct E : public E1, public E2 {};
+struct N : public E { virtual void f () {} };
+
+struct X : virtual public N {
+};
+
+int main () {
+ X x;
+ /* N should not be the primary base of X; it is not nearly empty. */
+ if ((void*)&x == (void*)(N*)&x)
+ return 1;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase14.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase14.C
new file mode 100644
index 000000000..320d5ba77
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase14.C
@@ -0,0 +1,6 @@
+// { dg-options "-Wabi -fabi-version=1" }
+
+struct E1 {};
+struct E2 : public E1 {}; // { dg-warning "layout" }
+struct E : public E1, public E2 {}; // { dg-warning "layout|ambiguity" }
+struct N : public E { virtual void f () {} }; // { dg-warning "nearly" }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase15.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase15.C
new file mode 100644
index 000000000..a0908f40e
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase15.C
@@ -0,0 +1,30 @@
+ // { dg-do run }
+
+struct Spec
+
+{
+ virtual int id () const = 0;
+};
+class D1_1_Spec : public virtual Spec { };
+class D1_2_Spec : public virtual Spec { };
+class D1_3_Spec : public virtual Spec { };
+class D2_1_Spec : public D1_1_Spec, public D1_2_Spec { };
+class D2_Spec : public virtual D2_1_Spec, public virtual D1_3_Spec { };
+
+struct D3_Spec : public D2_Spec
+{
+ virtual int id () const { return 3; }
+
+};
+
+__attribute__((noinline)) void foo(D3_Spec* spec)
+{
+ spec->id();
+}
+
+int main()
+{
+ D3_Spec spec;
+ foo(&spec);
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-10.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-10.C
new file mode 100644
index 000000000..81896ed64
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-10.C
@@ -0,0 +1,75 @@
+// { dg-options -w }
+// { dg-do run }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 26 Jul 2001 <nathan@codesourcery.com>
+
+// Origin stefan@space.twc.de
+// Bug 3145 case 10. Horribly complicated class hierarchy
+
+class C0
+{};
+class C1
+ : public C0
+{};
+class C2
+ : public C1
+ , virtual public C0
+{};
+class C3
+ : public C1
+ , public C2
+ , virtual public C0
+{};
+class C4
+ : virtual public C1
+ , virtual public C0
+ , virtual public C3
+ , public C2
+{};
+class C5
+ : public C3
+ , virtual public C0
+ , virtual public C2
+{};
+class C6
+ : public C1
+ , public C2
+ , virtual public C5
+ , virtual public C3
+ , virtual public C0
+{};
+class C7
+ : public C1
+ , virtual public C5
+ , virtual public C4
+ , virtual public C2
+ , virtual public C0
+ , virtual public C6
+{};
+class C8
+ : virtual public C4
+ , public C3
+ , public C0
+ , virtual public C7
+ , virtual public C6
+{};
+class C9
+ : virtual public C0
+ , public C4
+ , public C8
+ , public C1
+ , public C6
+{};
+main() {
+ C0 c0;
+ C1 c1;
+ C2 c2;
+ C3 c3;
+ C4 c4;
+ C5 c5;
+ C6 c6;
+ C7 c7;
+ C8 c8;
+ C9 c9;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-21.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-21.C
new file mode 100644
index 000000000..0da644625
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-21.C
@@ -0,0 +1,75 @@
+// { dg-options -w }
+// { dg-do run }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 26 Jul 2001 <nathan@codesourcery.com>
+
+// Origin stefan@space.twc.de
+// Bug 3145 case 10. Horribly complicated class hierarchy
+
+class C0
+{};
+class C1
+ : virtual public C0
+{};
+class C2
+ : virtual public C1
+ , virtual public C0
+{};
+class C3
+ : virtual public C2
+ , virtual public C1
+{};
+class C4
+ : virtual public C2
+ , public C0
+ , public C1
+{};
+class C5
+ : virtual public C0
+ , public C2
+ , virtual public C1
+ , virtual public C3
+ , virtual public C4
+{};
+class C6
+ : virtual public C1
+ , virtual public C3
+ , public C0
+ , public C2
+ , virtual public C4
+{};
+class C7
+ : virtual public C5
+ , public C2
+ , public C6
+ , virtual public C0
+ , public C3
+{};
+class C8
+ : virtual public C5
+ , public C7
+ , virtual public C0
+ , virtual public C2
+ , virtual public C6
+{};
+class C9
+ : virtual public C2
+ , virtual public C4
+ , public C1
+ , virtual public C0
+ , public C7
+ , public C5
+{};
+main() {
+ C0 c0;
+ C1 c1;
+ C2 c2;
+ C3 c3;
+ C4 c4;
+ C5 c5;
+ C6 c6;
+ C7 c7;
+ C8 c8;
+ C9 c9;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-22.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-22.C
new file mode 100644
index 000000000..4edb2b47a
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-22.C
@@ -0,0 +1,80 @@
+// { dg-options -w }
+// { dg-do run }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 27 Jul 2001 <nathan@codesourcery.com>
+
+// Origin stefan@space.twc.de
+// Bug 3145 case 22. Horribly complicated class hierarchy
+
+class C0
+{};
+class C1
+ : public C0
+{};
+class C2
+ : public C1
+ , virtual public C0
+{};
+class C3
+ : virtual public C0
+ , virtual public C2
+ , virtual public C1
+{};
+class C4
+ : virtual public C2
+ , public C1
+ , virtual public C3
+ , public C0
+{};
+class C5
+ : virtual public C0
+ , virtual public C4
+ , public C1
+ , virtual public C2
+ , virtual public C3
+{};
+class C6
+ : public C0
+ , virtual public C1
+ , public C5
+ , public C2
+ , virtual public C3
+ , virtual public C4
+{};
+class C7
+ : virtual public C1
+ , public C5
+ , virtual public C6
+ , virtual public C4
+ , virtual public C3
+ , virtual public C0
+{};
+class C8
+ : virtual public C6
+ , virtual public C1
+ , virtual public C2
+ , public C3
+ , virtual public C4
+{};
+class C9
+ : public C4
+ , virtual public C2
+ , virtual public C8
+ , public C3
+ , public C1
+ , public C6
+ , public C5
+{};
+main() {
+ C0 c0;
+ C1 c1;
+ C2 c2;
+ C3 c3;
+ C4 c4;
+ C5 c5;
+ C6 c6;
+ C7 c7;
+ C8 c8;
+ C9 c9;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-4.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-4.C
new file mode 100644
index 000000000..2e816f6a8
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase8-4.C
@@ -0,0 +1,78 @@
+// { dg-options -w }
+// { dg-do run }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 20 Nov 2001 <nathan@codesourcery.com>
+
+// Origin stefan@space.twc.de
+// Bug 3145 case 4. Horribly complicated class hierarchy
+
+class C0
+{};
+class C1
+ : virtual public C0
+{};
+class C2
+ : public C0
+ , public C1
+{};
+class C3
+ : virtual public C0
+ , public C1
+ , public C2
+{};
+class C4
+ : public C2
+ , public C3
+ , virtual public C1
+ , virtual public C0
+{};
+class C5
+ : virtual public C2
+ , public C1
+ , public C0
+{};
+class C6
+ : virtual public C0
+ , virtual public C5
+ , public C1
+ , public C3
+ , public C4
+{};
+class C7
+ : public C6
+ , virtual public C0
+ , public C1
+ , public C2
+ , virtual public C4
+{};
+class C8
+ : public C2
+ , virtual public C6
+ , virtual public C7
+ , public C5
+ , public C3
+ , virtual public C4
+{};
+class C9
+ : public C5
+ , virtual public C3
+ , virtual public C8
+ , public C0
+ , public C2
+ , public C7
+ , public C6
+ , public C4
+{};
+main() {
+ C0 c0;
+ C1 c1;
+ C2 c2;
+ C3 c3;
+ C4 c4;
+ C5 c5;
+ C6 c6;
+ C7 c7;
+ C8 c8;
+ C9 c9;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase9.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase9.C
new file mode 100644
index 000000000..4a0540d06
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vbase9.C
@@ -0,0 +1,29 @@
+// { dg-do compile }
+
+// Copyright (C) 2002 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 17 Mar 2002 <nathan@codesourcery.com>
+// Origin: Jakub Jelinek <jakub@redhat.com>
+
+// PR 5681. ICE in build_secondary_vtable
+
+struct A {
+ virtual int f1 ();
+};
+
+struct B : virtual A {};
+
+struct C {
+ virtual int f2 ();
+};
+
+struct E : A {};
+
+struct D : E, B {};
+
+struct F : virtual D {};
+
+struct G : virtual F, C {};
+
+struct H : virtual F {};
+
+struct I : G, H {};
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vcall1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vcall1.C
new file mode 100644
index 000000000..00830cd23
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vcall1.C
@@ -0,0 +1,36 @@
+// { dg-do run }
+// { dg-options "-w" }
+
+extern "C" void abort ();
+
+struct B;
+
+B* b;
+
+struct A {
+ virtual void f () {}
+};
+
+struct B : virtual public A {
+ B () {
+ b = this;
+ ((A*) this)->f ();
+ }
+
+ virtual void f () {
+ if (this != b)
+ abort ();
+ }
+};
+
+struct C : public B {
+};
+
+struct D : public C, public B {
+ virtual void f () {}
+};
+
+int main () {
+ D d;
+}
+
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk1.C
new file mode 100644
index 000000000..73a0b13f6
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk1.C
@@ -0,0 +1,45 @@
+// { dg-do link }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 29 Jul 2001 <nathan@codesourcery.com>
+
+// Origin snyder@fnal.gov
+// Bug 3631. We mis-calculated the non-virtual part of a virtual
+// thunk. Leading to a link failure, in this case.
+
+struct A { virtual ~A () {} };
+
+struct B : virtual public A
+{
+ virtual void destroy() {}
+};
+
+class C : virtual public B {};
+class D : virtual public C {};
+class E : public virtual A {};
+
+struct F : virtual public B, virtual public E
+{
+ virtual void destroy() = 0;
+};
+
+struct G : public virtual F
+{
+ virtual void destroy() {}
+};
+
+class H : virtual public C, virtual public F {};
+class I : virtual public D, virtual public H {};
+class J : public virtual G, public virtual H {};
+
+class K : public virtual I, public virtual J
+{
+ public:
+ virtual ~K();
+};
+K::~K() {}
+
+int main ()
+{
+ return 0;
+}
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk2.C
new file mode 100644
index 000000000..9b6f14c50
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk2.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target i?86-*-* x86_64-*-*} }
+// { dg-require-effective-target ilp32 }
+
+struct c0 {
+ virtual void f ();
+};
+
+struct c1 : virtual public c0 {
+};
+
+struct c2 : virtual public c0, public c1 {
+ virtual void f ();
+};
+
+void c2::f () {}
+
+// { dg-final { scan-assembler _ZTv0_n12_N2c21fEv } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk3.C
new file mode 100644
index 000000000..59fbbdc4b
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vthunk3.C
@@ -0,0 +1,27 @@
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target ilp32 }
+// { dg-options "-fabi-version=0" }
+
+struct A {
+ virtual void a ();
+};
+
+struct B : virtual public A {
+ virtual void b ();
+ virtual void a ();
+};
+
+struct C {
+ virtual void c ();
+};
+
+struct D : public C, public B {
+};
+
+struct E : virtual public D {
+ void b ();
+};
+
+void E::b () {}
+
+// { dg-final { scan-assembler _ZTvn4_n20_N1E1bEv } }
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vtt1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vtt1.C
new file mode 100644
index 000000000..8235c460b
--- /dev/null
+++ b/gcc-4.8.1/gcc/testsuite/g++.dg/abi/vtt1.C
@@ -0,0 +1,11 @@
+// { dg-do compile }
+
+struct A {
+};
+
+struct B : virtual public A {
+};
+
+B b;
+
+// { dg-final { scan-assembler _ZTT1B } }