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