/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010.  */
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */

/* Test warnings when parsing syntax errors in @throw.  */

#include <objc/objc.h>

void test (id object)
{
  @throw object;   /* Ok */
  @throw;          /* { dg-error ".@throw. .rethrow. used outside of a @catch block" } */
  @throw (object); /* Ok.  */
  @throw (id)0     /* { dg-error "expected" } */
}

void test2 (id object)
{
  @throw object);  /* { dg-error "expected" } */
  @throw (...);    /* { dg-error "expected" } */
  @throw ();       /* { dg-error "expected" } */
  @throw           
}                  /* { dg-error "expected" } */

void test3 (id object1, id object2)
{
  /* This is apparently valid.  */
  @throw object1, object2; /* Ok.  */
}
