]> granicus.if.org Git - clang/commit
Don't emit implicit template instantiations eagerly (PR21718)
authorHans Wennborg <hans@hanshq.net>
Sat, 10 Jan 2015 01:19:48 +0000 (01:19 +0000)
committerHans Wennborg <hans@hanshq.net>
Sat, 10 Jan 2015 01:19:48 +0000 (01:19 +0000)
commitafe88a16c63ece9ce3715c3acbbabd83a488921f
treec8274af5e61df2facf88ee8a955235d4f9b65fc8
parent9017269b38fe5d47f2e27633e94f682a045e65b3
Don't emit implicit template instantiations eagerly (PR21718)

Their linkage can change if they are later explicitly instantiated. We would
previously emit such functions eagerly (as opposed to lazily on first use) if
they have a 'dllexport' or 'used' attribute, and fail an assert when hitting the
explicit instantiation.

This is achieved by replacing the old CodeGenModule::MayDeferGeneration() method
with two new ones: MustBeEmitted() and MayBeEmittedEagerly().

Differential Revision: http://reviews.llvm.org/D6674

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225570 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CodeGenModule.cpp
lib/CodeGen/CodeGenModule.h
test/CodeGenCXX/dllexport.cpp
test/CodeGenCXX/explicit-instantiation.cpp