summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-02-13 06:05:33 +0000
committerDouglas Gregor <dgregor@apple.com>2010-02-13 06:05:33 +0000
commit04922cbb46f1416af7dcda58de6ab65c8855480f (patch)
tree792f8a3d7a7e0542a8863800aabe61c03ca74873 /clang/test
parent42c66b72707b516fa939b46eb537e9dae8daed26 (diff)
downloadbcm5719-llvm-04922cbb46f1416af7dcda58de6ab65c8855480f.tar.gz
bcm5719-llvm-04922cbb46f1416af7dcda58de6ab65c8855480f.zip
Fix a fiendinshly fun little type-canonicalization bug, where we were
rebuilding a typename type terminating in a template-id (with dependent template name, naturally) as a TypenameType when, because its context could be fully resolved, we should have been building it as a QualifiedNameType. Fixes PR6268. llvm-svn: 96084
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/SemaTemplate/typename-specifier-4.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/test/SemaTemplate/typename-specifier-4.cpp b/clang/test/SemaTemplate/typename-specifier-4.cpp
index 9c757c5ad0f..0a6fef74c34 100644
--- a/clang/test/SemaTemplate/typename-specifier-4.cpp
+++ b/clang/test/SemaTemplate/typename-specifier-4.cpp
@@ -80,3 +80,22 @@ namespace PR6236 {
}
};
}
+
+namespace PR6268 {
+ template <typename T>
+ struct Outer {
+ template <typename U>
+ struct Inner {};
+
+ template <typename U>
+ typename Outer<T>::template Inner<U>
+ foo(typename Outer<T>::template Inner<U>);
+ };
+
+ template <typename T>
+ template <typename U>
+ typename Outer<T>::template Inner<U>
+ Outer<T>::foo(typename Outer<T>::template Inner<U>) {
+ return Inner<U>();
+ }
+}
OpenPOWER on IntegriCloud