16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
36bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint i __attribute__((flatten)); // expected-error {{'flatten' attribute only applies to functions}}
46bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
56bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid f1() __attribute__((flatten));
66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid f2() __attribute__((flatten(1))); // expected-error {{'flatten' attribute takes no arguments}}
76bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate <typename T>
96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid tf1() __attribute__((flatten));
106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint f3(int __attribute__((flatten)), int); // expected-error{{'flatten' attribute only applies to functions}}
126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct A {
146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  int f __attribute__((flatten));  // expected-error{{'flatten' attribute only applies to functions}}
156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  void mf1() __attribute__((flatten));
166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  static void mf2() __attribute__((flatten));
176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines};
186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint ci [[gnu::flatten]]; // expected-error {{'flatten' attribute only applies to functions}}
206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines[[gnu::flatten]] void cf1();
226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines[[gnu::flatten(1)]] void cf2(); // expected-error {{'flatten' attribute takes no arguments}}
236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate <typename T>
256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines[[gnu::flatten]]
266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid ctf1();
276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint cf3(int c[[gnu::flatten]], int); // expected-error{{'flatten' attribute only applies to functions}}
296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct CA {
316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  int f [[gnu::flatten]];  // expected-error{{'flatten' attribute only applies to functions}}
326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  [[gnu::flatten]] void mf1();
336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  [[gnu::flatten]] static void mf2();
346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines};
35