diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-01-14 18:13:22 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-01-14 18:13:22 +0000 |
| commit | 04b1152aacf98e118128d05829d6ddfbfffbc64a (patch) | |
| tree | 42dc235f6ae033d3740c1328634e73a03cecc51e /clang | |
| parent | ea84f59f5c1694de6ea62669c14c143c6bf52b94 (diff) | |
| download | bcm5719-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.cpp | 2 | ||||
| -rw-r--r-- | clang/test/SemaTemplate/temp_class_spec.cpp | 18 |
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 > > + { + }; +} |

