1*46d04a33SRichard Smith // RUN: %clang_cc1 -fsyntax-only %s -std=c++14 -verify
2*46d04a33SRichard Smith 
3*46d04a33SRichard Smith // This is a test for an egregious hack in Clang that works around
4*46d04a33SRichard Smith // an issue with libstdc++'s detection of whether glibc provides a
5*46d04a33SRichard Smith // ::gets function. If there is no ::gets, ignore
6*46d04a33SRichard Smith //   using ::gets;
7*46d04a33SRichard Smith // in namespace std.
8*46d04a33SRichard Smith //
9*46d04a33SRichard Smith // See PR18402 and gcc.gnu.org/PR77795 for more details.
10*46d04a33SRichard Smith 
11*46d04a33SRichard Smith #ifdef BE_THE_HEADER
12*46d04a33SRichard Smith 
13*46d04a33SRichard Smith #pragma GCC system_header
14*46d04a33SRichard Smith namespace std {
15*46d04a33SRichard Smith   using ::gets;
16*46d04a33SRichard Smith   using ::getx; // expected-error {{no member named 'getx'}}
17*46d04a33SRichard Smith }
18*46d04a33SRichard Smith 
19*46d04a33SRichard Smith #else
20*46d04a33SRichard Smith 
21*46d04a33SRichard Smith #define BE_THE_HEADER
22*46d04a33SRichard Smith #include "libstdcxx_pointer_return_false_hack.cpp"
23*46d04a33SRichard Smith 
24*46d04a33SRichard Smith namespace foo {
25*46d04a33SRichard Smith   using ::gets; // expected-error {{no member named 'gets'}}
26*46d04a33SRichard Smith }
27*46d04a33SRichard Smith 
28*46d04a33SRichard Smith #endif
29