Clang types and LLVM types


I'm hunting a miscompilation in Boost.PropertyTree, and there's
something in the generated bitcode that I find suspect. Namely, I have
this function in the source:

    template<class Ptree>
    void read_json_internal(std::basic_istream<typename
Ptree::key_type::value_type> &stream,
                            Ptree &pt,
                            const std::string &filename)

And in the bitcode, it becomes:

define linkonce_odr void
%stream, %"class.boost::property_tree::basic_ptree"* %pt,
%"class.boost::spirit::classic::parser_id"* %filename) {

Note the 'filename' argument, whose type has changed to parser_id. Is
this a natural consequence of structural type matching, or is this
actually something to be worried about?


Looks like just structural type matching; when multiple structs have
the same LLVM type, the name used is chosen arbitrarily.