diff options
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h index af465c006ed..d8208737663 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -485,6 +485,28 @@ public: virtual DwarfCompileUnit &getCU() = 0; + /// \brief Return whether this compilation unit has the + /// one-definition-rule (ODR). In C++ this allows the compiler to + /// perform type unique during LTO. + bool hasODR() const { + switch (getLanguage()) { + case dwarf::DW_LANG_C_plus_plus: + case dwarf::DW_LANG_C_plus_plus_03: + case dwarf::DW_LANG_C_plus_plus_11: + // For all we care, the C++ part of the language has the ODR and + // ObjC methods are not represented in a way that they could be + // confused with C++ member functions. + case dwarf::DW_LANG_ObjC_plus_plus: + return true; + default: + return false; + } + } + + /// \brief Unique C++ member function declarations based on their + /// context+mangled name. + DISubprogram getOdrUniqueSubprogram(DIScope Context, DISubprogram SP) const; + protected: /// getOrCreateStaticMemberDIE - Create new static data member DIE. DIE *getOrCreateStaticMemberDIE(DIDerivedType DT); |