diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-01-08 04:01:15 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-01-08 04:01:15 +0000 |
commit | f8d21151fa2582a5a230a5fb416c3aba55bc1bf7 (patch) | |
tree | b8568a2611470ff4ab9ef3886c973d97b98737f1 /lib/Sema/SemaDeclCXX.cpp | |
parent | 651f23fa5ac5b2ab2b695803f53725ed6569cee4 (diff) |
PR18402: work around bug in libstdc++4.8's detection of whether ::gets exists.
This should allow clang to successfully compile libstdc++4.8's headers in C++14
mode.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@291382 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 47c1af9ad3..02b73e9113 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -9135,6 +9135,16 @@ NamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, // invalid). if (R.empty() && NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) { + // HACK: Work around a bug in libstdc++'s detection of ::gets. Sometimes + // it will believe that glibc provides a ::gets in cases where it does not, + // and will try to pull it into namespace std with a using-declaration. + // Just ignore the using-declaration in that case. + auto *II = NameInfo.getName().getAsIdentifierInfo(); + if (getLangOpts().CPlusPlus14 && II && II->isStr("gets") && + CurContext->isStdNamespace() && + isa<TranslationUnitDecl>(LookupContext) && + getSourceManager().isInSystemHeader(UsingLoc)) + return nullptr; if (TypoCorrection Corrected = CorrectTypo( R.getLookupNameInfo(), R.getLookupKind(), S, &SS, llvm::make_unique<UsingValidatorCCC>( |