ahatanak added inline comments.

================
Comment at: lib/Sema/SemaDecl.cpp:3377-3378
@@ -3376,4 +3376,4 @@
 
           if (!Context.hasSameType(NewArray, PrevVDTy))
             return diagnoseVarDeclTypeMismatch(*this, New, PrevVD);
         }
----------------
rsmith wrote:
> ahatanak wrote:
> > rsmith wrote:
> > > If you do use `isDependentSizedArrayType()`, you'll need to change this 
> > > to check the bounds of the array types rather than the type.
> > It seems to me that you don't want to do the check when either the array 
> > bound or the element type is dependent. Which case would we miss if 
> > isDependentType is used here instead of isDependentSizedArrayType? Could 
> > you show an example?
> Sure. We could diagnose both declarations in the template here:
> 
>     int a[5];
>     int b[5];
>     template<typename T, int N> void f() {
>       extern T a[6];
>       extern float b[N];
>     }
> 
> ... because in both cases the type can never match. However, we don't do this 
> sort of partial type matching in any other cases, so it's very much just a 
> "nice-to-have".
Ah, I see your point.

If we want to catch those cases too, perhaps we should define and use a 
function "hasDifferentType" which returns true only if the new and old arrays 
are known to have different types. In your example, the function would return 
true for "T a[6]" because we can see it will never match "int a[5]" regardless 
of what T is.


https://reviews.llvm.org/D24110



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to