llvm-project/llvm
Mehdi Amini fec2158292 [ThinLTO] Fix crash when importing an opaque type
It seems that because ThinLTO does not import the full module,
some invariant of the type mapper are broken.

In Monolithic LTO, we import every globals: when calling
IRLinker::copyFunctionProto() on @foo(), we end-up calling
TypeMapTy::get(FTy) on the type of @foo(), which will map
%0 and record the destination as opaque.

ThinLTO skips this because @foo is not imported and goes directly
to the next stage.

Next we call computeTypeMapping() that map the types for each
globals, and ends up checking for type isomorphism, and may add
type mapping. However it doesn't record if there was an opaque
destination type that was resolved.

Instead of lazily "discovering" opaque type in the destination
module on the go, we change the TypeFinder to eagerly record all
types and not only the named ones.

Differential Revision: https://reviews.llvm.org/D26840

llvm-svn: 287453
2016-11-19 18:44:16 +00:00
..
bindings Fix go binding to adapt the new attribute API 2016-11-18 10:11:02 +00:00
cmake [CMake] Apply sandbox profile to target not directory 2016-11-19 01:32:09 +00:00
docs Timer: Track name and description. 2016-11-18 19:43:18 +00:00
examples [Examples] Fix some Clang-tidy modernize-use-default and Include What You Use warnings; other minor fixes. 2016-11-18 21:57:58 +00:00
include Change setDiagnosticsOutputFile to take a unique_ptr from a raw pointer (NFC) 2016-11-19 18:19:41 +00:00
lib [ThinLTO] Fix crash when importing an opaque type 2016-11-19 18:44:16 +00:00
projects [CMake] Correct configuration order of the sub-projects based on ther dependancies 2016-10-09 20:38:29 +00:00
resources
runtimes [CMake] Make the runtimes directory work with bootstrap builds 2016-10-19 21:50:25 +00:00
test [ThinLTO] Fix crash when importing an opaque type 2016-11-19 18:44:16 +00:00
tools Change setDiagnosticsOutputFile to take a unique_ptr from a raw pointer (NFC) 2016-11-19 18:19:41 +00:00
unittests Timer: Track name and description. 2016-11-18 19:43:18 +00:00
utils Try again to fix unused variable warning on lld-x86_64-darwin13 after r287439. 2016-11-19 14:47:41 +00:00
.arcconfig
.clang-format
.clang-tidy
.gitignore
CMakeLists.txt Add an option to disable libedit 2016-11-18 01:25:49 +00:00
CODE_OWNERS.TXT CODE_OWNERS: Take ownership of the X86 backend. 2016-11-12 05:16:06 +00:00
CREDITS.TXT Give SLP vectorizer credit where it's due. 2016-11-14 19:01:59 +00:00
LICENSE.TXT
LLVMBuild.txt
README.txt Test commit, deleted empty line at the end of README.txt 2016-11-07 18:31:21 +00:00
RELEASE_TESTERS.TXT
configure
llvm.spec.in

README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for LLVM,
a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you are writing a package for LLVM, see docs/Packaging.rst for our
suggestions.