diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index d5d946429e7d..2bf16d138d5a 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -3910,11 +3910,11 @@ void Sema::MergeVarDeclTypes(VarDecl *New, VarDecl *Old, if (!NewArray->isIncompleteArrayType() && !NewArray->isDependentType()) { for (VarDecl *PrevVD = Old->getMostRecentDecl(); PrevVD; PrevVD = PrevVD->getPreviousDecl()) { - const ArrayType *PrevVDTy = Context.getAsArrayType(PrevVD->getType()); + QualType PrevVDTy = PrevVD->getType(); if (PrevVDTy->isIncompleteArrayType() || PrevVDTy->isDependentType()) continue; - if (!Context.hasSameType(NewArray, PrevVDTy)) + if (!Context.hasSameType(New->getType(), PrevVDTy)) return diagnoseVarDeclTypeMismatch(*this, New, PrevVD); } } diff --git a/clang/test/SemaTemplate/array-redeclaration.cpp b/clang/test/SemaTemplate/array-redeclaration.cpp index 4edee701cfc4..af0a2770291c 100644 --- a/clang/test/SemaTemplate/array-redeclaration.cpp +++ b/clang/test/SemaTemplate/array-redeclaration.cpp @@ -31,3 +31,9 @@ void foo3() { void foo4() { foo3<5>(); } + +namespace NS { + int f() { extern int arr[3]; { extern int arr[]; } return 0; } + template void g() { extern int arr[3]; extern T arr; } + template void g(); +}