diff options
| author | Kaelyn Uhrain <rikka@google.com> | 2014-02-05 18:57:51 +0000 |
|---|---|---|
| committer | Kaelyn Uhrain <rikka@google.com> | 2014-02-05 18:57:51 +0000 |
| commit | 21a6617c34c4c15183b5edf4d7df910395aad0b4 (patch) | |
| tree | e8e77a4b6eda14218dc2789a85942ac6680779ff /clang | |
| parent | ba7cc706d993b0b869559754fa529c6454ec52f7 (diff) | |
| download | bcm5719-llvm-21a6617c34c4c15183b5edf4d7df910395aad0b4.tar.gz bcm5719-llvm-21a6617c34c4c15183b5edf4d7df910395aad0b4.zip | |
Don't consider records with a NULL identifier as a name for typo correction.
Because in C++, "anonymous" doesn't mean "nameless" for records. In
other words, RecordDecl::isAnonymousStructOrUnion only returns true if
the record lacks a name *and* is not used as the type in an object's
declaration.
llvm-svn: 200868
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/SemaLookup.cpp | 2 | ||||
| -rw-r--r-- | clang/test/SemaCXX/typo-correction-pt2.cpp | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp index 39dd555aeae..8a5c0a5ba7e 100644 --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -4216,7 +4216,7 @@ TypoCorrection Sema::CorrectTypo(const DeclarationNameInfo &TypoName, if (CXXRecordDecl *CD = (*TI)->getAsCXXRecordDecl()) { CD = CD->getCanonicalDecl(); if (!CD->isDependentType() && !CD->isAnonymousStructOrUnion() && - !CD->isUnion() && + !CD->isUnion() && CD->getIdentifier() && (CD->isBeingDefined() || CD->isCompleteDefinition())) Namespaces.AddNameSpecifier(CD); } diff --git a/clang/test/SemaCXX/typo-correction-pt2.cpp b/clang/test/SemaCXX/typo-correction-pt2.cpp index 78951004901..65d961085a8 100644 --- a/clang/test/SemaCXX/typo-correction-pt2.cpp +++ b/clang/test/SemaCXX/typo-correction-pt2.cpp @@ -199,3 +199,11 @@ template <> PR18213::WrapperInfo ::PR18213::Wrappable<int>::kWrapperInfo = { 0 }; // expected-error {{no member named 'PR18213' in 'PR18213::WrapperInfo'; did you mean simply 'PR18213'?}} \ // expected-error {{C++ requires a type specifier for all declarations}} } + +namespace PR18651 { +struct { + int x; +} a, b; + +int y = x; // expected-error-re {{use of undeclared identifier 'x'{{$}}}} +} |

