]> granicus.if.org Git - clang/commitdiff
Reverse a partial fix patch for radar 7214820. It broke some code and
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 10 Feb 2010 00:32:12 +0000 (00:32 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 10 Feb 2010 00:32:12 +0000 (00:32 +0000)
I don't have time to refix it for now.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95733 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp
test/SemaObjC/gc-attr-block-ivar.m [deleted file]
test/SemaObjC/objc2-merge-gc-attribue-decl.m

index c9d85c84f964665a001695e23d0843ad6f20fcc1..7912a93421f193cb14dd8e8dbda98d2484726353 100644 (file)
@@ -4311,24 +4311,11 @@ QualType ASTContext::mergeFunctionTypes(QualType lhs, QualType rhs) {
   bool allRTypes = true;
 
   // Check return type
-  QualType LRES = lbase->getResultType();
-  QualType RRES = rbase->getResultType();
-  Qualifiers::GC GC_L = LRES.getObjCGCAttr();
-  Qualifiers::GC GC_R = RRES.getObjCGCAttr();
-  // __weak/__strong attribute on one function/block return type but
-  // not the other is OK.
-  if (GC_L != GC_R) {
-    if (GC_R == Qualifiers::GCNone)
-      RRES = getObjCGCQualType(RRES, GC_L);
-    else if (GC_L == Qualifiers::GCNone)
-      LRES = getObjCGCQualType(LRES, GC_R);
-  }
-  
-  QualType retType = mergeTypes(LRES, RRES);
+  QualType retType = mergeTypes(lbase->getResultType(), rbase->getResultType());
   if (retType.isNull()) return QualType();
-  if (getCanonicalType(retType) != getCanonicalType(LRES))
+  if (getCanonicalType(retType) != getCanonicalType(lbase->getResultType()))
     allLTypes = false;
-  if (getCanonicalType(retType) != getCanonicalType(RRES))
+  if (getCanonicalType(retType) != getCanonicalType(rbase->getResultType()))
     allRTypes = false;
   // FIXME: double check this
   bool NoReturn = lbase->getNoReturnAttr() || rbase->getNoReturnAttr();
diff --git a/test/SemaObjC/gc-attr-block-ivar.m b/test/SemaObjC/gc-attr-block-ivar.m
deleted file mode 100644 (file)
index c3e0033..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -fblocks -fobjc-gc %s
-
-@interface Intf  {
-@public
-    void (^block) (id);
-    __weak void (^weak_block) (id);
-    void (*fptr) (id);
-    __weak void (*weak_fptr) (id);
-}
-@end
-
-int main() {
-    Intf *observer;
-    return (observer->block != observer->weak_block ||
-            observer->fptr != observer->weak_fptr);
-}
-
index f8d5f0018d7c9ff09c90b58bdafb8fc6bd8d651d..673a7417e384c363efe1f06c9487b4f37b983543 100644 (file)
@@ -10,8 +10,8 @@ extern id p1;
 extern id CFRunLoopGetMain();
 extern __strong id CFRunLoopGetMain();
 
-extern __weak id WLoopGetMain(); 
-extern id WLoopGetMain();      
+extern __weak id WLoopGetMain(); // expected-note {{previous declaration is here}}
+extern id WLoopGetMain();      // expected-error {{conflicting types for 'WLoopGetMain'}}
 
 extern id p3;  // expected-note {{previous definition is here}}
 extern __weak id p3;   // expected-error {{redefinition of 'p3' with a different type}}