Browse Source

Fix a crash when processing templates with variable arguments (#1641)

update-llvm
Ahmed Elsayed 4 years ago committed by GitHub
parent
commit
caaf89d34a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      src/Generator/Passes/MatchParamNamesWithInstantiatedFromPass.cs
  2. 9
      tests/CSharp/CSharpTemplates.h

5
src/Generator/Passes/MatchParamNamesWithInstantiatedFromPass.cs

@ -1,4 +1,5 @@
using CppSharp.AST; using CppSharp.AST;
using System;
namespace CppSharp.Passes namespace CppSharp.Passes
{ {
@ -18,8 +19,8 @@ namespace CppSharp.Passes
(function.Namespace is ClassTemplateSpecialization specialization && (function.Namespace is ClassTemplateSpecialization specialization &&
specialization.SpecializationKind == TemplateSpecializationKind.ExplicitSpecialization)) specialization.SpecializationKind == TemplateSpecializationKind.ExplicitSpecialization))
return false; return false;
int parameters = Math.Min(function.Parameters.Count, function.InstantiatedFrom.Parameters.Count);
for (int i = 0; i < function.Parameters.Count; i++) for (int i = 0; i < parameters; i++)
function.InstantiatedFrom.Parameters[i].Name = function.Parameters[i].Name; function.InstantiatedFrom.Parameters[i].Name = function.Parameters[i].Name;
return true; return true;

9
tests/CSharp/CSharpTemplates.h

@ -842,3 +842,12 @@ private:
class SpecializationOfClassWithNonTypeTemplateArgument : public ClassWithNonTypeTemplateArgument<0> class SpecializationOfClassWithNonTypeTemplateArgument : public ClassWithNonTypeTemplateArgument<0>
{ }; { };
template<std::size_t N>
class DLL_API FloatArrayF
{
public:
template<typename... V, class = typename std::enable_if_t<sizeof...(V) == N>>
FloatArrayF(V... x) { }
};
const FloatArrayF<6> I6{ 1., 1., 1., 0., 0., 0. };

Loading…
Cancel
Save