commit d8cfecd974c2515465f9be396d52a128db88f9e9
Author: Jason Merrill <jason@redhat.com>
Date: Mon Feb 6 11:29:37 2012 -1000
PR c++/52035
* pt.c (tsubst): Strip uninstantiated typedef.
@@ -11178,7 +11178,9 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
complain | tf_ignore_bad_quals);
return r;
}
- /* Else we must be instantiating the typedef, so fall through. */
+ else
+ /* We don't have an instantiation yet, so drop the typedef. */
+ t = DECL_ORIGINAL_TYPE (decl);
}
if (type
@@ -24,9 +24,9 @@ $ g++ -o <executable> a_0.o a_1.o a_2.o
Tests that do not need more than one file are a special case
where there is a single file named 'foo_0.C'.
-The only supported dg-lto-do option are 'compile', 'run' and 'link'.
+The only supported dg-lto-do option are 'assemble', 'run' and 'link'.
Additionally, these can only be used in the main file. If
-'compile' is used, only the individual object files are
+'assemble' is used, only the individual object files are
generated. If 'link' is used, the final executable is generated
but not executed (in this case, function main() needs to exist
but it does not need to do anything). If 'run' is used, the
new file mode 100644
@@ -0,0 +1,14 @@
+// PR c++/52035
+// { dg-lto-do assemble }
+
+template <typename T> struct QVector {
+ typedef T* iterator;
+ static void insert(int n);
+ typedef int size_type;
+};
+template <typename T> void QVector<T>::insert(size_type n) {}
+void error()
+{
+ int n;
+ QVector<int>::insert(n);
+}