[MS] Don't statically initialize dllimport member function pointers
authorReid Kleckner <rnk@google.com>
Fri, 7 Jul 2017 22:04:29 +0000 (22:04 +0000)
committerReid Kleckner <rnk@google.com>
Fri, 7 Jul 2017 22:04:29 +0000 (22:04 +0000)
commitcd016d8dc6a2af13c0cd2aca964356f464e3a94f
treeee376b891bb342e830da03f9bfcbe741e786085a
parenta3f8c80a357bc5a314c45d6f5a28cca718460cc1
[MS] Don't statically initialize dllimport member function pointers

Summary:
r306137 made dllimport pointers to member functions non-constant. This
is correct because a load must be executed to resolve any dllimported
data. However, r306137 did not account for the use of dllimport member
function pointers used as template arguments.

This change re-lands r306137 with a template instantiation fix.

This fixes PR33570.

Reviewers: rnk, majnemer

Subscribers: cfe-commits

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

llvm-svn: 307446
clang/lib/AST/ExprConstant.cpp
clang/lib/Sema/SemaTemplate.cpp
clang/test/SemaCXX/dllimport-memptr.cpp [new file with mode: 0644]