http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52349
--- Comment #2 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-02-23 10:31:59 UTC --- Type built in // Create a placeholder for a pointer type. Btype* Gcc_backend::placeholder_pointer_type(const std::string& name, Location location, bool) { tree ret = build_variant_type_copy(ptr_type_node); if (!name.empty()) { tree decl = build_decl(location.gcc_location(), TYPE_DECL, get_identifier_from_string(name), ret); TYPE_NAME(ret) = decl; } return this->make_type(ret); } that's bogus. Consider using build_distinct_type_copy instead. That fixes it for me.