[LLVMbugs] [Bug 16835] New: [-cxx-abi microsoft] Mangle TemplateArgument::Declaration correctly for member pointers and references

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu Aug 8 02:38:18 PDT 2013


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: unassignedclangbugs at nondot.org
          Reporter: david.majnemer at gmail.com
                CC: llvmbugs at cs.uiuc.edu
    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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20130808/d5d0dd34/attachment.html>


More information about the llvm-bugs mailing list