// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s

int f() __attribute__((internal_linkage));

class A;
class __attribute__((internal_linkage)) A {
public:
  int x __attribute__((internal_linkage)); // expected-warning{{'internal_linkage' attribute only applies to variables, functions, and classes}}
  static int y __attribute__((internal_linkage));
  void f1() __attribute__((internal_linkage));
  void f2() __attribute__((internal_linkage)) {}
  static void f3() __attribute__((internal_linkage)) {}
  void f4(); // expected-note{{previous declaration is here}}
  static int zz; // expected-note{{previous declaration is here}}
  A() __attribute__((internal_linkage)) {}
  ~A() __attribute__((internal_linkage)) {}
  A& operator=(const A&) __attribute__((internal_linkage)) { return *this; }
  struct {
    int z  __attribute__((internal_linkage)); // expected-warning{{'internal_linkage' attribute only applies to}}
  };
};

__attribute__((internal_linkage)) void A::f4() {} // expected-error{{'internal_linkage' attribute does not appear on the first declaration}}

__attribute__((internal_linkage)) int A::zz; // expected-error{{'internal_linkage' attribute does not appear on the first declaration}}

namespace Z __attribute__((internal_linkage)) { // expected-warning{{'internal_linkage' attribute only applies to}}
}

__attribute__((internal_linkage("foo"))) int g() {} // expected-error{{'internal_linkage' attribute takes no arguments}}

[[clang::internal_linkage]] int h() {}

enum struct __attribute__((internal_linkage)) E { // expected-warning{{'internal_linkage' attribute only applies to}}
  a = 1,
  b = 2
};

int A::y;

void A::f1() {
}

void g(int a [[clang::internal_linkage]]) { // expected-warning{{'internal_linkage' attribute only applies to variables, functions and classes}}
  int x [[clang::internal_linkage]]; // expected-warning{{'internal_linkage' attribute on a non-static local variable is ignored}}
  static int y [[clang::internal_linkage]];
}
