]> granicus.if.org Git - clang/commitdiff
After dyn_cast'ing, it generally makes sense to check the *output* of
authorDouglas Gregor <dgregor@apple.com>
Thu, 14 Jan 2010 18:13:22 +0000 (18:13 +0000)
committerDouglas Gregor <dgregor@apple.com>
Thu, 14 Jan 2010 18:13:22 +0000 (18:13 +0000)
the dyn_cast against NULL rather than the *input*. Fixes PR6025.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93435 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplateDeduction.cpp
test/SemaTemplate/temp_class_spec.cpp

index 471d0c2a2ab22baec616473f45bc8a7b92444caf..7b433e901e338c4094c24b1b9fa38ebae742ce45 100644 (file)
@@ -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
index 48026f913178f9965b640eb63ccad9b897a6dbbf..e86f07a02ffe99316030e206756cc18eeeccbabf 100644 (file)
@@ -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 > >
+  {
+  };
+}