Author: Aaron Ballman Date: 2021-10-18T14:01:55-04:00 New Revision: 5b949a649aff0406a878e8eb8d7d5efba0a55e4a
URL: https://github.com/llvm/llvm-project/commit/5b949a649aff0406a878e8eb8d7d5efba0a55e4a DIFF: https://github.com/llvm/llvm-project/commit/5b949a649aff0406a878e8eb8d7d5efba0a55e4a.diff LOG: Fix crash when diagnosing a CTAD failure in an array new expression This appears to be a think-o where the developer was trying to check for a null pointer but was actually checking (redundantly) whether the optional held a valid value or not. We now properly check the pointer for null. This fixes PR51547. Added: clang/test/SemaCXX/new-delete-array.cpp Modified: clang/lib/Sema/SemaExprCXX.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 6b091364c911f..0f3f50c8f6c6f 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -1967,10 +1967,10 @@ Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, if (Deduced && isa<DeducedTemplateSpecializationType>(Deduced)) { if (ArraySize) return ExprError( - Diag(ArraySize ? (*ArraySize)->getExprLoc() : TypeRange.getBegin(), + Diag(*ArraySize ? (*ArraySize)->getExprLoc() : TypeRange.getBegin(), diag::err_deduced_class_template_compound_type) << /*array*/ 2 - << (ArraySize ? (*ArraySize)->getSourceRange() : TypeRange)); + << (*ArraySize ? (*ArraySize)->getSourceRange() : TypeRange)); InitializedEntity Entity = InitializedEntity::InitializeNew(StartLoc, AllocType); diff --git a/clang/test/SemaCXX/new-delete-array.cpp b/clang/test/SemaCXX/new-delete-array.cpp new file mode 100644 index 0000000000000..fca1ec132acca --- /dev/null +++ b/clang/test/SemaCXX/new-delete-array.cpp @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++17 %s -verify=cxx17 +// RUN: %clang_cc1 -fsyntax-only -std=c++14 %s -verify=cxx14 + +namespace PR51547 { +template<class> struct A; // cxx14-note {{template is declared here}} +auto p = new A[]{}; // cxx14-error {{use of class template 'A' requires template arguments}} \ + cxx17-error {{cannot form array of deduced class template specialization type}} +} + _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits