1 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -fopenmp -verify %s 2 3 namespace BEFORE_AND_1 { 4 void before_and_1(); 5 } 6 namespace AFTER_AND_2 { 7 void after_and_2(); // expected-note {{'AFTER_AND_2::after_and_2' declared here}} expected-note {{'AFTER_AND_2::after_and_2' declared here}} 8 } 9 namespace ONLY_1 { 10 void only_1(); // expected-note {{'ONLY_1::only_1' declared here}} 11 } 12 namespace BEFORE_1_AND_2 { 13 void before_1_and_2(); 14 } 15 16 using BEFORE_1_AND_2::before_1_and_2; 17 using BEFORE_AND_1::before_and_1; 18 test_before()19void test_before() { 20 before_and_1(); 21 after_and_2(); // expected-error {{use of undeclared identifier 'after_and_2'; did you mean 'AFTER_AND_2::after_and_2'?}} 22 only_1(); // expected-error {{use of undeclared identifier 'only_1'; did you mean 'ONLY_1::only_1'?}} 23 before_1_and_2(); 24 } 25 26 #pragma omp begin declare variant match(implementation = {vendor(llvm)}) 27 using BEFORE_1_AND_2::before_1_and_2; 28 using BEFORE_AND_1::before_and_1; 29 using ONLY_1::only_1; test_1()30void test_1() { 31 before_and_1(); 32 after_and_2(); // expected-error {{use of undeclared identifier 'after_and_2'; did you mean 'AFTER_AND_2::after_and_2'?}} 33 only_1(); 34 before_1_and_2(); 35 } 36 #pragma omp end declare variant 37 38 #pragma omp begin declare variant match(implementation = {vendor(llvm)}) 39 using AFTER_AND_2::after_and_2; 40 using BEFORE_1_AND_2::before_1_and_2; test_2()41void test_2() { 42 before_and_1(); 43 after_and_2(); 44 only_1(); 45 before_1_and_2(); 46 } 47 #pragma omp end declare variant 48 test_after()49void test_after() { 50 before_and_1(); 51 after_and_2(); 52 only_1(); 53 before_1_and_2(); 54 } 55 56 using AFTER_AND_2::after_and_2; 57 58 // Make sure: 59 // - we do not see the ast nodes for the gpu kind 60 // - we do not choke on the text in the kind(fpga) guarded scopes 61 // - we pick the right cbefore_1_and_2ees 62