1// RUN: %clang_cc1 -fsyntax-only -verify %s 2extern "C" { 3 extern "C" void f(int); 4} 5 6extern "C++" { 7 extern "C++" int& g(int); 8 float& g(); 9} 10double& g(double); 11 12void test(int x, double d) { 13 f(x); 14 float &f1 = g(); 15 int& i1 = g(x); 16 double& d1 = g(d); 17} 18 19extern "C" int foo; 20extern "C" int foo; 21 22extern "C" const int bar; 23extern "C" int const bar; 24 25// <rdar://problem/6895431> 26extern "C" struct bar d; 27extern struct bar e; 28 29extern "C++" { 30 namespace N0 { 31 struct X0 { 32 int foo(int x) { return x; } 33 }; 34 } 35} 36 37// PR5430 38namespace pr5430 { 39 extern "C" void func(void); 40} 41using namespace pr5430; 42extern "C" void pr5430::func(void) { } 43 44// PR5404 45int f2(char *) 46{ 47 return 0; 48} 49 50extern "C" 51{ 52 int f2(int) 53 { 54 return f2((char *)0); 55 } 56} 57 58// PR6991 59extern "C" typedef int (*PutcFunc_t)(int); 60 61 62// PR7859 63extern "C" void pr7859_a(int) {} // expected-note {{previous definition}} 64extern "C" void pr7859_a(int) {} // expected-error {{redefinition}} 65 66extern "C" void pr7859_b() {} // expected-note {{previous definition}} 67extern "C" void pr7859_b(int) {} // expected-error {{conflicting}} 68 69extern "C" void pr7859_c(short) {} // expected-note {{previous definition}} 70extern "C" void pr7859_c(int) {} // expected-error {{conflicting}} 71 72// <rdar://problem/8318976> 73extern "C" { 74 struct s0 { 75 private: 76 s0(); 77 s0(const s0 &); 78 }; 79} 80 81//PR7754 82extern "C++" template <class T> int pr7754(T param); 83 84namespace N { 85 int value; 86} 87 88extern "C++" using N::value; 89 90// PR7076 91extern "C" const char *Version_string = "2.9"; 92 93namespace PR9162 { 94 extern "C" { 95 typedef struct _ArtsSink ArtsSink; 96 struct _ArtsSink { 97 int sink; 98 }; 99 } 100 int arts_sink_get_type() 101 { 102 return sizeof(ArtsSink); 103 } 104} 105