summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-01-14 18:13:22 +0000
committerDouglas Gregor <dgregor@apple.com>2010-01-14 18:13:22 +0000
commit04b1152aacf98e118128d05829d6ddfbfffbc64a (patch)
tree42dc235f6ae033d3740c1328634e73a03cecc51e /clang
parentea84f59f5c1694de6ea62669c14c143c6bf52b94 (diff)
downloadbcm5719-llvm-04b1152aacf98e118128d05829d6ddfbfffbc64a.tar.gz
bcm5719-llvm-04b1152aacf98e118128d05829d6ddfbfffbc64a.zip
After dyn_cast'ing, it generally makes sense to check the *output* of
the dyn_cast against NULL rather than the *input*. Fixes PR6025. llvm-svn: 93435
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaTemplateDeduction.cpp2
-rw-r--r--clang/test/SemaTemplate/temp_class_spec.cpp18
2 files changed, 19 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp
index 471d0c2a2ab..7b433e901e3 100644
--- a/clang/lib/Sema/SemaTemplateDeduction.cpp
+++ b/clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -2174,7 +2174,7 @@ MarkUsedTemplateParameters(Sema &SemaRef,
// FIXME: if !OnlyDeduced, we have to walk the whole subexpression to
// find other occurrences of template parameters.
const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E);
- if (!E)
+ if (!DRE)
return;
const NonTypeTemplateParmDecl *NTTP
diff --git a/clang/test/SemaTemplate/temp_class_spec.cpp b/clang/test/SemaTemplate/temp_class_spec.cpp
index 48026f91317..e86f07a02ff 100644
--- a/clang/test/SemaTemplate/temp_class_spec.cpp
+++ b/clang/test/SemaTemplate/temp_class_spec.cpp
@@ -330,3 +330,21 @@ template<typename T, T N, typename U> class A0;
template<typename T, T N> class A0<T, N, int> { }; // expected-note{{here}}
template<typename T, T N> class A0<T, N, int>;
template<typename T, T N> class A0<T, N, int> { }; // expected-error{{redef}}
+
+namespace PR6025 {
+ template< int N > struct A;
+
+ namespace N
+ {
+ template< typename F >
+ struct B;
+ }
+
+ template< typename Protect, typename Second >
+ struct C;
+
+ template <class T>
+ struct C< T, A< N::B<T>::value > >
+ {
+ };
+}
OpenPOWER on IntegriCloud