diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -118,14 +118,14 @@ !canMergeToProgbits(isec->type)) { // Changing the type of a (NOLOAD) section is fishy, but some projects // (e.g. https://github.com/ClangBuiltLinux/linux/issues/1597) - // traditionally rely on the behavior. Issue a warning to not break - // them. Other types get an error. - auto diagnose = type == SHT_NOBITS ? warn : errorOrWarn; - diagnose("section type mismatch for " + isec->name + "\n>>> " + - toString(isec) + ": " + - getELFSectionTypeName(config->emachine, isec->type) + - "\n>>> output section " + name + ": " + - getELFSectionTypeName(config->emachine, type)); + // traditionally rely on the behavior. Other types get an error. + if (type != SHT_NOBITS) { + errorOrWarn("section type mismatch for " + isec->name + "\n>>> " + + toString(isec) + ": " + + getELFSectionTypeName(config->emachine, isec->type) + + "\n>>> output section " + name + ": " + + getELFSectionTypeName(config->emachine, type)); + } } if (!typeIsSet) type = SHT_PROGBITS; diff --git a/lld/test/ELF/linkerscript/noload.s b/lld/test/ELF/linkerscript/noload.s --- a/lld/test/ELF/linkerscript/noload.s +++ b/lld/test/ELF/linkerscript/noload.s @@ -22,7 +22,7 @@ # RUN: ld.lld --script %t/lds %t.o %t/mismatch.o -o %t/out 2>&1 | FileCheck %s --check-prefix=WARN # RUN: llvm-readelf -S -l %t/out | FileCheck %s --check-prefix=CHECK2 -# WARN: warning: section type mismatch for .data_noload_a +# WARN-NOT: warning: section type mismatch for .data_noload_a # CHECK2: Name Type Address Off Size # CHECK2: .data_noload_a NOBITS 0000000000000000 [[OFF:[0-9a-f]+]] 001001