/* Ensure that typeof()-typed variables inside the @try { } block that
   "inherit" their EH-volatileness from other variables in the stack frame
   do not trigger "discards qualifiers from target pointer type" warnings.  */

/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
// { dg-additional-options "-Wno-objc-root-class" }

typedef volatile int IOSharedLockData;

@interface TestMyTests
- (void) testSpoon;
@end

extern void some_func (int *);

@implementation TestMyTests
- (void) testSpoon {
  int i = 5;

  do {
    @try {
      typeof(i) j = 6;
      some_func (&j);
    }
    @catch (id exc) {
      @throw;
    }
  } while(0);

  do {
    @try {
      typeof(i) j = 7;
      some_func (&j);
    }
    @catch (id exc) {
      @throw;
    }
  } while(0);

  do {
    @try {
      typeof(i) j = 8;
      some_func (&j);
    }
    @catch (id exc) {
      @throw;
    }
  } while(0);
      
}
@end
