]> granicus.if.org Git - clang/commit
Make our marking of virtual members functions in a class be
authorDouglas Gregor <dgregor@apple.com>
Wed, 6 Jan 2010 04:44:19 +0000 (04:44 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 6 Jan 2010 04:44:19 +0000 (04:44 +0000)
commit159ef1ed9f024f73028aa3c9b27ae0717e43786c
treecc5d9f70e3b34f7a3d169586a5104b08fe013247
parent8a8da7d17d4eb281b61d08d603c7bb180d280d5a
Make our marking of virtual members functions in a class be
deterministic and work properly with templates. Once a class that
needs a vtable has been defined, we now do one if two things:

  - If the class has no key function, we place the class on a list of
    classes whose virtual functions will need to be "marked" at the
    end of the translation unit. The delay until the end of the
    translation unit is needed because we might see template
    specializations of these virtual functions.
  - If the class has a key function, we do nothing; when the key
    function is defined, the class will be placed on the
    aforementioned list.

At the end of the translation unit, we "mark" all of the virtual
functions of the classes on the list as used, possibly causing
template instantiation and other classes to be added to the
list. This gets LLVM's lib/Support/CommandLine.cpp compiling again.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92821 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Sema/Sema.h
lib/Sema/SemaDecl.cpp
lib/Sema/SemaDeclCXX.cpp
lib/Sema/SemaTemplateInstantiate.cpp
test/SemaCXX/implicit-virtual-member-functions.cpp
test/SemaCXX/virtual-member-functions-key-function.cpp
test/SemaTemplate/virtual-member-functions.cpp