//  PR c++/8378
//  Ignore  dllimport of static members if marked inlined.
//  or if definition follows  declaration in dllimported class.

// { dg-do compile { target i?86-*-cygwin* i?86-*-mingw*} }
// { dg-options { -Wall -W } }

struct  __attribute__((dllimport)) Foo
 {
    static int static_int;
    static void static_func1();
    static void static_func2();
 };

void Foo::static_func1()	//  { dg-warning "defined" }
  {
  }

inline void Foo::static_func2()	//  { dg-warning "inline function" }
 {
 }

void testfoo()
{ 
  Foo::static_func1();
  Foo::static_func2();
}

// { dg-final { scan-assembler-not "__imp__" } }
