summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/COFF/InputFiles.cpp12
-rw-r--r--lld/test/COFF/associative-comdat-order.test18
2 files changed, 16 insertions, 14 deletions
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index 6d4cb4e1c49..74d4a26cf1b 100644
--- a/lld/COFF/InputFiles.cpp
+++ b/lld/COFF/InputFiles.cpp
@@ -250,16 +250,12 @@ void ObjFile::readAssociativeDefinition(COFFSymbolRef Sym,
// Check whether the parent is prevailing. If it is, so are we, and we read
// the section; otherwise mark it as discarded.
if (Parent) {
- if (Parent->Selection == IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
- Diag();
- return;
- }
-
SectionChunk *C = readSection(SectionNumber, Def, "");
- C->Selection = IMAGE_COMDAT_SELECT_ASSOCIATIVE;
SparseChunks[SectionNumber] = C;
- if (SparseChunks[SectionNumber])
- Parent->addAssociative(SparseChunks[SectionNumber]);
+ if (C) {
+ C->Selection = IMAGE_COMDAT_SELECT_ASSOCIATIVE;
+ Parent->addAssociative(C);
+ }
} else {
SparseChunks[SectionNumber] = nullptr;
}
diff --git a/lld/test/COFF/associative-comdat-order.test b/lld/test/COFF/associative-comdat-order.test
index dc58c2c1024..c7756f348e0 100644
--- a/lld/test/COFF/associative-comdat-order.test
+++ b/lld/test/COFF/associative-comdat-order.test
@@ -6,11 +6,17 @@
# FORWARD-NOT: lld-link: error:
# Tests that an associative comdat being associated with another
-# associated comdat earlier in the file produces an error.
+# associated comdat earlier in the file works.
# RUN: sed -e s/ASSOC1/3/ -e s/ASSOC2/1/ %s | yaml2obj > %t.obj
-# RUN: not lld-link /include:symbol /dll /noentry /nodefaultlib %t.obj /out:%t.exe 2>&1 | FileCheck --check-prefix=BACKWARD %s
-# BACKWARD: lld-link: error: {{.*}}: associative comdat .text$ac2 (sec 2) has invalid reference to section .text$ac1 (sec 1)
-# BACKWARD-NOT: lld-link: error:
+
+# RUN: lld-link /include:symbol /dll /noentry /nodefaultlib %t.obj /out:%t.exe
+# RUN: llvm-objdump -s %t.exe | FileCheck --check-prefix=BACKWARD %s
+# BACKWARD: Contents of section .text:
+# BACKWARD: 180001000 01000000 02000000 03000000 ............
+
+# RUN: lld-link /dll /noentry /nodefaultlib %t.obj /out:%t.exe
+# RUN: llvm-objdump -s %t.exe | FileCheck --check-prefix=BACKWARDDROP %s
+# BACKWARDDROP-NOT: Contents of section .text:
--- !COFF
header:
@@ -24,11 +30,11 @@ sections:
- Name: '.text$ac2'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
Alignment: 1
- SectionData: '01000000'
+ SectionData: '02000000'
- Name: '.text$nm'
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
Alignment: 1
- SectionData: '01000000'
+ SectionData: '03000000'
symbols:
- Name: '.text$ac1'
Value: 0
OpenPOWER on IntegriCloud