@@ -38,12 +38,12 @@ class COFFAsmParser : public MCAsmParserExtension {
3838 bool parseSectionSwitch (StringRef Section, unsigned Characteristics);
3939
4040 bool parseSectionSwitch (StringRef Section, unsigned Characteristics,
41- StringRef COMDATSymName, COFF::COMDATType Type);
41+ StringRef COMDATSymName, COFF::COMDATType Type,
42+ unsigned UniqueID);
4243
4344 bool parseSectionName (StringRef &SectionName);
4445 bool parseSectionFlags (StringRef SectionName, StringRef FlagsString,
4546 unsigned *Flags);
46-
4747 void Initialize (MCAsmParser &Parser) override {
4848 // Call the base implementation.
4949 MCAsmParserExtension::Initialize (Parser);
@@ -315,19 +315,21 @@ bool COFFAsmParser::parseDirectiveCGProfile(StringRef S, SMLoc Loc) {
315315
316316bool COFFAsmParser::parseSectionSwitch (StringRef Section,
317317 unsigned Characteristics) {
318- return parseSectionSwitch (Section, Characteristics, " " , (COFF::COMDATType)0 );
318+ return parseSectionSwitch (Section, Characteristics, " " , (COFF::COMDATType)0 ,
319+ MCSection::NonUniqueID);
319320}
320321
321322bool COFFAsmParser::parseSectionSwitch (StringRef Section,
322323 unsigned Characteristics,
323324 StringRef COMDATSymName,
324- COFF::COMDATType Type) {
325+ COFF::COMDATType Type,
326+ unsigned UniqueID) {
325327 if (getLexer ().isNot (AsmToken::EndOfStatement))
326328 return TokError (" unexpected token in section switching directive" );
327329 Lex ();
328330
329331 getStreamer ().switchSection (getContext ().getCOFFSection (
330- Section, Characteristics, COMDATSymName, Type));
332+ Section, Characteristics, COMDATSymName, Type, UniqueID ));
331333
332334 return false ;
333335}
@@ -386,7 +388,8 @@ bool COFFAsmParser::parseSectionArguments(StringRef, SMLoc) {
386388
387389 COFF::COMDATType Type = (COFF::COMDATType)0 ;
388390 StringRef COMDATSymName;
389- if (getLexer ().is (AsmToken::Comma)) {
391+ if (getLexer ().is (AsmToken::Comma) &&
392+ getLexer ().peekTok ().getString () != " unique" ) {
390393 Type = COFF::IMAGE_COMDAT_SELECT_ANY;
391394 Lex ();
392395
@@ -407,6 +410,10 @@ bool COFFAsmParser::parseSectionArguments(StringRef, SMLoc) {
407410 return TokError (" expected identifier in directive" );
408411 }
409412
413+ int64_t UniqueID = MCSection::NonUniqueID;
414+ if (maybeParseUniqueID (UniqueID))
415+ return true ;
416+
410417 if (getLexer ().isNot (AsmToken::EndOfStatement))
411418 return TokError (" unexpected token in directive" );
412419
@@ -415,7 +422,7 @@ bool COFFAsmParser::parseSectionArguments(StringRef, SMLoc) {
415422 if (T.getArch () == Triple::arm || T.getArch () == Triple::thumb)
416423 Flags |= COFF::IMAGE_SCN_MEM_16BIT;
417424 }
418- parseSectionSwitch (SectionName, Flags, COMDATSymName, Type);
425+ parseSectionSwitch (SectionName, Flags, COMDATSymName, Type, UniqueID );
419426 return false ;
420427}
421428
0 commit comments