[NFC][CLANG] Fix nullptr dereference issue in DeduceTemplateArgumentsByTypeMatch()
authorManna, Soumi <soumi.manna@intel.com>
Wed, 31 May 2023 01:58:44 +0000 (18:58 -0700)
committerManna, Soumi <soumi.manna@intel.com>
Wed, 31 May 2023 02:02:40 +0000 (19:02 -0700)
DeduceTemplateArgumentsByTypeMatch() returns null value which is dereferenced without checking since getAsIncompleteArrayType() returns nullptr and we are dereferencing null pointer value for S.Context->getAsIncompleteArrayType(P) when calling getElementType().

This patch adds an assert.

Reviewed By: erichkeane

Differential Revision: https://reviews.llvm.org/D151529

clang/lib/Sema/SemaTemplateDeduction.cpp

index db72b8b..27a8a59 100644 (file)
@@ -1703,10 +1703,12 @@ static Sema::TemplateDeductionResult DeduceTemplateArgumentsByTypeMatch(
       if (!IAA)
         return Sema::TDK_NonDeducedMismatch;
 
+      const auto *IAP = S.Context.getAsIncompleteArrayType(P);
+      assert(IAP && "Template parameter not of incomplete array type");
+
       return DeduceTemplateArgumentsByTypeMatch(
-          S, TemplateParams,
-          S.Context.getAsIncompleteArrayType(P)->getElementType(),
-          IAA->getElementType(), Info, Deduced, TDF & TDF_IgnoreQualifiers);
+          S, TemplateParams, IAP->getElementType(), IAA->getElementType(), Info,
+          Deduced, TDF & TDF_IgnoreQualifiers);
     }
 
     //     T [integer-constant]