Skip to content

illegal iterator comparison in EnableBlockExpansion argument finder #19

Description

@ArseniyKorobenko

Итератор, возвращаемый FindKernelByName() может принадлежать одной из трёх разных таблиц, в связи с чем его сравнение с end() чужой таблицы нелегально и в моём случае бросает исключение.

компилятор: MSVC

Предлагаемое исправление:

template_rendering_host.cpp:1379

@@ -1376,13 +1376,12 @@ template_rendering_host.cpp kslicer::PrepareJsonForAllCPP(const MainClassInfo& a_classInfo, ...)
       const auto pFoundKernel   = a_classInfo.FindKernelByName(dsArgs.originKernelName);
...
       local["ArgNames"]   = std::vector<std::string>();
       local["IsServiceCall"] = dsArgs.isService;
       local["IsVirtual"]     = false;
-      if (pFoundKernel != a_classInfo.megakernelsByName.end())
-          local["EnableBlockExpansion"] = pFoundKernel->second.be.enabled;
+      local["EnableBlockExpansion"] = pFoundKernel->second.be.enabled;

       uint32_t realId = 0;
       for(size_t j=0;j<dsArgs.descriptorSetsInfo.size();j++)
       {
-        if(!internalKernel && !isServeceKernel && !a_classInfo.pShaderCC->IsISPC() && pFoundKernel != a_classInfo.megakernelsByName.end())
+        if(!internalKernel && !isServeceKernel && !a_classInfo.pShaderCC->IsISPC())
         {
           const bool ignoreArg = IgnoreArgForDS(j, dsArgs.descriptorSetsInfo, pFoundKernel->second.args, pFoundKernel->second.name, a_classInfo.IsRTV());
           if(ignoreArg && !isMegaKernel)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions