https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118095
--- Comment #5 from uecker at gcc dot gnu.org --- I am not sure Martin S still reads these emails. I also do not understand the code fully, but you could try something like this: /* Use the SSA_NAME_VAR that was determined above to see if it's declared nonstring. Otherwise drill down into the referenced DECL. */ if (var) decl = var; else { while (TREE_CODE (decl) == ARRAY_REF) decl = TREE_OPERAND (decl, 0); if (TREE_CODE (decl) == COMPONENT_REF) decl = TREE_OPERAND (decl, 1); else if (TREE_CODE (decl) == MEM_REF) return get_attr_nonstring_decl (TREE_OPERAND (decl, 0), ref); }