Home | History | Annotate | Download | only in Modules
      1 // RUN: rm -rf %t
      2 // RUN: %clang_cc1 -x objective-c++ -fmodules -fmodule-cache-path %t -I %S/Inputs %s -verify
      3 
      4 // Importing modules which add declarations to a pre-existing non-imported
      5 // overload set does not currently work.
      6 // XFAIL: *
      7 
      8 namespace N6 {
      9   char &f(char);
     10 }
     11 
     12 namespace N8 { }
     13 
     14 @__experimental_modules_import namespaces_left;
     15 @__experimental_modules_import namespaces_right;
     16 
     17 void test() {
     18   int &ir1 = N1::f(1);
     19   int &ir2 = N2::f(1);
     20   int &ir3 = N3::f(1);
     21   float &fr1 = N1::f(1.0f);
     22   float &fr2 = N2::f(1.0f);
     23   double &dr1 = N2::f(1.0);
     24   double &dr2 = N3::f(1.0);
     25 }
     26 
     27 // Test namespaces merged without a common first declaration.
     28 namespace N5 {
     29   char &f(char);
     30 }
     31 
     32 namespace N10 {
     33   int &f(int);
     34 }
     35 
     36 void testMerged() {
     37   int &ir1 = N5::f(17);
     38   int &ir2 = N6::f(17);
     39   int &ir3 = N7::f(17);
     40   double &fr1 = N5::f(1.0);
     41   double &fr2 = N6::f(1.0);
     42   double &fr3 = N7::f(1.0);
     43   char &cr1 = N5::f('a');
     44   char &cr2 = N6::f('b');
     45 }
     46 
     47 // Test merging of declarations within namespaces that themselves were
     48 // merged without a common first declaration.
     49 void testMergedMerged() {
     50   int &ir1 = N8::f(17);
     51   int &ir2 = N9::f(17);
     52   int &ir3 = N10::f(17);
     53 }
     54 
     55 // Test merging when using anonymous namespaces, which does not
     56 // actually perform any merging.
     57 // other file: expected-note{{passing argument to parameter here}}
     58 void testAnonymousNotMerged() {
     59   N11::consumeFoo(N11::getFoo()); // expected-error{{cannot initialize a parameter of type 'N11::<anonymous>::Foo *' with an rvalue of type 'N11::<anonymous>::Foo *'}}
     60   N12::consumeFoo(N12::getFoo()); // expected-error{{cannot initialize a parameter of type 'N12::<anonymous>::Foo *' with an rvalue of type 'N12::<anonymous>::Foo *'}}
     61 }
     62 
     63 
     64 // other file: expected-note{{passing argument to parameter here}}
     65