]> granicus.if.org Git - clang/commit
Don't convert interface types (to structs) as part of CodeGenTypes.
authorDaniel Dunbar <daniel@zuster.org>
Wed, 22 Apr 2009 10:28:39 +0000 (10:28 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 22 Apr 2009 10:28:39 +0000 (10:28 +0000)
commit412f59b23fc502b199b9ca96c72ef5d5ad21d62b
tree0a359e672859bbb876eb4c96af40d1b8f61b6e8a
parent84ad77a8f83121713ea69d8002d1fd19565f87ab
Don't convert interface types (to structs) as part of CodeGenTypes.
 - This has pros and cons, but for now the pros seem to significantly
   outway the con.

The con is that we will always need to cast in the runtime
implementation to a struct type, if we wish to access an interface
directly.

The pros are:
 - Avoid the cost of generating types which are used. Most
   manipulation of Objective-C objects is done through messages, and
   only the implementation of a class will directly access
   memory. Previously, we would convert the type even if it only
   appear as a function parameter, for example.

 - We don't need to worry about incomplete types, and
   UpdateCompletedType for interfaces is gone.

 - It becomes easier to narrow the interface to the shadow struct for
   Objective-C interfaces (so it can be eliminated).

Currently the runtimes still use the CodeGenTypes machinery to
generate the LLVM structure they need via ConvertTagDecl, but this can
eventually be replaced.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69797 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGObjCMac.cpp
lib/CodeGen/CodeGenModule.cpp
lib/CodeGen/CodeGenTypes.cpp
lib/CodeGen/CodeGenTypes.h