1 // RUN: %clang_cc1 -verify -fsyntax-only -triple x86_64-linux-gnu %s 2 3 int x __attribute__((section( 4 42))); // expected-error {{'section' attribute requires a string}} 5 6 7 // PR6007 8 void test() { 9 __attribute__((section("NEAR,x"))) int n1; // expected-error {{'section' attribute only applies to functions, global variables, Objective-C methods, and Objective-C properties}} 10 __attribute__((section("NEAR,x"))) static int n2; // ok. 11 } 12 13 // pr9356 14 void __attribute__((section("foo"))) test2(); // expected-note {{previous attribute is here}} 15 void __attribute__((section("bar"))) test2() {} // expected-warning {{section does not match previous declaration}} 16 17 enum __attribute__((section("NEAR,x"))) e { one }; // expected-error {{'section' attribute only applies to}} 18 19 extern int a; // expected-note {{previous declaration is here}} 20 int *b = &a; 21 extern int a __attribute__((section("foo,zed"))); // expected-warning {{section attribute is specified on redeclared variable}} 22 23 // Not a warning. 24 extern int c; 25 int c __attribute__((section("foo,zed"))); 26 27 // Also OK. 28 struct r_debug {}; 29 extern struct r_debug _r_debug; 30 struct r_debug _r_debug __attribute__((nocommon, section(".r_debug,bar"))); 31 32 namespace override { 33 struct A { 34 __attribute__((section("foo"))) virtual void f(){}; 35 }; 36 struct B : A { 37 void f() {} // ok 38 }; 39 struct C : A { 40 __attribute__((section("bar"))) void f(); // expected-note {{previous}} 41 }; 42 __attribute__((section("baz"))) // expected-warning {{section does not match}} 43 void C::f() {} 44 } 45 46 // Check for section type conflicts between global variables and function templates 47 template <typename> __attribute__((section("template_fn1"))) void template_fn1() {} // expected-note {{declared here}} 48 const int const_global_var __attribute__((section("template_fn1"))) = 42; // expected-error {{'const_global_var' causes a section type conflict with 'template_fn1'}} 49 int mut_global_var __attribute__((section("template_fn2"))) = 42; // expected-note {{declared here}} 50 template <typename> __attribute__((section("template_fn2"))) void template_fn2() {} // expected-error {{'template_fn2' causes a section type conflict with 'mut_global_var'}} 51