I changed the attribute handler to only return NULL_TREE in any case, but the result is still the same (using the same gcc core).
But you are still creating the types in the attribute function right? If so, that is probably why you still have a problem.
You mentioned that this works for all types except array types. Instead of trying to figure out why array types don't work, perhaps you should figure out why other types do work, and then maybe you can understand why array types don't work.
Looking at this, I see that you have two array types, both with the same typename which points at the same type decl. It doesn't seem right for two different types to both claim to be the same typedef. That doesn't seem to be an issue though.
I tried grepping the sources, and I see this same code appears in the avr and ip2k ports. That gives me a way to try to reproduce the problem with FSF sources. Avr doesn't support DWARF2, and ip2k is being obsoleted because it is unmaintained. These probably aren't very good examples to copy from. Anyways, I tried building ip2k-elf, changing your testcase to use progmem instead of eeprom, and it compiles OK. Perhaps your problem is already fixed on mainline, or maybe you have some other changes in your tree that are causing problems. I suggest you try looking at why the ip2k port works when yours doesn't.
If you can produce an example that fails in the FSF tree, then I can try looking at this some more. Otherwise, it seems to be a bug in your port, and you will need to find the problem yourself.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com