Commit d6e47a40 authored by Vedant Kumar's avatar Vedant Kumar
Browse files

[lldb/TypeSystemClang] Supply trivial TypeSourceInfo to NonTypeTemplateParmDecl::Create

This fixes a UBSan error seen while debugging clang:

Member call on null pointer of type 'clang::TypeSourceInfo'

rdar://58783517

Differential Revision: https://reviews.llvm.org/D73808
parent 34d9f939
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -1277,11 +1277,12 @@ static TemplateParameterList *CreateTemplateParameterList(
    if (name && name[0])
      identifier_info = &ast.Idents.get(name);
    if (IsValueParam(template_param_infos.args[i])) {
      QualType template_param_type =
          template_param_infos.args[i].getIntegralType();
      template_param_decls.push_back(NonTypeTemplateParmDecl::Create(
          ast, decl_context, SourceLocation(), SourceLocation(), depth, i,
          identifier_info, template_param_infos.args[i].getIntegralType(),
          parameter_pack, nullptr));

          identifier_info, template_param_type, parameter_pack,
          ast.getTrivialTypeSourceInfo(template_param_type)));
    } else {
      template_param_decls.push_back(TemplateTypeParmDecl::Create(
          ast, decl_context, SourceLocation(), SourceLocation(), depth, i,
+10 −2
Original line number Diff line number Diff line
@@ -34,6 +34,11 @@ template <> struct D<int, int, bool> : D<int, int> {
  bool isIntBool() { return true; }
};

template<int Size> struct array {
  int Arr[Size];
  array() {}
};

int main (int argc, char const *argv[])
{
    C<int,16,32> myC;
@@ -53,12 +58,15 @@ int main (int argc, char const *argv[])
    D<int,int> myLesserD;
    myD.member = 64;
    (void)D<int,int,bool>().isIntBool();
    (void)D<int,int>().isIntBool();
    return myD.member != 64;	//% self.expect("expression -- myD", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["64"])
    (void)D<int,int>().isIntBool(); //% self.expect("expression -- myD", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["64"])
                                //% self.expect("expression -- myLesserD.isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["false"])
                                //% self.expect("expression -- myD.isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["true"])

                                // See comment above.
                                //#% self.expect("expression -- D<int, int>().isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["false"])
                                //#% self.expect("expression -- D<int, int, bool>().isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["true"])

    array<3> myArray; //% self.expect("expression -- myArray", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["Arr"])

    return 1;
}