Re: Segfault with std.variant

2023-03-28 Thread Mitchell via Digitalmars-d-learn

Great! Thank you!


Re: Segfault with std.variant

2023-03-25 Thread Salih Dincer via Digitalmars-d-learn

On Saturday, 25 March 2023 at 07:42:28 UTC, Ali Çehreli wrote:


This looks like a bug to me.


Such a problem does not occur when you set all objects with the 
new operator.


```d
void main()
{
  import std.variant;

  auto var = Variant([
    "one": new Variant(1), "two": new Variant(2),
    "three": new Variant(3), "four": new Variant(4),
    "five": new Variant(5)
  ]);
  auto six = new Variant(6);
  var["six"] = new Variant(6);
  assert(var.length == 6);
}
```

SDB@79


Re: Segfault with std.variant

2023-03-25 Thread Ali Çehreli via Digitalmars-d-learn

On 3/24/23 23:07, Mitchell wrote:

>variant["four"] = Variant(4); // Segfault

Today I learned that VariantN forwards to associative array operations. 
Cool I guess. :)


> with a segfault. I'm using LDC2:

Same with dmd. It fails in the destructor of VariantN.

static if (!AllowedTypes.length || 
anySatisfy!(hasElaborateDestructor, AllowedTypes))

{
~this()
{
// Infer the safety of the provided types
static if (AllowedTypes.length)
{
if (0)
{
AllowedTypes var;
}
}
(() @trusted => fptr(OpID.destruct, , null))();
}
}

That @trusted lambda call segfaults.

This looks like a bug to me. Reported:

  https://issues.dlang.org/show_bug.cgi?id=23809

Ali