diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-07-08 01:18:33 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-07-08 01:18:33 +0000 |
commit | 5f21d2f69ab3cf891546f9f8eb13f5efa8653329 (patch) | |
tree | 84c070b3f5d372159798740a4c97ad35880328e6 /clang/lib/Sema/SemaDecl.cpp | |
parent | 2a7deb64c0fe77947bed52fc7044d2b1c0b4ab5b (diff) | |
download | bcm5719-llvm-5f21d2f69ab3cf891546f9f8eb13f5efa8653329.tar.gz bcm5719-llvm-5f21d2f69ab3cf891546f9f8eb13f5efa8653329.zip |
Implemented memmove_collectable API for Next runtime
when struct variables with GC'able members are copied into.
Will provide a test case later.
llvm-svn: 74984
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 290ab5d708f..1a8cec11b72 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -4238,6 +4238,8 @@ void Sema::ActOnFields(Scope* S, } } } + if (Record && FDTTy->getDecl()->hasObjectMember()) + Record->setHasObjectMember(true); } else if (FDTy->isObjCInterfaceType()) { /// A field cannot be an Objective-c object Diag(FD->getLocation(), diag::err_statically_allocated_object); @@ -4245,6 +4247,12 @@ void Sema::ActOnFields(Scope* S, EnclosingDecl->setInvalidDecl(); continue; } + else if (getLangOptions().ObjC1 && + getLangOptions().getGCMode() != LangOptions::NonGC && + Record && + (Context.isObjCObjectPointerType(FD->getType()) || + FD->getType().isObjCGCStrong())) + Record->setHasObjectMember(true); // Keep track of the number of named members. if (FD->getIdentifier()) ++NumNamedMembers; |