aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/template
diff options
context:
space:
mode:
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>2005-11-14 19:30:22 +0000
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>2005-11-14 19:30:22 +0000
commit31b57efd4508d6bbce3fab97eaff99f68cabad4c (patch)
tree4be09707a4a57bbdd569334be99e346888a2ebcb /gcc/testsuite/g++.dg/template
parentb0bfbc4d2ae9c0768205189895b2bf2e994c8136 (diff)
Merge from mainline
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/dataflow-branch@106897 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/g++.dg/template')
-rw-r--r--gcc/testsuite/g++.dg/template/asm1.C14
-rw-r--r--gcc/testsuite/g++.dg/template/crash42.C10
-rw-r--r--gcc/testsuite/g++.dg/template/dependent-name3.C17
-rw-r--r--gcc/testsuite/g++.dg/template/dependent-name4.C15
-rw-r--r--gcc/testsuite/g++.dg/template/sfinae2.C17
5 files changed, 73 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/template/asm1.C b/gcc/testsuite/g++.dg/template/asm1.C
new file mode 100644
index 00000000000..741759fd2f4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/asm1.C
@@ -0,0 +1,14 @@
+// PR c++/24761
+// { dg-do compile }
+
+template <int>
+int f (int i)
+{
+ asm ("# %0 %1" : "+r" (i));
+ return i;
+}
+
+int main ()
+{
+ return f<0> (0) + f<1> (0);
+}
diff --git a/gcc/testsuite/g++.dg/template/crash42.C b/gcc/testsuite/g++.dg/template/crash42.C
new file mode 100644
index 00000000000..d36ced473ab
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/crash42.C
@@ -0,0 +1,10 @@
+// { dg-do compile }
+
+// PR c++/22153
+
+template<int> void foo();
+
+template<int> struct A
+{
+ template<> friend void foo<0>(); // { dg-error "" }
+};
diff --git a/gcc/testsuite/g++.dg/template/dependent-name3.C b/gcc/testsuite/g++.dg/template/dependent-name3.C
new file mode 100644
index 00000000000..bbe6fb66266
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/dependent-name3.C
@@ -0,0 +1,17 @@
+// { dg-do compile }
+
+// Dependent arrays of invalid size generate appropriate error messages
+
+template<int I> struct A
+{
+ static const int zero = 0;
+ static const int minus_one = -1;
+};
+
+template<int N> struct B
+{
+ int x[A<N>::zero]; // { dg-error "zero" }
+ int y[A<N>::minus_one]; // { dg-error "negative" }
+};
+
+B<0> b;
diff --git a/gcc/testsuite/g++.dg/template/dependent-name4.C b/gcc/testsuite/g++.dg/template/dependent-name4.C
new file mode 100644
index 00000000000..b2b5814befb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/dependent-name4.C
@@ -0,0 +1,15 @@
+// { dg-do compile }
+
+// Dependent arrays of invalid size cause template instantiation failure.
+
+// We'll get an error message (duplicate matching templates) if the first
+// pattern is incorrectly allowed to match.
+
+template<int M> void foobar (int (*) [M] = 0 );
+template<int M> void foobar ( );
+
+void fn (void)
+{
+ foobar<0>();
+ foobar<-1>();
+}
diff --git a/gcc/testsuite/g++.dg/template/sfinae2.C b/gcc/testsuite/g++.dg/template/sfinae2.C
new file mode 100644
index 00000000000..89880a85f43
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sfinae2.C
@@ -0,0 +1,17 @@
+// PR c++/19989
+// Don't instantiate a function template if it would generate an
+// array of size zero.
+
+// { dg-do compile }
+
+template<int T> struct cl {
+ const static int value = T;
+};
+
+template<int I> void fn (char (*) [cl<I>::value] = 0 );
+
+void foo (void)
+{
+ fn<0> (); // { dg-error "no matching function" }
+}
+