http://llvm.org/bugs/show_bug.cgi?id=16835

            Bug ID: 16835
           Summary: [-cxx-abi microsoft] Mangle
                    TemplateArgument::Declaration correctly for member
                    pointers and references
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: LLVM Codegen
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected]
    Classification: Unclassified

Member pointers currently show up as FieldDecls which, as far as we know,
aren't mangled.

Instead, the proper way to mangle these when they show up as template arguments
is to turn them into their field offset in byte units and encode that as a
literal.

Incidentally, we also failed to properly mangle declarations that are template
parameters.  We would mangle them the same as non-type, non-reference
declarations. Fun-fact: undname cannot handle these!

struct record {
  int first;
  int second;
};
template <const record &>
struct type1 {
};
extern const record inst;
type1<inst> x;

template <int record::*>
struct type2 {
};
type2<&record::first> memptr1;
type2<&record::second> memptr2;

Should be mangled as:
?memptr1@@3U?$type2@$0A@@@A
?memptr2@@3U?$type2@$03@@A
?x@@3U?$type1@$E?inst@@3Urecord@@B@@A

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to