summaryrefslogtreecommitdiff
path: root/lib/MC/MCSectionCOFF.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MC/MCSectionCOFF.cpp')
-rw-r--r--lib/MC/MCSectionCOFF.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/lib/MC/MCSectionCOFF.cpp b/lib/MC/MCSectionCOFF.cpp
index 72a7fc36a460..c861963eec8a 100644
--- a/lib/MC/MCSectionCOFF.cpp
+++ b/lib/MC/MCSectionCOFF.cpp
@@ -69,35 +69,40 @@ void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
OS << '"';
if (getCharacteristics() & COFF::IMAGE_SCN_LNK_COMDAT) {
- OS << ",";
+ if (COMDATSymbol)
+ OS << ",";
+ else
+ OS << "\n\t.linkonce\t";
switch (Selection) {
case COFF::IMAGE_COMDAT_SELECT_NODUPLICATES:
- OS << "one_only,";
+ OS << "one_only";
break;
case COFF::IMAGE_COMDAT_SELECT_ANY:
- OS << "discard,";
+ OS << "discard";
break;
case COFF::IMAGE_COMDAT_SELECT_SAME_SIZE:
- OS << "same_size,";
+ OS << "same_size";
break;
case COFF::IMAGE_COMDAT_SELECT_EXACT_MATCH:
- OS << "same_contents,";
+ OS << "same_contents";
break;
case COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE:
- OS << "associative,";
+ OS << "associative";
break;
case COFF::IMAGE_COMDAT_SELECT_LARGEST:
- OS << "largest,";
+ OS << "largest";
break;
case COFF::IMAGE_COMDAT_SELECT_NEWEST:
- OS << "newest,";
+ OS << "newest";
break;
default:
assert(false && "unsupported COFF selection type");
break;
}
- assert(COMDATSymbol);
- COMDATSymbol->print(OS, &MAI);
+ if (COMDATSymbol) {
+ OS << ",";
+ COMDATSymbol->print(OS, &MAI);
+ }
}
OS << '\n';
}