aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg
diff options
context:
space:
mode:
authorYiran Wang <yiran@google.com>2015-06-23 15:33:17 -0700
committerYiran Wang <yiran@google.com>2015-06-29 10:56:28 -0700
commit1d9fec7937f45dde5e04cac966a2d9a12f2fc15a (patch)
tree3fbcd18a379a05fd6d43491a107e1f36bc61b185 /gcc-4.9/gcc/testsuite/g++.dg
parentf378ebf14df0952eae870c9865bab8326aa8f137 (diff)
downloadtoolchain_gcc-1d9fec7937f45dde5e04cac966a2d9a12f2fc15a.tar.gz
toolchain_gcc-1d9fec7937f45dde5e04cac966a2d9a12f2fc15a.tar.bz2
toolchain_gcc-1d9fec7937f45dde5e04cac966a2d9a12f2fc15a.zip
Synchronize with google/gcc-4_9 to r224707 (from r214835)
Change-Id: I3d6f06fc613c8f8b6a82143dc44b7338483aac5d
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/abi/aarch64_guard1.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/abi/no-weak1.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/abi/spec1.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/asan/pr62017.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-44.C43
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-63241.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-63265.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist8.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted9.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist89.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template14.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual16.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic161.C51
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic162.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C40
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C81
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C231
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C99
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp1y/paren1.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp1y/phoobhar.h16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp1y/pr57644.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ext/altivec-2.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ext/stmtexpr16.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/gomp/pr63249.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/const9.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-1.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-10.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-12.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-13.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-14.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-15.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-16.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-17.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-18.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-19.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-2.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-20.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-21.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-22.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-23.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-24.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-26.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-27.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28a.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-29.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-3.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-30.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-39.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-4.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-40.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-5.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-6.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-7.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-1.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-2.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-3.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-4.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-5.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-6.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-7.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-8.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-d-1.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-g-1.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-1.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-2.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-1.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-2.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-3.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-4.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-5.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-7.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-8.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-9.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60640-4.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61654.C40
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr62015.C55
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63306.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63838.C56
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr64068.C49
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/type-inheritance-1.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/lto/pr62026.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/opt/devirt1.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/opt/devirt2.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/opt/devirt3.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/opt/devirt4.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/opt/devirt5.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/opt/flifetime-dse1.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/pr54442.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/pr62079.C78
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/pr64037.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/template/friend56.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/template/non-dependent14.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/template/offsetof3.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/template/ptrmem29.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/template/ref9.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/template/spec38.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/torture/pr62121.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/torture/pr62175.C36
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/torture/pr63632.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/func_reorder_gold_plugin_1.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/buildinfo.txt1
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup.h5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_0.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_1.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_2.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/indir-call-prof_0.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_0.C48
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_1.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_2.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls.h16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2.h15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2_0.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2_1.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls_0.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls_1.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/partition_patch.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-prof/pr63581.C91
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tree-ssa/pr63841.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tsan/atomic_free.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tsan/atomic_free2.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tsan/cond_race.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/tsan/tsan_barrier.h14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ubsan/pr61272.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ubsan/pr63913.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/warn/Wunused-parm-6.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/warn/Wunused-var-22.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/warn/register-parm-1.C9
135 files changed, 1895 insertions, 77 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/abi/aarch64_guard1.C b/gcc-4.9/gcc/testsuite/g++.dg/abi/aarch64_guard1.C
index ca1778b87..e2669a89f 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/abi/aarch64_guard1.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/abi/aarch64_guard1.C
@@ -13,5 +13,4 @@ int *foo ()
}
// { dg-final { scan-assembler _ZGVZ3foovE1x,8,8 } }
-// { dg-final { scan-tree-dump "_ZGVZ3foovE1x & 1" "original" } }
-// { dg-final { cleanup-tree-dump "original" } }
+// { dg-final { scan-tree-dump "& 1" "original" } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/abi/no-weak1.C b/gcc-4.9/gcc/testsuite/g++.dg/abi/no-weak1.C
new file mode 100644
index 000000000..d53901531
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/abi/no-weak1.C
@@ -0,0 +1,13 @@
+// { dg-options "-fno-weak" }
+// { dg-final { scan-assembler "local\[ \t\]*_ZZL1fvE1i" { target x86_64-*-*gnu } } }
+
+static inline void f()
+{
+ static int i;
+ ++i;
+};
+
+int main()
+{
+ f();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/abi/spec1.C b/gcc-4.9/gcc/testsuite/g++.dg/abi/spec1.C
new file mode 100644
index 000000000..153c0cfe7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/abi/spec1.C
@@ -0,0 +1,4 @@
+// { dg-final { scan-assembler-not "weak" } }
+
+template <class T> struct A { static int i; };
+template<> int A<int>::i = 42;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/asan/pr62017.C b/gcc-4.9/gcc/testsuite/g++.dg/asan/pr62017.C
new file mode 100644
index 000000000..74ef37fd2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/asan/pr62017.C
@@ -0,0 +1,17 @@
+// PR c++/62017
+// { dg-do run }
+
+struct A
+{
+ int x;
+ virtual ~A () {}
+};
+struct B : public virtual A {};
+struct C : public virtual A {};
+struct D : public B, virtual public C {};
+
+int
+main ()
+{
+ D d;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c b/gcc-4.9/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c
index 2cf08946e..2884c25f3 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c
+++ b/gcc-4.9/gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c
@@ -1,5 +1,5 @@
/* Structure layout test generator.
- Copyright (C) 2004, 2005, 2007, 2008, 2009, 2011, 2012
+ Copyright (C) 2004-2014
Free Software Foundation, Inc.
Contributed by Jakub Jelinek <jakub@redhat.com>.
@@ -44,7 +44,7 @@ along with GCC; see the file COPYING3. If not see
#endif
const char *dg_options[] = {
-"/* { dg-options \"%s-I%s\" } */\n",
+"/* { dg-options \"%s-I%s -Wno-abi\" } */\n",
"/* { dg-options \"%s-I%s -mno-mmx -Wno-abi\" { target i?86-*-* x86_64-*-* } } */\n",
"/* { dg-options \"%s-I%s -fno-common\" { target hppa*-*-hpux* powerpc*-*-darwin* *-*-mingw32* *-*-cygwin* } } */\n",
"/* { dg-options \"%s-I%s -mno-mmx -fno-common -Wno-abi\" { target i?86-*-darwin* x86_64-*-darwin* i?86-*-mingw32* x86_64-*-mingw32* i?86-*-cygwin* } } */\n",
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-44.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-44.C
new file mode 100644
index 000000000..bd20b54f1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-44.C
@@ -0,0 +1,43 @@
+// PR c++/63849
+// { dg-do compile { target c++11 } }
+
+template <class _T, class...>
+using First = _T; // we should not use this
+ // alias with only
+ // one pack parameter (?)
+
+template <template <class...> class _Successor,
+ int,
+ class... _Xs>
+struct Overlay
+{
+ using O = _Successor<_Xs...>;
+};
+
+template <class... _Pack>
+struct List
+{
+ template <int _s>
+ using O = typename Overlay<List, _s, _Pack...>::O;
+
+ template <template <class...> class _S>
+ using Pass = _S<_Pack...>;
+
+ template <int _i>
+ using At = typename O<_i>
+ ::template Pass<First>;
+};
+
+template <int _i>
+using At = typename List<int, char>
+::template At<_i>;
+
+template <int _i>
+void func_crash(At<_i>&) {}
+
+int main(int argc, char *argv[])
+{
+ char ccc;
+ int iii;
+ func_crash<0>(iii);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-63241.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-63241.C
new file mode 100644
index 000000000..2553cae34
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-63241.C
@@ -0,0 +1,13 @@
+// PR c++/63241
+// { dg-do compile { target c++11 } }
+
+struct A {
+ constexpr A(int){}
+};
+
+int main() {
+ int i = 1;
+ A array[2][2] =
+ {{{0}, {i}},
+ {{0}, {0}}};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-63265.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-63265.C
new file mode 100644
index 000000000..aa0ce5e7c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-63265.C
@@ -0,0 +1,19 @@
+// PR c++/63265
+// { dg-do compile { target c++11 } }
+
+#define LSHIFT (sizeof(unsigned int) * __CHAR_BIT__)
+
+template <int lshift>
+struct SpuriouslyWarns1 {
+ static constexpr unsigned int v = lshift < LSHIFT ? 1U << lshift : 0;
+};
+
+static_assert(SpuriouslyWarns1<LSHIFT>::v == 0, "Impossible occurred");
+
+template <int lshift>
+struct SpuriouslyWarns2 {
+ static constexpr bool okay = lshift < LSHIFT;
+ static constexpr unsigned int v = okay ? 1U << lshift : 0;
+};
+
+static_assert(SpuriouslyWarns2<LSHIFT>::v == 0, "Impossible occurred");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist8.C
new file mode 100644
index 000000000..3d859a852
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist8.C
@@ -0,0 +1,7 @@
+// PR c++/63415
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+struct A {
+ static constexpr int value = int(T{});
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted9.C
new file mode 100644
index 000000000..af97be7c3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted9.C
@@ -0,0 +1,31 @@
+// PR c++/64352
+// { dg-do compile { target c++11 } }
+
+template<bool B> struct bool_type
+{ static constexpr bool value = B; };
+
+using true_type = bool_type<true>;
+using false_type = bool_type<false>;
+
+template<typename T> T&& declval();
+
+template<typename...> struct void_ { using type = void; };
+template<typename... I> using void_t = typename void_<I...>::type;
+
+template<typename _Tp, typename = void>
+struct _Has_addressof_free: false_type { };
+
+template<typename _Tp>
+struct _Has_addressof_free
+<_Tp, void_t<decltype( operator&(declval<const _Tp&>()) )>>
+: true_type { };
+
+struct foo {};
+void operator&(foo) = delete;
+
+int main()
+{
+ static_assert( !_Has_addressof_free<int>::value, "" );
+ // error: use of deleted function 'void operator&(foo)'
+ static_assert( !_Has_addressof_free<foo>::value, "" );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist89.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist89.C
new file mode 100644
index 000000000..e221664e3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist89.C
@@ -0,0 +1,4 @@
+// PR c++/64029
+// { dg-do compile { target c++11 } }
+
+const int (&in)[]{1,2,3,4,5};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template14.C
new file mode 100644
index 000000000..b73ef753e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template14.C
@@ -0,0 +1,11 @@
+// PR c++/62219
+// { dg-do compile { target c++11 } }
+
+template< class = void >
+struct S
+{
+ friend void foo( S )
+ {
+ [](){};
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual16.C
new file mode 100644
index 000000000..1d7650bb6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual16.C
@@ -0,0 +1,12 @@
+// PR c++/64297
+// { dg-do compile { target c++11 } }
+
+struct A {
+ typedef int X;
+ template <int> X m_fn1() const;
+};
+template <typename> struct is_function {};
+is_function<int() const &> i;
+struct D {
+ template <typename Y, typename = is_function<Y>> D(Y);
+} b(&A::m_fn1<0>);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic161.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic161.C
new file mode 100644
index 000000000..ac6eaf6a3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic161.C
@@ -0,0 +1,51 @@
+// PR c++/63139
+// { dg-do compile { target c++11 } }
+
+template<typename ...T>
+struct type_list {};
+
+template<typename ...T>
+struct make_type_list
+{
+ using type = type_list<T...>;
+};
+
+// The bug disappears if you use make_type_list directly.
+template<typename ...T>
+using make_type_list_t = typename make_type_list<T...>::type;
+
+
+struct ContainerEndA {};
+
+template<typename ...Ts>
+struct ContainerA
+{
+ using type = make_type_list_t<Ts..., ContainerEndA>;
+};
+
+
+struct ContainerEndB {};
+
+template<typename ...Ts>
+struct ContainerB
+{
+ using type = make_type_list_t<Ts..., ContainerEndB>;
+};
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+#define SA(X) static_assert((X), #X)
+
+SA((is_same<ContainerB<>::type, type_list<ContainerEndB>>::value));
+SA((!is_same<ContainerA<>::type, type_list<ContainerEndB>>::value));
+SA((!is_same<ContainerA<>::type, ContainerB<>::type>::value));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic162.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic162.C
new file mode 100644
index 000000000..9e5386deb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic162.C
@@ -0,0 +1,14 @@
+// PR c++/63405
+// { dg-do compile { target c++11 } }
+
+template <typename _Tp> _Tp forward(_Tp);
+template <typename Args> struct Format { Format(int, Args); };
+template <typename... Args> auto format(Args &&... args) -> Format<Args...> {
+ return {0, args...};
+}
+
+template <typename... Args> void msg(Args... args) {
+ format(forward(args)...);
+}
+
+void some_function() { msg('x'); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C
new file mode 100644
index 000000000..8719577c5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C
@@ -0,0 +1,40 @@
+// { dg-do compile { target c++11_only } }
+// { dg-options "-pedantic-errors" }
+
+// These *are* defined in C++14 onwards.
+
+#ifndef __cpp_binary_literals
+# error "__cpp_binary_literals" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_init_captures
+# error "__cpp_init_captures" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_generic_lambdas
+# error "__cpp_generic_lambdas" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_decltype_auto
+# error "__cpp_decltype_auto" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_return_type_deduction
+# error "__cpp_return_type_deduction" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_variable_templates
+# error "__cpp_variable_templates" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_digit_separators
+# error "__cpp_digit_separators" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_attribute_deprecated
+# error "__cpp_attribute_deprecated" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_runtime_arrays
+# error "__cpp_runtime_arrays" // { dg-error "error" }
+#endif
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C
new file mode 100644
index 000000000..606a5cec6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C
@@ -0,0 +1,81 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++11" }
+
+#ifndef __cpp_unicode_characters
+# error "__cpp_unicode_characters"
+#elif __cpp_unicode_characters != 200704
+# error "__cpp_unicode_characters != 200704"
+#endif
+
+#ifndef __cpp_raw_strings
+# error "__cpp_raw_strings"
+#elif __cpp_raw_strings != 200710
+# error "__cpp_raw_strings != 200710"
+#endif
+
+#ifndef __cpp_unicode_literals
+# error "__cpp_unicode_literals"
+#elif __cpp_unicode_literals != 200710
+# error "__cpp_unicode_literals != 200710"
+#endif
+
+#ifndef __cpp_user_defined_literals
+# error "__cpp_user_defined_literals"
+#elif __cpp_user_defined_literals != 200809
+# error "__cpp_user_defined_literals != 200809"
+#endif
+
+#ifndef __cpp_lambdas
+# error "__cpp_lambdas"
+#elif __cpp_lambdas != 200907
+# error "__cpp_lambdas != 200907"
+#endif
+
+#ifndef __cpp_constexpr
+# error "__cpp_constexpr"
+#elif __cpp_constexpr != 200704
+# error "__cpp_constexpr != 200704"
+#endif
+
+#ifndef __cpp_static_assert
+# error "__cpp_static_assert"
+#elif __cpp_static_assert != 200410
+# error "__cpp_static_assert != 200410"
+#endif
+
+#ifndef __cpp_decltype
+# error "__cpp_decltype"
+#elif __cpp_decltype != 200707
+# error "__cpp_decltype != 200707"
+#endif
+
+#ifndef __cpp_attributes
+# error "__cpp_attributes"
+#elif __cpp_attributes != 200809
+# error "__cpp_attributes != 200809"
+#endif
+
+#ifndef __cpp_rvalue_reference
+# error "__cpp_rvalue_reference"
+#elif __cpp_rvalue_reference != 200610
+# error "__cpp_rvalue_reference != 200610"
+#endif
+
+#ifndef __cpp_variadic_templates
+# error "__cpp_variadic_templates"
+#elif __cpp_variadic_templates != 200704
+# error "__cpp_variadic_templates != 200704"
+#endif
+
+#ifndef __cpp_alias_templates
+# error "__cpp_alias_templates"
+#elif __cpp_alias_templates != 200704
+# error "__cpp_alias_templates != 200704"
+#endif
+
+// These C++14 features are allowed in C++11 in non-ANSI modes.
+#ifndef __cpp_binary_literals
+# error "__cpp_binary_literals"
+#elif __cpp_binary_literals != 201304
+# error "__cpp_binary_literals != 201304"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C
new file mode 100644
index 000000000..8a05f6660
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C
@@ -0,0 +1,231 @@
+// { dg-do compile { target c++1y } }
+// { dg-options "-I${srcdir}/g++.dg/cpp1y -I${srcdir}/g++.dg/cpp1y/testinc" }
+
+// Begin C++11 tests.
+
+#ifndef __cpp_unicode_characters
+# error "__cpp_unicode_characters"
+#elif __cpp_unicode_characters != 200704
+# error "__cpp_unicode_characters != 200704"
+#endif
+
+#ifndef __cpp_raw_strings
+# error "__cpp_raw_strings"
+#elif __cpp_raw_strings != 200710
+# error "__cpp_raw_strings != 200710"
+#endif
+
+#ifndef __cpp_unicode_literals
+# error "__cpp_unicode_literals"
+#elif __cpp_unicode_literals != 200710
+# error "__cpp_unicode_literals != 200710"
+#endif
+
+#ifndef __cpp_user_defined_literals
+# error "__cpp_user_defined_literals"
+#elif __cpp_user_defined_literals != 200809
+# error "__cpp_user_defined_literals != 200809"
+#endif
+
+#ifndef __cpp_lambdas
+# error "__cpp_lambdas"
+#elif __cpp_lambdas != 200907
+# error "__cpp_lambdas != 200907"
+#endif
+
+#ifndef __cpp_constexpr
+# error "__cpp_constexpr"
+#elif __cpp_constexpr != 200704
+# error "__cpp_constexpr != 200704"
+#endif
+
+#ifndef __cpp_static_assert
+# error "__cpp_static_assert"
+#elif __cpp_static_assert != 200410
+# error "__cpp_static_assert != 200410"
+#endif
+
+#ifndef __cpp_decltype
+# error "__cpp_decltype"
+#elif __cpp_decltype != 200707
+# error "__cpp_decltype != 200707"
+#endif
+
+#ifndef __cpp_attributes
+# error "__cpp_attributes"
+#elif __cpp_attributes != 200809
+# error "__cpp_attributes != 200809"
+#endif
+
+#ifndef __cpp_rvalue_reference
+# error "__cpp_rvalue_reference"
+#elif __cpp_rvalue_reference != 200610
+# error "__cpp_rvalue_reference != 200610"
+#endif
+
+#ifndef __cpp_variadic_templates
+# error "__cpp_variadic_templates"
+#elif __cpp_variadic_templates != 200704
+# error "__cpp_variadic_templates != 200704"
+#endif
+
+#ifndef __cpp_alias_templates
+# error "__cpp_alias_templates"
+#elif __cpp_alias_templates != 200704
+# error "__cpp_alias_templates != 200704"
+#endif
+
+// Begin C++14 tests.
+
+#ifndef __cpp_binary_literals
+# error "__cpp_binary_literals"
+#elif __cpp_binary_literals != 201304
+# error "__cpp_binary_literals != 201304"
+#endif
+
+#ifndef __cpp_init_captures
+# error "__cpp_init_captures"
+#elif __cpp_init_captures != 201304
+# error "__cpp_init_captures != 201304"
+#endif
+
+#ifndef __cpp_generic_lambdas
+# error "__cpp_generic_lambdas"
+#elif __cpp_generic_lambdas != 201304
+# error "__cpp_generic_lambdas != 201304"
+#endif
+
+// TODO: Change 200704 to 201304 when C++14 constexpr goes in.
+#ifndef __cpp_constexpr
+# error "__cpp_constexpr"
+#elif __cpp_constexpr != 200704
+# error "__cpp_constexpr != 200704"
+#endif
+
+#ifndef __cpp_decltype_auto
+# error "__cpp_decltype_auto"
+#elif __cpp_decltype_auto != 201304
+# error "__cpp_decltype_auto != 201304"
+#endif
+
+#ifndef __cpp_return_type_deduction
+# error "__cpp_return_type_deduction"
+#elif __cpp_return_type_deduction != 201304
+# error "__cpp_return_type_deduction != 201304"
+#endif
+
+#ifndef __cpp_runtime_arrays
+# error "__cpp_runtime_arrays"
+#elif __cpp_runtime_arrays != 201304
+# error "__cpp_runtime_arrays != 201304"
+#endif
+
+// Aggregate initializers not in yet.
+#ifdef __cpp_aggregate_nsdmi
+# error "__cpp_aggregate_nsdmi"
+#endif
+
+// Variable templates not in yet.
+#ifdef __cpp_variable_templates
+# error "__cpp_variable_templates"
+#endif
+
+#ifndef __cpp_digit_separators
+# error "__cpp_digit_separators"
+#elif __cpp_digit_separators != 201309
+# error "__cpp_digit_separators != 201309"
+#endif
+
+#ifndef __cpp_attribute_deprecated
+# error "__cpp_attribute_deprecated"
+#elif __cpp_attribute_deprecated != 201309
+# error "__cpp_attribute_deprecated != 201309"
+#endif
+
+// Sized deallocation not in yet.
+#ifdef __cpp_sized_deallocation
+# error "__cpp_sized_deallocation"
+#endif
+
+// Begin include checks.
+
+// Check for __has_include macro.
+#ifndef __has_include
+# error "__has_include"
+#endif
+
+// Quoted complex.h should find at least the bracket version (use operator).
+#if __has_include__ "complex.h"
+#else
+# error "complex.h"
+#endif
+
+// Try known bracket header (use operator).
+#if __has_include__(<complex>)
+#else
+# error "<complex>"
+#endif
+
+// Define and use a macro to invoke the operator.
+#define sluggo(TXT) __has_include__(TXT)
+
+#if sluggo(<complex>)
+#else
+# error "<complex>"
+#endif
+
+#if ! sluggo(<complex>)
+# error "<complex>"
+#else
+#endif
+
+// Quoted complex.h should find at least the bracket version.
+#if __has_include("complex.h")
+#else
+# error "complex.h"
+#endif
+
+// Try known local quote header.
+#if __has_include("complex_literals.h")
+#else
+# error "\"complex_literals.h\""
+#endif
+
+// Try nonexistent bracket header.
+#if __has_include(<stuff>)
+# error "<stuff>"
+#else
+#endif
+
+// Try nonexistent quote header.
+#if __has_include("phlegm")
+# error "\"phlegm\""
+#else
+#endif
+
+// Test __has_include_next.
+#if __has_include("phoobhar.h")
+# include "phoobhar.h"
+#else
+# error "__has_include(\"phoobhar.h\")"
+#endif
+
+// Try a macro.
+#define COMPLEX_INC "complex.h"
+#if __has_include(COMPLEX_INC)
+#else
+# error COMPLEX_INC
+#endif
+
+// Realistic use of __has_include.
+#if __has_include(<array>)
+# define STD_ARRAY 1
+# include <array>
+ template<typename _Tp, size_t _Num>
+ using array = std::array<_Tp, _Num>;
+#elif __has_include(<tr1/array>)
+# define TR1_ARRAY 1
+# include <tr1/array>
+ template<typename _Tp, size_t _Num>
+ typedef std::tr1::array<_Tp, _Num> array;
+#endif
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C
new file mode 100644
index 000000000..b99b57efe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C
@@ -0,0 +1,99 @@
+// { dg-do compile { target c++98_only } }
+// { dg-options "-ansi" }
+
+#ifndef __cpp_runtime_arrays
+# error "__cpp_runtime_arrays" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_unicode_characters
+# error "__cpp_unicode_characters" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_raw_strings
+# error "__cpp_raw_strings" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_unicode_literals
+# error "__cpp_unicode_literals" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_user_defined_literals
+# error "__cpp_user_defined_literals" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_lambdas
+# error "__cpp_lambdas" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_constexpr
+# error "__cpp_constexpr" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_static_assert
+# error "__cpp_static_assert" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_decltype
+# error "__cpp_decltype" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_attributes
+# error "__cpp_attributes" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_rvalue_reference
+# error "__cpp_rvalue_reference" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_variadic_templates
+# error "__cpp_variadic_templates" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_alias_templates
+# error "__cpp_alias_templates" // { dg-error "error" }
+#endif
+
+// C++14
+
+// C++98 gets binary literals.
+//#ifndef __cpp_binary_literals
+//# error "__cpp_binary_literals"
+//#endif
+
+#ifndef __cpp_init_captures
+# error "__cpp_init_captures" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_generic_lambdas
+# error "__cpp_generic_lambdas" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_decltype_auto
+# error "__cpp_decltype_auto" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_return_type_deduction
+# error "__cpp_return_type_deduction" // { dg-error "error" }
+#endif
+
+// Aggregate initializers not in yet.
+//#ifdef __cpp_aggregate_nsdmi
+//# error "__cpp_aggregate_nsdmi"
+//#endif
+
+#ifndef __cpp_variable_templates
+# error "__cpp_variable_templates" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_digit_separators
+# error "__cpp_digit_separators" // { dg-error "error" }
+#endif
+
+#ifndef __cpp_attribute_deprecated
+# error "__cpp_attribute_deprecated" // { dg-error "error" }
+#endif
+
+// Sized deallocation not in yet.
+//#ifdef __cpp_sized_deallocation
+//# error "__cpp_sized_deallocation"
+//#endif
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C
new file mode 100644
index 000000000..a0a2b75e3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++98_only } }
+// { dg-options "" }
+
+// These C++14 features are allowed in C++98 in non-ANSI modes.
+#ifndef __cpp_binary_literals
+# error "__cpp_binary_literals"
+#elif __cpp_binary_literals != 201304
+# error "__cpp_binary_literals != 201304"
+#endif
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/paren1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/paren1.C
new file mode 100644
index 000000000..809f25100
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/paren1.C
@@ -0,0 +1,31 @@
+// PR c++/63437
+// { dg-do compile { target c++11 } }
+
+struct X // movable but not copyable
+{
+ X() = default;
+ X(X &&) = default;
+
+ X(const X &) = delete;
+};
+
+X non_parenthesized()
+{
+ X x;
+ return x; // works
+}
+
+X parenthesized()
+{
+ X x;
+ return (x); // error: use of deleted function 'X::X(const X&)'
+}
+
+template <class T>
+T parenthesized_t()
+{
+ T t;
+ return (t);
+}
+
+template X parenthesized_t<X>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/phoobhar.h b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/phoobhar.h
new file mode 100644
index 000000000..7feec3649
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/phoobhar.h
@@ -0,0 +1,16 @@
+
+int
+phoo();
+
+int
+bhar();
+
+#ifndef __has_include_next
+# error "__has_include_next"
+#else
+# if __has_include_next("phoobhar.h")
+# include_next "phoobhar.h"
+# else
+# error "__has_include_next(\"phoobhar.h\")"
+# endif
+#endif
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/pr57644.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/pr57644.C
new file mode 100644
index 000000000..080572168
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp1y/pr57644.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++1y } }
+
+struct Foo
+{
+ unsigned i: 32;
+};
+
+int
+main()
+{
+ Foo f{};
+ return f.i;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ext/altivec-2.C b/gcc-4.9/gcc/testsuite/g++.dg/ext/altivec-2.C
index eb8a92942..e14e6f800 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ext/altivec-2.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ext/altivec-2.C
@@ -1,6 +1,6 @@
/* { dg-do compile { target powerpc*-*-* } } */
/* { dg-require-effective-target powerpc_altivec_ok } */
-/* { dg-options "-maltivec -Wall -Wno-unused-but-set-variable" } */
+/* { dg-options "-maltivec -Wall -Wno-unused-but-set-variable -Wno-deprecated" } */
/* This test checks if AltiVec builtins accept const-qualified
arguments. */
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ext/stmtexpr16.C b/gcc-4.9/gcc/testsuite/g++.dg/ext/stmtexpr16.C
new file mode 100644
index 000000000..ddce40c05
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ext/stmtexpr16.C
@@ -0,0 +1,10 @@
+// PR c++/63455
+// { dg-options "-std=gnu++11" }
+
+int main()
+{
+ int x = 0;
+
+ // without '+0', gcc 4.6 gives a different error (no ICE though)
+ decltype(({ int y = x; y; })+0) v1 = 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/gomp/pr63249.C b/gcc-4.9/gcc/testsuite/g++.dg/gomp/pr63249.C
new file mode 100644
index 000000000..80f763a4c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/gomp/pr63249.C
@@ -0,0 +1,35 @@
+// PR c++/63249
+// { dg-do compile }
+// { dg-options "-Wall -W -fopenmp" }
+
+template <int N>
+int
+foo (int *v, int A, int B) // { dg-bogus "set but not used" }
+{
+ int r = 0;
+ int a = 2; // { dg-bogus "set but not used" }
+ int b = 4; // { dg-bogus "set but not used" }
+#pragma omp target map(to: v[a:b])
+ r |= v[3];
+#pragma omp target map(to: v[A:B])
+ r |= v[3];
+ return r;
+}
+
+template <typename T>
+int
+bar (T *v, T A, T B) // { dg-bogus "set but not used" }
+{
+ T r = 0, a = 2, b = 4; // { dg-bogus "set but not used" }
+#pragma omp target map(to: v[a:b])
+ r |= v[3];
+#pragma omp target map(to: v[A:B])
+ r |= v[3];
+ return r;
+}
+
+int
+baz (int *v, int A, int B)
+{
+ return foo<0> (v, A, B) + bar (v, A, B);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/const9.C b/gcc-4.9/gcc/testsuite/g++.dg/init/const9.C
index ba1dfd4bc..d733e9533 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/init/const9.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/const9.C
@@ -1,5 +1,5 @@
// PR c++/55893
-// { dg-final { scan-assembler-not "rodata" } }
+// { dg-final { scan-assembler-not "rodata" { target { ! hppa*-*-* } } } }
struct foo
{
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-1.C
index de0f665c4..710a99c6f 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-1.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-1.C
@@ -1,6 +1,6 @@
/* Verify that simple virtual calls are converted to direct calls by ipa-cp. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-10.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-10.C
index 658442e34..b58e1e036 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-10.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-10.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O3 -fdump-ipa-inline -fdump-ipa-cp -fno-early-inlining" } */
+/* { dg-options "-O3 -fdump-ipa-inline -fdump-ipa-cp -fno-early-inlining -fdevirtualize" } */
class wxPaintEvent { };
struct wxDCBase
{
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C
index e31832b87..dae47f700 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-inline --param=early-inlining-insns-comdat=0 -fno-devirtualize-speculatively" } */
+/* { dg-options "-O2 -fdump-ipa-inline --param=early-inlining-insns-comdat=0 -fno-devirtualize-speculatively -fdevirtualize" } */
int baz ();
struct A
{
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-12.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-12.C
index 16bae4d8d..4d713714c 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-12.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-12.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++11 } }
-// { dg-options "-O -fdump-ipa-inline" }
+// { dg-options "-O -fdump-ipa-inline -fdevirtualize" }
class Foo
{
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-13.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-13.C
index b338a4c34..4b2ff069b 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-13.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-13.C
@@ -1,6 +1,6 @@
/* { dg-do run } */
/* Call to foo should be devirtualized because there are no derived types of A. */
-/* { dg-options "-O2 -fdump-tree-ssa" } */
+/* { dg-options "-O2 -fdump-tree-ssa -fdevirtualize" } */
namespace {
class A {
public:
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-14.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-14.C
index 456d44f84..517173065 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-14.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-14.C
@@ -2,7 +2,7 @@
because the constructor of A is unreachable and therefore the virtual
method table referring to A::foo is optimized out. */
/* { dg-do run } */
-/* { dg-options "-O2 -fdump-tree-ssa" } */
+/* { dg-options "-O2 -fdump-tree-ssa -fdevirtualize" } */
class B {
public:
virtual int foo(void)
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-15.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-15.C
index 2ea85f487..2c041b5a2 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-15.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-15.C
@@ -1,7 +1,7 @@
/* Check that we speculatively devirutalize call to FOO to B::foo becuase
A is noreturn. */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-devirt -fdump-tree-optimized" } */
+/* { dg-options "-O2 -fdump-ipa-devirt -fdump-tree-optimized -fdevirtualize" } */
class A {
public:
virtual int foo(void)
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-16.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-16.C
index 85567867f..d0ac06134 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-16.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-16.C
@@ -1,7 +1,7 @@
/* We shall devirtualize to unreachable. No anonymous type method should surivve
reachability. */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-whole-program" } */
+/* { dg-options "-O2 -fdump-ipa-whole-program -fdevirtualize" } */
namespace {
class B {
public:
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-17.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-17.C
index 9edfd73af..56e4294ab 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-17.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-17.C
@@ -1,7 +1,7 @@
/* We shall devirtualize to B::foo since it is the only live candidate of an
anonymous type. */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-whole-program" } */
+/* { dg-options "-O2 -fdump-ipa-whole-program -fdevirtualize" } */
namespace {
class B {
public:
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-18.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-18.C
index dbbe597c9..6729d7c42 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-18.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-18.C
@@ -1,7 +1,7 @@
/* We shall devirtualize to unreachable. No anonymous type method should surivve
reachability. */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-ssa" } */
+/* { dg-options "-O2 -fdump-tree-ssa -fdevirtualize" } */
namespace {
class B {
public:
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-19.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-19.C
index 13686e3e0..8fb82a288 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-19.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-19.C
@@ -2,7 +2,7 @@
Previously we were failing by considering CLOBBER statement to be
a type change. */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-cp" } */
+/* { dg-options "-O2 -fdump-ipa-cp -fdevirtualize" } */
struct A {
void operator==(const A &);
};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-2.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-2.C
index d3181e4c0..95eba9c60 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-2.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-2.C
@@ -1,7 +1,7 @@
/* Verify that simple virtual calls using this pointer are converted
to direct calls by ipa-cp. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-20.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-20.C
index 0ea245baf..85e064b99 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-20.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-20.C
@@ -1,6 +1,6 @@
#include <stdlib.h>
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-release_ssa" } */
+/* { dg-options "-O2 -fdump-tree-release_ssa -fdevirtualize" } */
namespace {
struct A
{ int a; virtual int foo() {return a;} void bar() {a=7;} };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-21.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-21.C
index 675bd08d7..7791cb94f 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-21.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-21.C
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp -fdevirtualize" } */
/* Main purpose is to verify that we do not produce wrong devirtualization to
C::m_fn1. We currently devirtualize to B::m_fn1, so check that. */
#include <stdlib.h>
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-22.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-22.C
index 37e766945..194d60004 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-22.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-22.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp -fdevirtualize" } */
class A {};
class B {
public:
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-23.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-23.C
index 98d86aee8..52e3c9cef 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-23.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-23.C
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-options "-O3 -fno-partial-inlining -fdump-ipa-cp -fno-devirtualize-speculatively" } */
+/* { dg-options "-O3 -fno-partial-inlining -fdump-ipa-cp -fno-devirtualize-speculatively -fdevirtualize" } */
/* Main purpose is to verify that we do not produce wrong devirtualization to
C::m_fn1. We currently devirtualize to B::m_fn1, so check that. */
#include <stdlib.h>
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-24.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-24.C
index 01bfdc2ec..4bba9b0c9 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-24.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-24.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O3 -fno-ipa-sra -fdump-ipa-inline -fdump-ipa-cp" } */
+/* { dg-options "-O3 -fno-ipa-sra -fdump-ipa-inline -fdump-ipa-cp --param=early-inlining-insns-comdat=0 -fdevirtualize" } */
void pad(void);
class A {};
class B {
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C
index 1da44f5d1..fed7a96ef 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O3 -fdump-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-cp -fdevirtualize" } */
class ert_RefCounter {
protected:
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-26.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-26.C
index 2df429c34..f8b33e288 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-26.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-26.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O3 -fdump-ipa-devirt" } */
+/* { dg-options "-O3 -fdump-ipa-devirt -fdevirtualize" } */
struct A
{
int a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-27.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-27.C
index 749f40af1..eb064990b 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-27.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-27.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O3 -fdump-tree-optimized" } */
+/* { dg-options "-O3 -fdump-tree-optimized -fdevirtualize" } */
struct A
{
int a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28.C
index e18b81897..9bfef924d 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28.C
@@ -1,5 +1,5 @@
// PR c++/58678
-// { dg-options "-O3 -fdump-ipa-devirt" }
+// { dg-options "-O3 -fdump-ipa-devirt -fdevirtualize" }
struct A {
virtual ~A();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28a.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28a.C
new file mode 100644
index 000000000..65d5fcdf3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28a.C
@@ -0,0 +1,15 @@
+// PR c++/58678
+// { dg-options "-O3 -flto -shared -fPIC -Wl,--no-undefined" }
+// { dg-do link { target { { gld && fpic } && shared } } }
+
+struct A {
+ virtual ~A();
+};
+struct B : A {
+ virtual int m_fn1();
+};
+void fn1(B* b) {
+ delete b;
+}
+
+int main() {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-29.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-29.C
index b4f24a104..ebfd01b60 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-29.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-29.C
@@ -1,7 +1,7 @@
/* { dg-do run { target c++11 } } */
/* There is a devirtualizable call. In PR60306 we deduced wrong target to cxa_pure_virtual.
For gcc 4.10 we temporarily disable the devirtualization. */
-/* { dg-options "-O3" } */
+/* { dg-options "-O3 -fdevirtualize" } */
#include <vector>
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-3.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-3.C
index a68eb024f..45ad33756 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-3.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-3.C
@@ -1,7 +1,7 @@
/* Verify that simple virtual calls on an object refrence are
converted to simple calls by ipa-cp. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-30.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-30.C
index c4ac6940a..b147476f7 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-30.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-30.C
@@ -1,5 +1,5 @@
// PR c++/58678
-// { dg-options "-O3 -fdump-ipa-devirt" }
+// { dg-options "-O3 -fdump-ipa-devirt -fdevirtualize" }
// We shouldn't speculatively devirtualize to ~B because B is an abstract
// class; any actual object passed to f will be of some derived class which
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C
index 64c44ba1e..16c782025 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -std=c++11 -fdump-ipa-inline" } */
+/* { dg-options "-O2 -std=c++11 -fdump-ipa-inline -fdevirtualize" } */
#include <new>
class EmbeddedObject {
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-39.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-39.C
index fbeea126e..38e280899 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-39.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-39.C
@@ -1,5 +1,5 @@
// PR c++/61214
-/* { dg-options "-O2 -fdump-tree-optimized" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdevirtualize" } */
struct Base
{
@@ -24,5 +24,4 @@ int main()
return 0;
}
-/* { dg-final { scan-tree-dump-not "OBJ_TYPE_REF" "optimized" } } */
-/* { dg-final { cleanup-tree-dump "optimized" } } */
+/* { dg-final { scan-assembler-not "_ZN3Foo5cloneEv" } } */
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-4.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-4.C
index 72c883b3f..64f8eb05d 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-4.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-4.C
@@ -1,7 +1,7 @@
/* Verify that ipa-co can convert virtual calls to direct ones even
when a typecast to an ancestor is involved along the way. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-40.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-40.C
new file mode 100644
index 000000000..9c3bdf5e9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-40.C
@@ -0,0 +1,21 @@
+// PR c++/62224
+// { dg-options "-O2" }
+// For 4.9, we don't want to devirtualize f and thus create a reference to g.
+
+struct A
+{
+ virtual void f () = 0;
+};
+
+class B : A
+{
+ virtual void f () { g(); }
+ void g();
+};
+
+void h (A *a)
+{
+ a->f ();
+}
+
+// { dg-final { scan-assembler-not "_ZN1B1gEv" } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-5.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-5.C
index 575bc0271..980b59617 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-5.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-5.C
@@ -2,7 +2,7 @@
ones even when a typecast to an ancestor is involved along the way
and that ancestor is not the first one with virtual functions. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-6.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-6.C
index e9a5d7093..4599878d1 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-6.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-6.C
@@ -2,7 +2,7 @@
spot that foo changes the dynamic type of the passed object. */
/* { dg-do run } */
-/* { dg-options "-O3" } */
+/* { dg-options "-O3 -fdevirtualize" } */
extern "C" void abort (void);
extern "C" void *malloc(__SIZE_TYPE__);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-7.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-7.C
index 1c5912230..d2059baf6 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-7.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-7.C
@@ -1,7 +1,7 @@
/* Verify that IPA-CP can do devirtualization even if the virtual call
comes from a method that has been early-inlined into a descendant. */
/* { dg-do run } */
-/* { dg-options "-O3 -fdump-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-cp -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C
index dc6c6c940..ce4febd9f 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-whole-program --param=early-inlining-insns-comdat=0" } */
+/* { dg-options "-O2 -fdump-ipa-whole-program --param=early-inlining-insns-comdat=0 -fdevirtualize" } */
double foo ();
struct B
{
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-1.C
index dcd804659..5e1348baa 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-1.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-1.C
@@ -1,7 +1,7 @@
/* Verify that ipa-cp correctly detects the dynamic type of an object
under construction when doing devirtualization. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-2.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-2.C
index b9a36e29f..451b2293e 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-2.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-2.C
@@ -1,7 +1,7 @@
/* Verify that ipa-cp correctly detects the dynamic type of an object
under construction when doing devirtualization. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-3.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-3.C
index c8791f79e..321eea478 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-3.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-3.C
@@ -1,7 +1,7 @@
/* Verify that ipa-cp correctly detects the dynamic type of an object
under construction when doing devirtualization. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-inline" } */
+/* { dg-options "-O3 -fno-inline -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-4.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-4.C
index 56d41e496..24dfe3dab 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-4.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-4.C
@@ -1,7 +1,7 @@
/* Verify that ipa-cp correctly detects the dynamic type of an object
under construction when doing devirtualization. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-inline" } */
+/* { dg-options "-O3 -fno-inline -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-5.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-5.C
index 637d7d4be..f3d6b0014 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-5.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-5.C
@@ -1,7 +1,7 @@
/* Verify that ipa-cp correctly detects the dynamic type of an object
under construction when doing devirtualization. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-6.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-6.C
index f9b8b6954..8e5a2bf47 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-6.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-6.C
@@ -1,7 +1,7 @@
/* Verify that ipa-cp correctly detects the dynamic type of an object
under construction when doing devirtualization. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-inline" } */
+/* { dg-options "-O3 -fno-inline -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-7.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-7.C
index 2e76cbe40..08f2d3043 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-7.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-7.C
@@ -2,7 +2,7 @@
object within another one when looking for dynamic type change . */
/* { dg-do run } */
/* { dg-require-effective-target nonpic } */
-/* { dg-options "-O3 -Wno-attributes" } */
+/* { dg-options "-O3 -Wno-attributes -fdevirtualize" } */
extern "C" void abort (void);
namespace std {
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-8.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-8.C
index 309644d92..2e417ec2c 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-8.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-8.C
@@ -1,7 +1,7 @@
/* Verify that ipa-cp correctly detects the dynamic type of an object
under construction when doing devirtualization. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-d-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-d-1.C
index 3897a7782..d84dd9fe0 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-d-1.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-d-1.C
@@ -1,7 +1,7 @@
/* Verify that ipa-cp correctly detects the dynamic type of an object
under destruction when doing devirtualization. */
/* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline" } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-g-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-g-1.C
index 175f24efb..41f23453c 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-g-1.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-g-1.C
@@ -1,5 +1,5 @@
// { dg-do compile }
-// { dg-options "-O2 -fdump-ipa-cp -fdump-tree-optimized" }
+// { dg-options "-O2 -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" }
struct S { S(); virtual void xyzzy(); void otherstuff(); };
struct R { int a; S s; R(); };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-1.C
index 32f7258a4..f530adad2 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-1.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-1.C
@@ -1,7 +1,7 @@
/* Verify that virtual calls are folded even early inlining puts them into one
function with the definition. */
/* { dg-do run } */
-/* { dg-options "-O2 -fdump-tree-fre1-details" } */
+/* { dg-options "-O2 -fdump-tree-fre1-details -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-2.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-2.C
index 5bddc2fcb..bce0e96ed 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-2.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-2.C
@@ -1,7 +1,7 @@
/* Verify that virtual calls are folded even early inlining puts them into one
function with the definition. */
/* { dg-do run } */
-/* { dg-options "-O2 -fdump-tree-fre1-details" } */
+/* { dg-options "-O2 -fdump-tree-fre1-details -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-1.C
index bc4dfea5c..39dbf59f0 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-1.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-1.C
@@ -1,7 +1,7 @@
/* Verify that simple virtual calls are inlined even without early
inlining. */
/* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-2.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-2.C
index 001cff204..0607ffbbe 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-2.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-2.C
@@ -1,7 +1,7 @@
/* Verify that simple virtual calls using this pointer are inlined
even without early inlining.. */
/* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-3.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-3.C
index 637a6aecc..5b6322ed1 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-3.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-3.C
@@ -1,7 +1,7 @@
/* Verify that simple virtual calls on an object refrence are inlined
even without early inlining. */
/* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-4.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-4.C
index f5b8f8e5d..5358ebfde 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-4.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-4.C
@@ -2,7 +2,7 @@
inlining, even when a typecast to an ancestor is involved along the
way. */
/* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-5.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-5.C
index d78173d69..33c1d7bf5 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-5.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-5.C
@@ -1,7 +1,7 @@
/* Verify that virtual call inlining does not pick a wrong method when
there is a user defined ancestor in an object. */
/* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-7.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-7.C
index 9d725a508..e6ba8505d 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-7.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-7.C
@@ -2,7 +2,7 @@
inlining, even when a typecast to an ancestor is involved along the
way and that ancestor is not the first one with virtual functions. */
/* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-8.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-8.C
index eebfc6af1..606049aad 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-8.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-8.C
@@ -1,7 +1,7 @@
/* Verify that virtual calls are inlined (ithout early inlining) even
when their caller is itself indirectly inlined. */
/* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-9.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-9.C
index 586c3af30..dec234e06 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-9.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-9.C
@@ -3,7 +3,7 @@
way and that ancestor itself has an ancestor wich is not the
primary base class. */
/* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C
index b9039cb85..4d0db6be4 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O3 -fdump-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-cp -fdevirtualize" } */
struct data {
data(int);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60640-4.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60640-4.C
index eb9eb627f..d290450cd 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60640-4.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60640-4.C
@@ -1,5 +1,5 @@
// { dg-do run }
-// { dg-options "-O3 -fdump-ipa-cp" }
+// { dg-options "-O3 -fdump-ipa-cp -fdevirtualize" }
struct Distraction
{
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61654.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61654.C
new file mode 100644
index 000000000..d07e4586b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61654.C
@@ -0,0 +1,40 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+/* The bug only presented itself on a 32 bit i386 but in theory it might also
+ pop up elsewhere and we do not want to put -m32 options to testcase
+ options. */
+
+struct A
+{
+ virtual int a (int, int = 0) = 0;
+ void b ();
+ void c ();
+ int d;
+};
+
+struct B : virtual A
+{
+ int a (int, int);
+ int e;
+};
+
+int f;
+
+void
+A::b ()
+{
+ a (0);
+}
+
+void
+A::c ()
+{
+ a (f);
+}
+
+int
+B::a (int, int)
+{
+ return e;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr62015.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr62015.C
new file mode 100644
index 000000000..950b46e75
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr62015.C
@@ -0,0 +1,55 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -std=c++11" } */
+
+
+extern "C" int printf(const char *fmt, ...);
+extern "C" void abort(void);
+
+struct Side {
+ enum _Value { Left, Right, Invalid };
+
+ constexpr Side() : _value(Invalid) {}
+ constexpr Side(_Value value) : _value(value) {}
+ operator _Value() const { return (_Value)_value; }
+
+ private:
+ char _value;
+};
+
+struct A {
+ void init();
+ void adjust(Side side, bool final);
+ void move(Side side);
+};
+
+void A::init()
+{
+ adjust(Side::Invalid, false);
+}
+
+static void __attribute__((noinline))
+check (int v, int final)
+{
+ if (v != 0)
+ abort();
+}
+
+
+__attribute__((noinline))
+void A::adjust(Side side, bool final)
+{
+ check ((int)side, final);
+}
+
+void A::move(Side side)
+{
+ adjust(side, false);
+ adjust(side, true);
+}
+
+int main()
+{
+ A t;
+ t.move(Side::Left);
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63306.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63306.C
new file mode 100644
index 000000000..e22a4c2a0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63306.C
@@ -0,0 +1,14 @@
+// PR c++/63306
+// { dg-do compile { target c++11 } }
+
+template <typename...>
+class A;
+
+class B
+{
+ B (const int &, const A<int, int> &);
+};
+
+B::B (const int &, const A<int, int> &)
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63838.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63838.C
new file mode 100644
index 000000000..d67364900
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63838.C
@@ -0,0 +1,56 @@
+// PR ipa/63838
+// { dg-do run }
+// { dg-options "-O2 -fdump-ipa-pure-const" }
+// { dg-final { scan-ipa-dump-not "Function found to be nothrow: void foo" "pure-const" } }
+// { dg-final { scan-ipa-dump-not "Function found to be nothrow: void bar" "pure-const" } }
+// { dg-final { cleanup-ipa-dump "pure-const" } }
+
+__attribute__((noinline, noclone)) static void bar (int);
+volatile int v;
+void (*fn) ();
+struct S { S () { v++; } ~S () { v++; } };
+
+__attribute__((noinline, noclone)) static void
+foo (int x)
+{
+ v++;
+ if (x == 5)
+ bar (x);
+}
+
+__attribute__((noinline, noclone)) static void
+bar (int x)
+{
+ v++;
+ if (x == 6)
+ foo (x);
+ else if (x == 5)
+ fn ();
+}
+
+__attribute__((noinline, noclone)) int
+baz (int x)
+{
+ S s;
+ foo (x);
+}
+
+void
+throw0 ()
+{
+ throw 0;
+}
+
+int
+main ()
+{
+ fn = throw0;
+ asm volatile ("" : : : "memory");
+ try
+ {
+ baz (5);
+ }
+ catch (int)
+ {
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr64068.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr64068.C
new file mode 100644
index 000000000..95288836c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr64068.C
@@ -0,0 +1,49 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+typedef int PROV_ENUMALGS_EX, PCCRYPT_OID_INFO;
+class A {
+ int m_fn2();
+ virtual bool m_fn1(PCCRYPT_OID_INFO);
+};
+int fn1();
+void fn2();
+int A::m_fn2() { m_fn1(0); }
+
+bool fn3() {
+ for (;;) {
+ if (fn1()) {
+ if (fn1() != 259)
+ fn2();
+ break;
+ }
+ return 1;
+ }
+ return 0;
+}
+
+class B {
+public:
+ B() { fn3(); }
+};
+class C : A {
+ bool m_fn1(PCCRYPT_OID_INFO) { m_fn3(); }
+ int isSupportedByProvider_algId;
+ PROV_ENUMALGS_EX isSupportedByProvider_outEnumAlgs;
+ PROV_ENUMALGS_EX isSupportedByProvider_enumAlgs;
+ bool m_fn3() {
+ while (1) {
+ if (fn1()) {
+ if (fn1() != 259)
+ fn2();
+ break;
+ }
+ if (isSupportedByProvider_algId)
+ isSupportedByProvider_outEnumAlgs = isSupportedByProvider_enumAlgs;
+ return 1;
+ }
+ return 0;
+ }
+};
+
+void fn4() { B(); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/type-inheritance-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/type-inheritance-1.C
index 818002ec1..a0c151122 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/type-inheritance-1.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/type-inheritance-1.C
@@ -1,7 +1,7 @@
/* Verify that callgraph construction keeps FOO for possible devirtualization
and removes BAR. */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-visibility" } */
+/* { dg-options "-O2 -fdump-ipa-visibility -fdevirtualize" } */
extern "C" void abort (void);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/lto/pr62026.C b/gcc-4.9/gcc/testsuite/g++.dg/lto/pr62026.C
new file mode 100644
index 000000000..63766a85b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/lto/pr62026.C
@@ -0,0 +1,22 @@
+// { dg-lto-do link }
+// { dg-lto-options {{-flto -O3 -r -nostdlib}} }
+class C;
+class F {
+ virtual C m_fn1();
+};
+class C {
+ public:
+ virtual int *m_fn3(int);
+};
+class G : F, C {
+ int offsets;
+ int *m_fn3(int);
+};
+C *a;
+int *G::m_fn3(int) {
+ if (offsets) return 0;
+}
+
+void fn1() {
+ for (;;) a->m_fn3(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt1.C b/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt1.C
index f9b4dc2fc..2524dd138 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt1.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt1.C
@@ -1,5 +1,5 @@
// { dg-do compile }
-// { dg-options "-O2" }
+// { dg-options "-O2 -fdevirtualize" }
// { dg-final { scan-assembler "xyzzy" } }
struct S { S(); virtual void xyzzy(); };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt2.C b/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt2.C
index cf4842bd4..ef8c1a123 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt2.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt2.C
@@ -1,5 +1,5 @@
// { dg-do compile }
-// { dg-options "-O2" }
+// { dg-options "-O2 -fdevirtualize" }
/* Using -mshort-calls avoids loading the function addresses in
registers and thus getting the counts wrong. */
// { dg-additional-options "-mshort-calls" {target epiphany-*-*} }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt3.C b/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt3.C
index 673867361..1f3331c5d 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt3.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt3.C
@@ -1,5 +1,5 @@
// { dg-do compile }
-// { dg-options "-O2" }
+// { dg-options "-O2 -fdevirtualize" }
class ert_RefCounter {
protected:
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt4.C b/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt4.C
index 5a24eecbd..72f56afca 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt4.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt4.C
@@ -1,8 +1,7 @@
// PR lto/53808
-// Devirtualization + inlining should produce a non-virtual
-// call to ~foo.
-// { dg-options "-O -fdevirtualize" }
-// { dg-final { scan-assembler "_ZN3fooD2Ev" } }
+// Devirtualization should not produce an external ref to ~bar.
+// { dg-options "-O2" }
+// { dg-final { scan-assembler-not "_ZN3barD0Ev" } }
struct foo {
virtual ~foo();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt5.C b/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt5.C
new file mode 100644
index 000000000..f839cbeae
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/opt/devirt5.C
@@ -0,0 +1,19 @@
+// PR c++/61659
+// { dg-options "-O3" }
+// { dg-final { scan-assembler-not "_ZN6parserIiE9getOptionEv" } }
+
+struct generic_parser_base {
+ virtual void getOption();
+ void getExtraOptionNames() { getOption(); }
+};
+template <class DataType> struct parser : public generic_parser_base {
+ virtual void getOption() {}
+};
+struct PassNameParser : public parser<int> {
+ PassNameParser();
+};
+struct list {
+ PassNameParser Parser;
+ virtual void getExtraOptionNames() { return Parser.getExtraOptionNames(); }
+};
+list PassList;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/opt/flifetime-dse1.C b/gcc-4.9/gcc/testsuite/g++.dg/opt/flifetime-dse1.C
new file mode 100644
index 000000000..733d28a79
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/opt/flifetime-dse1.C
@@ -0,0 +1,23 @@
+// { dg-options "-O3 -fno-lifetime-dse" }
+// { dg-do run }
+
+typedef __SIZE_TYPE__ size_t;
+inline void * operator new (size_t, void *p) { return p; }
+
+struct A
+{
+ int i;
+ A() {}
+ ~A() {}
+};
+
+int main()
+{
+ int ar[1];
+
+ A* ap = new(ar) A;
+ ap->i = 42;
+ ap->~A();
+
+ if (ar[0] != 42) __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/pr54442.C b/gcc-4.9/gcc/testsuite/g++.dg/pr54442.C
new file mode 100644
index 000000000..a48956561
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/pr54442.C
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+
+struct S
+{
+ void s (int) const throw ();
+ void s (int) throw ();
+};
+
+typedef int index_t;
+
+void (S::*f) (index_t) = &S::s;
+void (S::*g) (index_t) const = &S::s;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/pr62079.C b/gcc-4.9/gcc/testsuite/g++.dg/pr62079.C
new file mode 100644
index 000000000..919c3e5de
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/pr62079.C
@@ -0,0 +1,78 @@
+// { dg-do compile }
+// { dg-options "-std=c++11 -O2 -fnon-call-exceptions" }
+
+template < typename > class allocator;
+
+template < class _CharT > struct char_traits;
+template < typename _CharT, typename _Traits = char_traits < _CharT >,
+ typename _Alloc = allocator < _CharT > >class basic_string;
+typedef basic_string < char >string;
+
+template < typename _Tp > class new_allocator
+{
+ template < typename _Tp1 > struct rebind
+ {
+ typedef new_allocator < _Tp1 > other;
+ };
+};
+
+template < typename _Tp > using __allocator_base = new_allocator < _Tp >;
+template < typename _Tp > class allocator:public __allocator_base < _Tp >
+{
+};
+
+template < typename _CharT, typename _Traits, typename _Alloc >
+ class basic_string
+{
+public:
+ basic_string (const _CharT * __s, const _Alloc & __a = _Alloc ());
+ ~basic_string ()noexcept;
+};
+
+template < typename T > struct add_reference
+{
+ typedef T & type;
+};
+
+template < typename ... Values > class tuple;
+template <> class tuple <>
+{
+};
+
+template < typename Head, typename ... Tail > class tuple < Head, Tail ... >:private tuple <
+ Tail ...
+ >
+{
+ typedef tuple < Tail ... >inherited;
+public:
+ template < typename ... VValues >
+ tuple (const tuple < VValues ... >&other):inherited (other.tail ()),
+ m_head (other.head ())
+ {
+ }
+ typename add_reference < const Head >::type head () const
+ {
+ return m_head;
+ }
+ const inherited & tail () const
+ {
+ return *this;
+ }
+ Head m_head;
+};
+
+template < typename T > struct make_tuple_result
+{
+ typedef T type;
+};
+
+template < typename ... Values >
+ tuple < typename make_tuple_result <
+ Values >::type ... >make_tuple (const Values & ... values);
+
+int
+main ()
+{
+ tuple < int, float, string > t3c =
+ make_tuple (17, 2.718281828, string ("Fun"));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/pr64037.C b/gcc-4.9/gcc/testsuite/g++.dg/pr64037.C
new file mode 100644
index 000000000..e5cd0e2ee
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/pr64037.C
@@ -0,0 +1,27 @@
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-options "-std=c++11 -Os" }
+
+enum class X : unsigned char {
+ V = 2,
+};
+
+static void
+__attribute__((noinline,noclone))
+foo(unsigned &out, unsigned a, X b)
+{
+ out = static_cast<unsigned>(b);
+}
+
+int main()
+{
+ unsigned deadbeef = 0xDEADBEEF;
+ asm volatile ("" : "+d" (deadbeef), "+c" (deadbeef));
+
+ unsigned out;
+ foo(out, 2, X::V);
+
+ if (out != 2)
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/template/friend56.C b/gcc-4.9/gcc/testsuite/g++.dg/template/friend56.C
new file mode 100644
index 000000000..7dd5d486f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/template/friend56.C
@@ -0,0 +1,13 @@
+// Make sure we don't mistakenly mark f as DECL_COMDAT.
+// { dg-final { scan-assembler "_Z1fv" } }
+
+void f();
+
+template <class T> struct A
+{
+ friend void f();
+};
+
+A<int> a;
+
+void f() { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/template/non-dependent14.C b/gcc-4.9/gcc/testsuite/g++.dg/template/non-dependent14.C
new file mode 100644
index 000000000..b257d9baf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/template/non-dependent14.C
@@ -0,0 +1,7 @@
+// PR c++/64251
+
+class DictionaryValue {};
+template <typename T> void CreateValue(T) {
+ DictionaryValue(0);
+ CreateValue(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/template/offsetof3.C b/gcc-4.9/gcc/testsuite/g++.dg/template/offsetof3.C
new file mode 100644
index 000000000..b17374645
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/template/offsetof3.C
@@ -0,0 +1,18 @@
+// PR c++/64487
+
+struct foo {
+ int member;
+};
+
+template < int N>
+struct bar {};
+
+template <int N>
+struct qux {
+ static bar<N+__builtin_offsetof(foo,member)> static_member;
+};
+
+template <int N>
+bar<N+__builtin_offsetof(foo,member)> qux<N>::static_member;
+
+int main() { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/template/ptrmem29.C b/gcc-4.9/gcc/testsuite/g++.dg/template/ptrmem29.C
new file mode 100644
index 000000000..7700c0b97
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/template/ptrmem29.C
@@ -0,0 +1,10 @@
+// PR c++/62659
+
+struct D {
+ typedef int (D::*cont_func)();
+ template <cont_func> struct B;
+ template <cont_func cont_f> void wait(B<cont_f> ***);
+
+ int done();
+ template <bool> void fix() { wait<&D::done>(0); }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/template/ref9.C b/gcc-4.9/gcc/testsuite/g++.dg/template/ref9.C
new file mode 100644
index 000000000..983f62788
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/template/ref9.C
@@ -0,0 +1,15 @@
+// PR c++/63658
+
+struct Descriptor {};
+
+template <Descriptor & D>
+struct foo
+{
+ void size ();
+};
+
+Descriptor g_descriptor = {};
+
+template<> void foo<g_descriptor>::size()
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/template/spec38.C b/gcc-4.9/gcc/testsuite/g++.dg/template/spec38.C
new file mode 100644
index 000000000..6f06f1495
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/template/spec38.C
@@ -0,0 +1,6 @@
+// PR ipa/61659
+
+// { dg-final { scan-assembler "_Z1fIiEvPT_" } }
+
+template <typename T> inline void f (T *);
+template <> void f (int *) { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/torture/pr62121.C b/gcc-4.9/gcc/testsuite/g++.dg/torture/pr62121.C
new file mode 100644
index 000000000..de1196a62
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/torture/pr62121.C
@@ -0,0 +1,12 @@
+// { dg-do compile }
+class A
+{
+ virtual double operator()();
+};
+class B : A
+{
+public:
+ double operator()();
+};
+extern B a[];
+int b = a[0]();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/torture/pr62175.C b/gcc-4.9/gcc/testsuite/g++.dg/torture/pr62175.C
new file mode 100644
index 000000000..bcdea61e1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/torture/pr62175.C
@@ -0,0 +1,36 @@
+// { dg-do compile }
+// { dg-additional-options "-ftrapv" }
+
+struct B {
+ B(int = 0);
+};
+int c;
+int *d;
+struct G {
+ G();
+ int numProcs_;
+};
+int fn1();
+B fn2() {
+ if (c)
+ return 0;
+ return B();
+}
+
+long &fn3(long &p1, long &p2) {
+ if (p2 < p1)
+ return p2;
+ return p1;
+}
+
+void fn4(long p1) {
+ long a = fn1();
+ fn2();
+ int b = fn3(p1, a);
+ for (int i; i < b; ++i)
+ d[0] = 0;
+ for (; a < p1; ++a)
+ d[a] = 0;
+}
+
+G::G() { fn4(numProcs_ + 1); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/torture/pr63632.C b/gcc-4.9/gcc/testsuite/g++.dg/torture/pr63632.C
new file mode 100644
index 000000000..48cd86924
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/torture/pr63632.C
@@ -0,0 +1,5 @@
+// PR bootstrap/63632
+// { dg-do link }
+// { dg-options "-fno-lto" }
+
+int main () {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/func_reorder_gold_plugin_1.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/func_reorder_gold_plugin_1.C
index c58f3ca94..9c532c195 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/func_reorder_gold_plugin_1.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/func_reorder_gold_plugin_1.C
@@ -38,7 +38,7 @@ int main ()
/* { dg-final-use { scan-assembler "\.string \"Weight 1000 1000\"" } } */
/* { dg-final-use { scan-assembler "\.string \"Weight 1001 1001\"" } } */
/* Check if main is next to foo or bar */
-/* { dg-final-use { scan-file linker.dump "Callgraph group : *\(_Z3foov main|main _Z3foov|_Z3barv main|main _Z3barv\).*\n" } } */
+/* { dg-final-use { scan-file linker.dump "Callgraph group : *\.*(_Z3foov main|main _Z3foov|_Z3barv main|main _Z3barv\).*\n" } } */
/* { dg-final-use { scan-file linker.dump ".text\..*\._Z9notcalledv entry count = 0 computed = 0 max count = 0" } } */
/* { dg-final-use { scan-file linker.dump "Moving .* section\\(s\\) to new segment" } } */
/* { dg-final-use { cleanup-saved-temps } } */
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/buildinfo.txt b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/buildinfo.txt
new file mode 100644
index 000000000..c7a82f77e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/buildinfo.txt
@@ -0,0 +1 @@
+Test -fprofile-generate-buildinfo option
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup.h b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup.h
new file mode 100644
index 000000000..bf28164a0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup.h
@@ -0,0 +1,5 @@
+class Foo
+{
+ public:
+ int foo(int x) { return x; }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_0.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_0.C
new file mode 100644
index 000000000..7743a0b36
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_0.C
@@ -0,0 +1,9 @@
+/* { dg-options "-O2 -fno-inline -fprofile-generate-buildinfo=$srcdir/g++.dg/tree-prof/lipo/buildinfo.txt" } */
+#include <stdio.h>
+
+extern int foo1(int x);
+extern int foo2(int x);
+int main()
+{
+ printf ("Result = %d\n", foo1(1) + foo2(1));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_1.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_1.C
new file mode 100644
index 000000000..5f24dc1eb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_1.C
@@ -0,0 +1,7 @@
+/* { dg-options "-O2 -fno-inline" } */
+#include "comdat_fixup.h"
+int foo1(int x)
+{
+ Foo f;
+ return f.foo(x);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_2.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_2.C
new file mode 100644
index 000000000..1416129c0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/comdat_fixup_2.C
@@ -0,0 +1,7 @@
+/* { dg-options "-O2 -fno-inline" } */
+#include "comdat_fixup.h"
+int foo2(int x)
+{
+ Foo f;
+ return f.foo(x);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/indir-call-prof_0.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/indir-call-prof_0.C
index b34b937fd..78fd0c583 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/indir-call-prof_0.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/indir-call-prof_0.C
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile --param=lipo-sampling-period=1" } */
struct A {
A () {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_0.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_0.C
new file mode 100644
index 000000000..525480dab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_0.C
@@ -0,0 +1,48 @@
+// { dg-options "-std=c++11 -O2" }
+
+// A test case for static var promotion on targets like powerpc, where
+// the static initializer data is loaded via indirection through
+// TOC. Ensure that the global label for static initializer data is
+// unique via *.cmo* suffix.
+
+// Bug: after static var promotion in two different modules, we have
+// the following which leads to multiple definition of ._41" error during
+// link time.
+
+// Module 1 Module 2
+// .hidden ._41.cmo.1 .hidden ._41.cmo.3
+// .globl ._41 .globl ._41
+// ._41: ._41:
+// ... ...
+
+
+// Instead we should use the appropriate unique names for initializer
+// data as in the following.
+
+// Module 1 Module 2
+// .hidden ._41.cmo.1 .hidden ._41.cmo.3
+// .globl ._41.cmo.1 .globl ._41.cmo.3
+// ._41.cmo.1: ._41.cmo.3:
+// ... ...
+
+class A {
+ public:
+ int f(int x) const;
+};
+
+class B {
+ public:
+ int f(int x) const;
+};
+
+int main()
+{
+ A *a = new A();
+ B *b = new B();
+ int total = 0;
+ for (int i=0; i<3; ++i) {
+ total += a->f(1);
+ total += b->f(1);
+ }
+ return (total > 0) ? 0 : 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_1.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_1.C
new file mode 100644
index 000000000..0236e16d3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_1.C
@@ -0,0 +1,14 @@
+/* { dg-options "-std=c++11 -O2" } */
+
+#include <vector>
+
+class A {
+ public:
+ int f(int x) const;
+};
+
+static const std::vector<int> point1_{42};
+
+int A::f(int x) const {
+ return x+1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_2.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_2.C
new file mode 100644
index 000000000..d39095de5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/static1_2.C
@@ -0,0 +1,14 @@
+/* { dg-options "-std=c++11 -O2" } */
+
+#include <vector>
+
+class B {
+ public:
+ int f(int x) const;
+};
+
+static const std::vector<int> point2_{43};
+
+int B::f(int x) const {
+ return x+1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls.h b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls.h
new file mode 100644
index 000000000..5eb102d74
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls.h
@@ -0,0 +1,16 @@
+extern int NextId();
+
+class TLSClass {
+ public:
+ TLSClass() {
+ id = NextId();
+ bar = 1;
+ }
+ ~TLSClass() {}
+ int id;
+ int bar;
+};
+extern TLSClass* NextTLSClass();
+extern void *SetTLSClass(TLSClass *a);
+extern TLSClass *GetTLSClass();
+extern thread_local TLSClass* current_tls_;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2.h b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2.h
new file mode 100644
index 000000000..9ba0945c2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2.h
@@ -0,0 +1,15 @@
+extern int NextId();
+
+class TLSClass {
+ public:
+ TLSClass() {
+ id = NextId();
+ bar = 1;
+ }
+ ~TLSClass() {}
+ int id;
+ int bar;
+};
+extern TLSClass* NextTLSClass();
+extern void *SetTLSClass(TLSClass *a);
+extern TLSClass *GetTLSClass();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2_0.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2_0.C
new file mode 100644
index 000000000..9ccd5b96b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2_0.C
@@ -0,0 +1,10 @@
+// { dg-options "-std=c++11 -O2 --param=lipo-sampling-period=1" }
+#include "tls2.h"
+
+static thread_local TLSClass* current_tls_ = NextTLSClass();
+void *SetTLSClass(TLSClass *a) {
+ current_tls_ = a;
+}
+TLSClass *GetTLSClass() {
+ return current_tls_;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2_1.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2_1.C
new file mode 100644
index 000000000..43c108526
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls2_1.C
@@ -0,0 +1,31 @@
+// { dg-options "-std=c++11 -O2 --param=lipo-sampling-period=1" }
+#include <stdio.h>
+#include <stdlib.h>
+#include <new>
+#include "tls2.h"
+TLSClass* NextTLSClass() {
+ return new TLSClass();
+}
+int NextId() {
+ static int id = 0;
+ return id++;
+}
+static thread_local TLSClass* current_tls2_ = NextTLSClass();
+void *SetTLSClass2(TLSClass *a) {
+ current_tls2_ = a;
+}
+int main() {
+ int i = 0;
+ if (GetTLSClass()->id != i++)
+ abort();
+ TLSClass *A = NextTLSClass();
+ SetTLSClass(A);
+ if (GetTLSClass()->id != i++)
+ abort();
+ if (current_tls2_->id != i++)
+ abort();
+ A = NextTLSClass();
+ SetTLSClass2(A);
+ if (current_tls2_->id != i++)
+ abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls_0.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls_0.C
new file mode 100644
index 000000000..f3e5e376e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls_0.C
@@ -0,0 +1,10 @@
+// { dg-options "-std=c++11 -O2 --param=lipo-sampling-period=1" }
+#include "tls.h"
+
+thread_local TLSClass* current_tls_ = NextTLSClass();
+void *SetTLSClass(TLSClass *a) {
+ current_tls_ = a;
+}
+TLSClass *GetTLSClass() {
+ return current_tls_;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls_1.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls_1.C
new file mode 100644
index 000000000..fcf8c2101
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/lipo/tls_1.C
@@ -0,0 +1,38 @@
+// { dg-options "-std=c++11 -O2 --param=lipo-sampling-period=1" }
+#include <stdio.h>
+#include <stdlib.h>
+#include <new>
+#include "tls.h"
+TLSClass* NextTLSClass() {
+ return new TLSClass();
+}
+int NextId() {
+ static int id = 0;
+ return id++;
+}
+void *SetTLSClassHere(TLSClass *a) {
+ current_tls_ = a;
+}
+thread_local TLSClass* current_tls2_ = NextTLSClass();
+void *SetTLSClass2(TLSClass *a) {
+ current_tls2_ = a;
+}
+int main() {
+ int i = 0;
+ if (GetTLSClass()->id != i++)
+ abort();
+ TLSClass *A = NextTLSClass();
+ SetTLSClass(A);
+ if (GetTLSClass()->id != i++)
+ abort();
+ A = NextTLSClass();
+ SetTLSClassHere(A);
+ if (GetTLSClass()->id != i++)
+ abort();
+ if (current_tls2_->id != i++)
+ abort();
+ A = NextTLSClass();
+ SetTLSClass2(A);
+ if (current_tls2_->id != i++)
+ abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/partition_patch.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/partition_patch.C
new file mode 100644
index 000000000..b1225a0f8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/partition_patch.C
@@ -0,0 +1,19 @@
+// Check if patching works with function splitting.
+// { dg-require-effective-target freorder }
+// { dg-options "-O2 -fnon-call-exceptions -freorder-blocks-and-partition " { target { ! x86_64-*-* } } }
+// { dg-options "-O2 -fnon-call-exceptions -freorder-blocks-and-partition -mpatch-functions-for-instrumentation -fno-optimize-sibling-calls " { target x86_64-*-* } }
+
+int k;
+
+int
+main ()
+{
+ try
+ {
+ if (k)
+ throw 6;
+ }
+ catch (...)
+ {
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/pr63581.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/pr63581.C
new file mode 100644
index 000000000..c8caf0765
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-prof/pr63581.C
@@ -0,0 +1,91 @@
+// { dg-require-effective-target freorder }
+/* { dg-options "-O2 -g -fno-peel-loops" } */
+
+struct page {
+ int i;
+} global;
+
+__attribute__((noinline)) static struct page* find_page1 (int i)
+{
+ if ( i< 150)
+ return 0;
+ global.i = i;
+ return &global;
+}
+
+__attribute__((noinline)) static struct page* find_page2 (int i)
+{
+ global.i = i;
+ return &global;
+}
+
+volatile int ii;
+__attribute__((noinline)) static int zero (void)
+{
+ return ii;
+}
+
+static inline int uptodate (struct page* p)
+{
+ return (p->i < 709);
+}
+
+static struct page* bar(int i)
+{
+ struct page *page;
+
+repeat:
+ page = find_page1 (i);
+ if (!page) {
+ page = find_page2 (i);
+ if (!page)
+ return 0;
+ if (zero () ) {
+ zero ();
+ goto repeat;
+ }
+ }
+ return page;
+}
+
+__attribute__((noinline)) int foo (int n)
+{
+ struct page *page;
+
+retry:
+ page = bar (n);
+ if (page == 0)
+ return 0;
+ if (uptodate (page))
+ goto out;
+
+ zero ();
+ if (page->i < 0) {
+ zero ();
+ goto retry;
+ }
+out:
+ return 1;
+}
+
+__attribute__((noinline)) int hot (void)
+{
+ int i;
+ int sum = 0;
+
+ for (i = 0; i < 433038; i++)
+ sum+=i;
+
+ return sum;
+}
+
+int main(void)
+{
+ int i;
+
+ global.i = hot ();
+ for (i = 0; i < 858; i++)
+ foo (i);
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tree-ssa/pr63841.C b/gcc-4.9/gcc/testsuite/g++.dg/tree-ssa/pr63841.C
new file mode 100644
index 000000000..2a2c78f9f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tree-ssa/pr63841.C
@@ -0,0 +1,35 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+#include <string>
+
+std::string __attribute__ ((noinline)) comp_test_write() {
+ std::string data;
+
+ for (int i = 0; i < 2; ++i) {
+ char b = 1 >> (i * 8);
+ data.append(&b, 1);
+ }
+
+ return data;
+}
+
+std::string __attribute__ ((noinline)) comp_test_write_good() {
+ std::string data;
+
+ char b;
+ for (int i = 0; i < 2; ++i) {
+ b = 1 >> (i * 8);
+ data.append(&b, 1);
+ }
+
+ return data;
+}
+
+int main() {
+ std::string good = comp_test_write_good();
+ std::string bad = comp_test_write();
+
+ if (good != bad)
+ __builtin_abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tsan/atomic_free.C b/gcc-4.9/gcc/testsuite/g++.dg/tsan/atomic_free.C
index 26d01ae3f..20429f159 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/tsan/atomic_free.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tsan/atomic_free.C
@@ -1,18 +1,23 @@
/* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
#include <pthread.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
+
+static pthread_barrier_t barrier;
void *Thread(void *a) {
__atomic_fetch_add((int*)a, 1, __ATOMIC_SEQ_CST);
+ barrier_wait(&barrier);
return 0;
}
int main() {
+ barrier_init(&barrier, 2);
int *a = new int(0);
pthread_t t;
pthread_create(&t, 0, Thread, a);
- sleep(1);
+ barrier_wait(&barrier);
delete a;
pthread_join(t, 0);
}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tsan/atomic_free2.C b/gcc-4.9/gcc/testsuite/g++.dg/tsan/atomic_free2.C
index 1fe512cde..3b6a8e3af 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/tsan/atomic_free2.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tsan/atomic_free2.C
@@ -1,19 +1,24 @@
/* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
#include <pthread.h>
-#include <unistd.h>
+#include "tsan_barrier.h"
+
+static pthread_barrier_t barrier;
void *Thread(void *a) {
- sleep(1);
+ barrier_wait(&barrier);
__atomic_fetch_add((int*)a, 1, __ATOMIC_SEQ_CST);
return 0;
}
int main() {
+ barrier_init(&barrier, 2);
int *a = new int(0);
pthread_t t;
pthread_create(&t, 0, Thread, a);
delete a;
+ barrier_wait(&barrier);
pthread_join(t, 0);
}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tsan/cond_race.C b/gcc-4.9/gcc/testsuite/g++.dg/tsan/cond_race.C
index a93761477..d72d0fb54 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/tsan/cond_race.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tsan/cond_race.C
@@ -1,10 +1,12 @@
/* { dg-shouldfail "tsan" } */
+/* { dg-additional-options "-ldl" } */
/* { dg-output "ThreadSanitizer: data race.*" } */
/* { dg-output "pthread_cond_signal.*" } */
-#include <stdio.h>
-#include <stdlib.h>
#include <pthread.h>
+#include "tsan_barrier.h"
+
+static pthread_barrier_t barrier;
struct Ctx {
pthread_mutex_t m;
@@ -18,10 +20,12 @@ void *thr(void *p) {
c->done = true;
pthread_mutex_unlock(&c->m);
pthread_cond_signal(&c->c);
+ barrier_wait(&barrier);
return 0;
}
int main() {
+ barrier_init(&barrier, 2);
Ctx *c = new Ctx();
pthread_mutex_init(&c->m, 0);
pthread_cond_init(&c->c, 0);
@@ -31,6 +35,7 @@ int main() {
while (!c->done)
pthread_cond_wait(&c->c, &c->m);
pthread_mutex_unlock(&c->m);
+ barrier_wait(&barrier);
delete c;
pthread_join(th, 0);
}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/tsan/tsan_barrier.h b/gcc-4.9/gcc/testsuite/g++.dg/tsan/tsan_barrier.h
new file mode 100644
index 000000000..5d37a6475
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/tsan/tsan_barrier.h
@@ -0,0 +1,14 @@
+/* TSAN-invisible barriers. Link with -ldl. */
+#include <pthread.h>
+#include <dlfcn.h>
+
+static __typeof(pthread_barrier_wait) *barrier_wait;
+
+static
+void barrier_init (pthread_barrier_t *barrier, unsigned count)
+{
+ void *h = dlopen ("libpthread.so.0", RTLD_LAZY);
+ barrier_wait = (__typeof (pthread_barrier_wait) *)
+ dlsym (h, "pthread_barrier_wait");
+ pthread_barrier_init (barrier, NULL, count);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ubsan/pr61272.C b/gcc-4.9/gcc/testsuite/g++.dg/ubsan/pr61272.C
new file mode 100644
index 000000000..064678d37
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ubsan/pr61272.C
@@ -0,0 +1,24 @@
+// PR sanitizer/61272
+// { dg-do compile }
+// { dg-options "-fsanitize=undefined -std=c++11" }
+
+namespace std
+{
+ template < typename _Tp > class allocator;
+ template < typename _Alloc > struct allocator_traits {
+ private:
+ template < typename _Tp > auto construct ( _Alloc & __a, _Tp * __p)-> // { dg-error "is private" }
+ decltype (_S_construct (__a, __p)) { }
+ };
+ namespace __gnu_cxx
+ {
+ template < typename _Alloc > struct __alloc_traits:std::allocator_traits < _Alloc > // { dg-error "within this context" }
+ {
+ typedef std::allocator_traits < _Alloc > _Base_type;
+ using _Base_type::construct;
+ };
+ template < typename _Tp, typename _Alloc > struct _Vector_base { typedef typename __gnu_cxx::__alloc_traits < _Alloc >::template rebind < _Tp >::other _Tp_alloc_type; }; // { dg-error "no class template" }
+ template < typename _Tp, typename _Alloc = std::allocator < _Tp > >class vector : protected _Vector_base < _Tp, _Alloc > { };
+ template < typename NumberT > struct Point2d { };
+ typedef Point2d < int >GdsPoint;
+ class GdsPointList : public vector < GdsPoint > {};}}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ubsan/pr63913.C b/gcc-4.9/gcc/testsuite/g++.dg/ubsan/pr63913.C
new file mode 100644
index 000000000..34dceb4d8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ubsan/pr63913.C
@@ -0,0 +1,12 @@
+// PR sanitizer/63913
+// { dg-do compile }
+// { dg-options "-fsanitize=bool -fnon-call-exceptions" }
+
+struct B { B (); ~B (); };
+
+double
+foo (bool *x)
+{
+ B b;
+ return *x;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/warn/Wunused-parm-6.C b/gcc-4.9/gcc/testsuite/g++.dg/warn/Wunused-parm-6.C
new file mode 100644
index 000000000..95fb7e2db
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/warn/Wunused-parm-6.C
@@ -0,0 +1,8 @@
+// PR c++/61465
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wunused-but-set-parameter" }
+
+struct Foo {
+ Foo(void* x) : y{static_cast<char*>(x)} {}
+ char* y;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/warn/Wunused-var-22.C b/gcc-4.9/gcc/testsuite/g++.dg/warn/Wunused-var-22.C
new file mode 100644
index 000000000..8ae46c17f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/warn/Wunused-var-22.C
@@ -0,0 +1,12 @@
+// PR c++/63657
+// { dg-options "-Wunused-variable" }
+
+class Bar
+{
+ virtual ~Bar() {}
+};
+Bar& getbar();
+void bar()
+{
+ Bar& b = getbar(); // { dg-warning "unused" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/warn/register-parm-1.C b/gcc-4.9/gcc/testsuite/g++.dg/warn/register-parm-1.C
new file mode 100644
index 000000000..44232d3cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/warn/register-parm-1.C
@@ -0,0 +1,9 @@
+// PR c++/60955
+// { dg-options "-Wextra" }
+
+unsigned int erroneous_warning(register int a) {
+ if ((a) & 0xff) return 1; else return 0;
+}
+unsigned int no_erroneous_warning(register int a) {
+ if (a & 0xff) return 1; else return 0;
+}