Canonical representation for empty lists in debug info metadata

While checking for serialization/deserialization without using pointee types, I’ve come across a few test cases that crash at head, without my debugging assertions for accessing pointee types.

One of them is test/Transforms/StripSymbols/2010-06-30-StripDebug.ll

Its retainedTypes metadata points to a metadata array of a single null element.

This crashes the dyn_cast (because it’s not a dyn_cast_or_null) Verifier.cpp:3785

Do you have a preferred/canonical representation intended in this case - an extant, but zero-length list, or no list at all? I tend to prefer no list at all, just because it simplifies reading of the debug info. Rather than seeing a “retainedTypes” property, following it to the metadata, only to find it’s zero-length?

While checking for serialization/deserialization without using pointee types, I've come across a few test cases that crash at head, without my debugging assertions for accessing pointee types.

One of them is test/Transforms/StripSymbols/2010-06-30-StripDebug.ll

Its retainedTypes metadata points to a metadata array of a single null element.

This crashes the dyn_cast (because it's not a dyn_cast_or_null) Verifier.cpp:3785

The Verifier should crash in any case, it should just fail.

Do you have a preferred/canonical representation intended in this case - an extant, but zero-length list, or no list at all? I tend to prefer no list at all, just because it simplifies reading of the debug info. Rather than seeing a "retainedTypes" property, following it to the metadata, only to find it's zero-length?

I agree: no list at all is better.

>
> While checking for serialization/deserialization without using pointee
types, I've come across a few test cases that crash at head, without my
debugging assertions for accessing pointee types.
>
> One of them is test/Transforms/StripSymbols/2010-06-30-StripDebug.ll
>
> Its retainedTypes metadata points to a metadata array of a single null
element.
>
> This crashes the dyn_cast (because it's not a dyn_cast_or_null)
Verifier.cpp:3785

The Verifier should crash in any case, it should just fail.

r245795

Do you have a preferred/canonical representation intended in this case -
an extant, but zero-length list, or no list at all? I tend to prefer no
list at all, just because it simplifies reading of the debug info. Rather
than seeing a "retainedTypes" property, following it to the metadata, only
to find it's zero-length?

I agree: no list at all is better.

r245796

Thanks!
- Dave