Skip to content
  1. Jul 27, 2011
    • Douglas Gregor's avatar
    • Argyrios Kyrtzidis's avatar
    • Argyrios Kyrtzidis's avatar
      [arcmt] More automatic transformations and safety improvements; rdar://9615812 : · 93907473
      Argyrios Kyrtzidis authored
      - Replace calling -zone with 'nil'. -zone is obsolete in ARC.
      - Allow removing retain/release on a static global var.
      - Fix assertion hit when scanning for name references outside a NSAutoreleasePool scope.
      - Automatically add bridged casts for results of objc method calls and when calling CFRetain, for example:
      
      NSString *s;
      CFStringRef ref = [s string];   -> CFStringRef ref = (__bridge CFStringRef)([s string]);
      ref = s.string;                 -> ref = (__bridge CFStringRef)(s.string);
      ref = [NSString new];           -> ref = (__bridge_retained CFStringRef)([NSString new]);
      ref = [s newString];            -> ref = (__bridge_retained CFStringRef)([s newString]);
      ref = [[NSString alloc] init];  -> ref = (__bridge_retained CFStringRef)([[NSString alloc] init]);
      ref = [[s string] retain];      -> ref = (__bridge_retained CFStringRef)([s string]);
      ref = CFRetain(s);              -> ref = (__bridge_retained CFTypeRef)(s);
      ref = [s retain];               -> ref = (__bridge_retained CFStringRef)(s);
      
      - Emit migrator error when trying to cast to CF type the result of autorelease/release:
        for
      
      CFStringRef f3() {
        return (CFStringRef)[[[NSString alloc] init] autorelease];
      }
      
      emits:
      
      t.m:12:10: error: [rewriter] it is not safe to cast to 'CFStringRef' the result of 'autorelease' message; a __bridge cast may result in a pointer to a destroyed object and a __bridge_retained may leak the object
        return (CFStringRef)[[[NSString alloc] init] autorelease];
               ^            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      t.m:12:3: note: [rewriter] remove the cast and change return type of function to 'NSString *' to have the object automatically autoreleased
        return (CFStringRef)[[[NSString alloc] init] autorelease];
        ^
      
      - Before changing attributes to weak/unsafe_unretained, check if the backing ivar
        is set to a +1 object, in which case use 'strong' instead.
      
      llvm-svn: 136208
      93907473
    • John McCall's avatar
      Clean up the analysis of the collection operand to ObjC · 53848237
      John McCall authored
      for-in statements;  specifically, make sure to close over any
      temporaries or cleanups it might require.  In ARC, this has
      implications for the lifetime of the collection, so emit it
      with a retain and release it upon exit from the loop.
      
      rdar://problem/9817306
      
      llvm-svn: 136204
      53848237
    • Francois Pichet's avatar
      In Microsoft mode, if we are within a templated function and we can't resolve... · b23dc095
      Francois Pichet authored
      In Microsoft mode, if we are within a templated function and we can't resolve Identifier during BuildCXXNestedNameSpecifier, then extend the SS with Identifier. This will have  the effect of resolving Identifier during template instantiation.  The goal is to be able to resolve a function call whose nested-name-specifier is located inside a dependent base class.
      
      class C {
      public:
          static void foo2() {  }
      };
      
      template <class T> class A {
      public:
         typedef C D;
      };
      
      template <class T> class B : public A<T> {
      public:
        void foo() { D::foo2(); }
      };
      
      Note that this won't work if the NestedNameSpecifier refers to a type.
      This fixes 1 error when parsing the MSVC 2010 standard headers file with clang.
      
      llvm-svn: 136203
      b23dc095
    • Ted Kremenek's avatar
      clang_getCXTUResourceUsage: report memory used by HeaderSearch. · fbcce6fb
      Ted Kremenek authored
      This required converting the StringMaps to use a BumpPtrAllocator.  I measured the
      compile time and saw no observable regression.
      
      llvm-svn: 136190
      fbcce6fb
    • Ted Kremenek's avatar
    • Eli Friedman's avatar
    • Jeffrey Yasskin's avatar
      This patch implements as much of the narrowing conversion error specified by · a6667816
      Jeffrey Yasskin authored
      [dcl.init.list] as is possible without generalized initializer lists or full
      constant expression support, and adds a c++0x-compat warning in C++98 mode.
      
      The FixIt currently uses a typedef's basename without qualification, which is
      likely to be incorrect on some code.  If it's incorrect on too much code, we
      should write a function to get the string that refers to a type from a
      particular context.
      
      The warning is currently off by default. I'll fix LLVM and clang before turning
      it on.
      
      llvm-svn: 136181
      a6667816
    • Douglas Gregor's avatar
      Disable the optimization that skips emission of complete, non-virtual · 87717964
      Douglas Gregor authored
      destructors of abstract classes. It's undefined behavior to actually
      call the destructor (e.g., via delete), but the presence of code that
      calls this destructor doesn't make the program
      ill-formed. Fixes <rdar://problem/9819242>.
      
      llvm-svn: 136180
      87717964
    • Eli Friedman's avatar
      Diagnose trying to delete a pointer to an abstract class with a non-virtual destructor. PR10504. · 1260f59f
      Eli Friedman authored
      I'm not completely sure the standard allows us to reject this, but if it doesn't, it should. :)
      
      llvm-svn: 136172
      1260f59f
    • Eli Friedman's avatar
      A couple minor issues with Sema for delete: · ae4280f7
      Eli Friedman authored
      1. Attempting to delete an expression of incomplete class type should be an error, not a warning.
      
      2. If someone tries to delete a pointer to an incomplete class type, make sure we actually emit
      the delete expression after we warn.
      
      llvm-svn: 136161
      ae4280f7
  2. Jul 26, 2011
  3. Jul 25, 2011
Loading