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