Passed argument is disappeared in Release Configuration build(LLVM)

I have a trouble about the different behavior with 'Debug' and 'Release' Build Configuration.

In my application, there is a implementation like below.
In 'Release' build, the argument is disappeared(as null) in 'functionB'. I can't understand the reason.


- (void)functionA
{
     ...
     Arg1* arg1 = nil;
     arg1 = [[Arg1 alloc] init];
     arg1.porperty1 = a;
     arg1.property2 = b;
     arg1.property3 = c;
     ... 
     [ObjX functionB: ... :(Arg1*)arg1, ...];
     ...
     arg1 release];
}

- (void)functionB: ... :(Arg1*)aArg1, ...
{
     NSLog(@"aArg1.propperty1=%@, aArg1.property1);
     NSLog(@"aArg1.propperty2=%@, aArg1.property2);
     NSLog(@"aArg1.propperty3=%@, aArg1.property3);
     // -> In Debug Build, the output is "a", b" and "c".

     // -> But in Release Build the output is (null) (null) (null)
}


In 'Debug' build, I can get the correct value of the argument("a", "b" and "c").

I tried changing 'Optimization Level' of LLVM(Compiler) for 'Release' build, from 'Fastest, Smallest [-Os]' to 'None [-O0]'(same as 'Debug' build).

The result is correct, I could get expected value from the argument("a", "b" and "c")


Please tell me if you know, is this a failure in my code ? or is this a spec or bug of LLVM(Compiler) ?

Thank you.

Passed argument is disappeared in Release Configuration build(LLVM)
 
 
Q