[lld] [lld][ELF] Demote symbols in discarded sections to Undefined. (PR #68777)
    Fangrui Song via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Sat Oct 14 14:42:24 PDT 2023
    
    
  
================
@@ -3062,6 +3062,31 @@ void LinkerDriver::link(opt::InputArgList &args) {
     script->addOrphanSections();
   }
 
+  // Explicitly demote symbols which didn't get placed. If we don't, any
+  // symbol in a discarded section will still be considered defined, even
+  // though it didn't end up in the output, and we get silently broken
+  // binaries.
+  if (script->seenDiscard) {
+    llvm::TimeTraceScope timeScope("Demote symbols in discarded sections");
+    parallelForEach(symtab.getSymbols(), [](Symbol *sym) {
+      if (Defined *d = dyn_cast<Defined>(sym))
----------------
MaskRay wrote:
This `if` use case requires `{}`. However, we can use an early return:
```
Defined *d = ...
if (!d)
  continue;
...
```
https://github.com/llvm/llvm-project/pull/68777
    
    
More information about the llvm-commits
mailing list