/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010.  */
/* { dg-do compile } */
// { dg-additional-options "-Wno-objc-root-class" }

/* Test that a duplicated @implementation for the same class does not
   crash the compiler.  */

@interface Test
{
  Class isa;
}
- (int) test;
@end

@implementation Test
- (int) test
{
  return 4;
}
@end

/* The most likely cause is that the programmer meant this to be a
   category, so check what happens if we have some different methods
   in there.  */
@implementation Test /* { dg-error "reimplementation of class .Test." } */
- (int) test2
{
  return [self test];
}
@end
/* { dg-warning "incomplete implementation" "" { target *-*-* } .-1 } */
/* { dg-warning "not found" "" { target *-*-* } .-2 } */
