brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 4be4b3f Raw
174 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2// RUN: %clang_cc1 -fsyntax-only -verify -Wretained-language-linkage -DW_RETAINED_LANGUAGE_LINKAGE  %s3extern "C" {4  extern "C" void f(int);5}6 7extern "C++" {8  extern "C++" int& g(int);9  float& g();10}11double& g(double);12 13void test(int x, double d) {14  f(x);15  float &f1 = g();16  int& i1 = g(x);17  double& d1 = g(d);18}19 20extern "C" int foo;21extern "C" int foo;22 23extern "C" const int bar;24extern "C" int const bar;25 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// PR543038namespace pr5430 {39  extern "C" void func(void);40}41using namespace pr5430;42extern "C" void pr5430::func(void) { }43 44// PR540545int f2(char *)46{47        return 0;48}49 50extern "C"51{52    int f2(int)53    {54        return f2((char *)0);55    }56}57 58namespace PR5405 {59  int f2b(char *) {60    return 0;61  }62 63  extern "C" {64    int f2b(int) {65      return f2b((char *)0); // ok66    }67  }68}69 70// PR699171extern "C" typedef int (*PutcFunc_t)(int);72 73 74// PR785975extern "C" void pr7859_a(int) {} // expected-note {{previous definition}}76extern "C" void pr7859_a(int) {} // expected-error {{redefinition}}77 78extern "C" void pr7859_b() {} // expected-note {{previous definition}}79extern "C" void pr7859_b(int) {} // expected-error {{conflicting}}80 81extern "C" void pr7859_c(short) {} // expected-note {{previous definition}}82extern "C" void pr7859_c(int) {} // expected-error {{conflicting}}83 84extern "C" {85  struct s0 {86  private:87    s0();88    s0(const s0 &);89  };90}91 92//PR775493extern "C++" template <class T> int pr7754(T param);94 95namespace N {96  int value;97}98 99extern "C++" using N::value;100 101// PR7076102extern "C" const char *Version_string = "2.9";103 104extern "C" {105  extern const char *Version_string2 = "2.9";106}107 108namespace PR9162 {109  extern "C" {110    typedef struct _ArtsSink ArtsSink;111    struct _ArtsSink {112      int sink;113    };114  }115  int arts_sink_get_type()116  {117    return sizeof(ArtsSink);118  }119}120 121namespace pr14958 {122  namespace js { extern int ObjectClass; }123  extern "C" {124    namespace js {}125  }126  int js::ObjectClass;127}128 129extern "C" void PR16167; // expected-error {{variable has incomplete type 'void'}}130extern void PR16167_0; // expected-error {{variable has incomplete type 'void'}}131 132// PR7927133enum T_7927 {134  E_7927135};136 137extern "C" void f_pr7927(int);138 139namespace {140  extern "C" void f_pr7927(int);141 142  void foo_pr7927() {143    f_pr7927(E_7927);144    f_pr7927(0);145    ::f_pr7927(E_7927);146    ::f_pr7927(0);147  }148}149 150void bar_pr7927() {151  f_pr7927(E_7927);152  f_pr7927(0);153  ::f_pr7927(E_7927);154  ::f_pr7927(0);155}156 157namespace PR17337 {158  extern "C++" {159    class Foo;160    extern "C" int bar3(Foo *y);161    class Foo {162      int x;163      friend int bar3(Foo *y);164#ifdef W_RETAINED_LANGUAGE_LINKAGE165// expected-note@-5 {{previous declaration is here}}166// expected-warning@-3 {{retaining previous language linkage}}167#endif168    };169    extern "C" int bar3(Foo *y) {170      return y->x;171    }172  }173}174