]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
This commit was manufactured by cvs2svn to create branch
authorNo Author <no-author@gcc.gnu.org>
Mon, 24 Jan 2005 09:10:53 +0000 (09:10 +0000)
committerNo Author <no-author@gcc.gnu.org>
Mon, 24 Jan 2005 09:10:53 +0000 (09:10 +0000)
'gcc-3_4-branch'.

From-SVN: r94148

gcc/testsuite/g++.dg/template/array11.C [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/20050121-1.c [new file with mode: 0644]

diff --git a/gcc/testsuite/g++.dg/template/array11.C b/gcc/testsuite/g++.dg/template/array11.C
new file mode 100644 (file)
index 0000000..259c9fa
--- /dev/null
@@ -0,0 +1,14 @@
+// { dg-do compile }
+// Origin: Giovanni Bajo <giovannibajo at gcc dot gnu dot org>
+// PR c++/19208: Fold dependent array domains
+
+template <class C> struct if_t { typedef int type; };
+template <class T> struct ffff { static const bool value = true; };
+template <class A>
+struct bound_member_action
+{
+  typedef char f[ffff<A>::value ? 1 : 2];
+  template <class CT>
+    bound_member_action(CT i, typename if_t<f>::type g)  {}
+};
+bound_member_action<int> a(0, 1);
diff --git a/gcc/testsuite/gcc.c-torture/execute/20050121-1.c b/gcc/testsuite/gcc.c-torture/execute/20050121-1.c
new file mode 100644 (file)
index 0000000..9d5dec4
--- /dev/null
@@ -0,0 +1,63 @@
+/* PR middle-end/19551 */
+
+extern void abort ();
+
+#define T(type, name) \
+__attribute__((pure)) _Complex type            \
+foo_##name (int x)                             \
+{                                              \
+  _Complex type r;                             \
+  __real r = x + 1;                            \
+  __imag r = x - 1;                            \
+  return r;                                    \
+}                                              \
+                                               \
+void                                           \
+bar_##name (type *x)                           \
+{                                              \
+  *x = __real foo_##name (5);                  \
+}                                              \
+                                               \
+void                                           \
+baz_##name (type *x)                           \
+{                                              \
+  *x = __imag foo_##name (5);                  \
+}
+
+typedef long double ldouble_t;
+typedef long long llong;
+
+T (float, float)
+T (double, double)
+T (long double, ldouble_t)
+T (char, char)
+T (short, short)
+T (int, int)
+T (long, long)
+T (long long, llong)
+#undef T
+
+int
+main (void)
+{
+#define T(type, name) \
+  {                                            \
+    type var = 0;                              \
+    bar_##name (&var);                         \
+    if (var != 6)                              \
+      abort ();                                        \
+    var = 0;                                   \
+    baz_##name (&var);                         \
+    if (var != 4)                              \
+      abort ();                                        \
+  }
+  T (float, float)
+  T (double, double)
+  T (long double, ldouble_t)
+  T (char, char)
+  T (short, short)
+  T (int, int)
+  T (long, long)
+  T (long long, llong)
+  return 0;
+}