llvm-6502/test
Duncan P. N. Exon Smith 387a89bb36 Reapply "Linker: Drop function pointers for overridden subprograms"
This reverts commit r233254, effectively reapplying r233164 (and its
successors), with an additional testcase for when subprograms match
exactly.  This fixes PR22792 (again).

I'm using the same approach, but I've moved up the call to
`stripReplacedSubprograms()`.  The function pointers need to be dropped
before mapping any metadata from the source module, or else this can
drop the function from new subprograms that have merged (via Metadata
uniquing) with the old ones.  Dropping the pointers first prevents them
from merging.

**** The original commit message follows. ****

Linker: Drop function pointers for overridden subprograms

Instead of dropping subprograms that have been overridden, just set
their function pointers to `nullptr`.  This is a minor adjustment to the
stop-gap fix for PR21910 committed in r224487, and fixes the crasher
from PR22792.

The problem that r224487 put a band-aid on: how do we find the canonical
subprogram for a `Function`?  Since the backend currently relies on
`DebugInfoFinder` (which does a naive in-order traversal of compile
units and picks the first subprogram) for this, r224487 tried dropping
non-canonical subprograms.

Dropping subprograms fails because the backend *also* builds up a map
from subprogram to compile unit (`DwarfDebug::SPMap`) based on the
subprogram lists.  A missing subprogram causes segfaults later when an
inlined reference (such as in this testcase) is created.

Instead, just drop the `Function` pointer to `nullptr`, which nicely
mirrors what happens when an already-inlined `Function` is optimized
out.  We can't really be sure that it's the same definition anyway, as
the testcase demonstrates.

This still isn't completely satisfactory.  Two flaws at least that I can
think of:

  - I still haven't found a straightforward way to make this symmetric
    in the IR.  (Interestingly, the DWARF output is already symmetric,
    and I've tested for that to be sure we don't regress.)
  - Using `DebugInfoFinder` to find the canonical subprogram for a
    function is kind of crazy.  We should just attach metadata to the
    function, like this:

        define weak i32 @foo(i32, i32) !dbg !MDSubprogram(...) {

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233302 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-26 18:35:30 +00:00
..
Analysis [SCEV] Revert bailout added in r75511. 2015-03-26 17:28:26 +00:00
Assembler Prevent CHECK-NOTs from matching file paths 2015-03-22 15:58:21 +00:00
Bindings
Bitcode Add testing for mismatched explicit type on a gep operator when loading from bitcode 2015-03-16 22:03:50 +00:00
BugPoint bugpoint: Verify input files 2015-03-26 05:03:10 +00:00
CodeGen [ARM] Add v8.1a "Rounding Double Multiply Add/Subtract" extension 2015-03-26 18:29:02 +00:00
DebugInfo Simplify missing-file-line.ll test. 2015-03-25 17:58:09 +00:00
ExecutionEngine Make exit-code test use same mechanism as existing one. 2015-03-25 14:35:40 +00:00
Feature Rewrite test/Feature/md_on_instruction.ll 2015-03-20 18:34:53 +00:00
FileCheck
Instrumentation [sanitizer] experimental tracing for cmp instructions 2015-03-21 01:29:36 +00:00
Integer [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
JitListener
Linker Reapply "Linker: Drop function pointers for overridden subprograms" 2015-03-26 18:35:30 +00:00
LTO libLTO, llvm-lto, gold: Introduce flag for controlling optimization level. 2015-03-19 22:01:00 +00:00
MC [ARM] Add v8.1a "Rounding Double Multiply Add/Subtract" extension 2015-03-26 18:29:02 +00:00
Object [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
Other [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
SymbolRewriter
TableGen
tools llvm-cov: Require a subcommand when invoked as llvm-cov 2015-03-24 23:34:36 +00:00
Transforms InstCombine: fold (A << C) == (B << C) --> ((A^B) & (~0U >> C)) == 0 2015-03-26 17:12:06 +00:00
Unit
Verifier Verifier: Start recursing into !dbg attachments 2015-03-24 17:32:19 +00:00
YAMLParser
.clang-format
CMakeLists.txt test: Fix the dependencies for the check-llvm-* targets 2015-03-25 08:07:47 +00:00
lit.cfg Tell lit.cfg about more Windows triples. 2015-03-20 22:08:40 +00:00
lit.site.cfg.in test: Make a start on a test suite for libLTO. 2015-03-19 23:55:38 +00:00
Makefile test: Make a start on a test suite for libLTO. 2015-03-19 23:55:38 +00:00
Makefile.tests
TestRunner.sh