[PATCH] D62381: Use SymbolTable::insert() to implement --trace.

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon May 27 18:48:26 PDT 2019


MaskRay added inline comments.


================
Comment at: lld/ELF/SymbolTable.h:38
 
-  ArrayRef<Symbol *> getSymbols() const { return SymVector; }
+  void forEachSymbol(std::function<void(Symbol *)> Fn) {
+    for (Symbol *Sym : SymVector)
----------------
MaskRay wrote:
> grimar wrote:
> > ruiu wrote:
> > > grimar wrote:
> > > > `llvm::function_ref` should probably be a bit better, btw.
> > > I didn't take a look at the assembly, but isn't this something that a compiler can optimize and erases std::function? Since this is an inline function, a compiler knows exactly how a given lambda is used.
> > I do not know the answer.
> `function_ref` should be better, but I don't know if compilers can optimize out the heap allocation used for the lambda.
> 
> I still want to understand how complicated the signature of `llvm::make_filter_range` is. Let me check

```
struct FilterOutPlaceholder {
  bool operator()(Symbol *S) const {
    return !S->isPlaceholder();
  }
};

static iterator_range<filter_iterator<std::vector<Symbol *>::iterator, FilterOutPlaceholder>> symbols() {
  return make_filter_range(Symtab->SymVector, FilterOutPlaceholder());
}
```

The benefit is that the backtrace will be simpler in a debugger.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62381/new/

https://reviews.llvm.org/D62381





More information about the llvm-commits mailing list