title: Stack corrupted with @autoreleasepool (ARC, compiled with llvm 3.0, Fastest, Smallest [-Os])
body: <p>A small program which loads image and logs its size. It is compiled with ARC support, llvm 3.0. I run it on iPod 4.2 and get some funny numbers... The program is compiled in "Release" mode with "-Os" (default optimization for "Release" in xcode). This whole thing does NOT happen in Simulator. It looks to me that @autoreleasepool in combination with a loop corrupts stack... Note, that I had to isolate the problem for this post with this simple example.</p>
  
  <pre><code>---------&gt;
  
  int main(int argc, char *argv[])
  {        
      @autoreleasepool
      {
          return UIApplicationMain(argc, argv, nil,
                                   @"AppDelegate");
      }    
  }
  
  @interface AppDelegate : UIWindow &lt;UIApplicationDelegate&gt;
  @end
  
  @implementation AppDelegate
  
  -(void)loadImageAndLogValues
  {
          // image from bundle 256x26
      UIImage *image = [UIImage imageNamed:@"Image.png"];
  
      for (int i = 0; i &lt; 1; i++)
      {
        NSLog(@"size=%@", NSStringFromCGSize(image.size));
        NSLog(@"w=%f", image.size.width);
        NSLog(@"h=%f", image.size.height);
        NSLog(@"------------------------");
      }
  }
  
  -(BOOL)application:(UIApplication*)application
  didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
  {
      self.frame = [UIScreen mainScreen].bounds;
      self.backgroundColor = [UIColor blueColor];
      [self makeKeyAndVisible];
  
      [self loadImageAndLogValues];
  
      UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
          initWithTarget:self 
                  action:@selector(loadImageAndLogValues)];
      [self addGestureRecognizer:tap];
  
      return YES;
  }
  
  @end
  
  &lt;------------------
  </code></pre>
  
  <p>And this is the output after I tap the screen once ("h" is WRONG when logged after tapping! The height of the image is 26...):</p>
  
  <pre><code>2011-10-21 01:54:48.677 Tmp[2522:307] size={256, 26}
  2011-10-21 01:54:48.696 Tmp[2522:307] w=256.000000
  2011-10-21 01:54:48.705 Tmp[2522:307] h=26.000000
  2011-10-21 01:54:48.715 Tmp[2522:307] ------------------------
  2011-10-21 01:54:50.576 Tmp[2522:307] size={256, 26}
  2011-10-21 01:54:50.582 Tmp[2522:307] w=256.000000
  2011-10-21 01:54:50.589 Tmp[2522:307] h=256.000000
  2011-10-21 01:54:50.595 Tmp[2522:307] ------------------------
  </code></pre>
  
  <p>Now, I remove @autoreleasepool from main():</p>
  
  <pre><code>int main(int argc, char *argv[])
  {        
          //@autoreleasepool
          //{
          return UIApplicationMain(argc, argv, nil,
                                   @"AppDelegate");
          //}    
  }
  </code></pre>
  
  <p>Run the program and tap. Still wrong value for "h", but when calling "loadImageAndLogValues" directly from "application:didFinishLaunchingWithOptions:"...</p>
  
  <pre><code>2011-10-21 02:02:08.222 Tmp[2544:307] size={256, 26}
  2011-10-21 02:02:08.240 Tmp[2544:307] w=256.000000
  2011-10-21 02:02:08.250 Tmp[2544:307] h=256.000000
  2011-10-21 02:02:08.259 Tmp[2544:307] ------------------------
  2011-10-21 02:04:59.097 Tmp[2544:307] size={256, 26}
  2011-10-21 02:04:59.103 Tmp[2544:307] w=256.000000
  2011-10-21 02:04:59.109 Tmp[2544:307] h=26.000000
  2011-10-21 02:04:59.115 Tmp[2544:307] ------------------------
  </code></pre>
  
  <p>So?... ARC + llvm 3.0 + -Os + @autoreleasepool + for(;;) + image.size.width/height is not working for me :) Please help! Thank you!</p>