PR28422 is invalid. Giving better diagnostics in this case seems reasonable, but we should not accept the ill-formed code.
On 18 Aug 2016 11:41 a.m., "Serge Pavlov" <sepavl...@gmail.com> wrote: > sepavloff created this revision. > sepavloff added reviewers: rsmith, doug.gregor. > sepavloff added a subscriber: cfe-commits. > > If a declaration references a function from global namespace by its > qualified name and if that function return type is a class or enum, there > is possible ambiguity. The declaration: > ``` > friend A::B::C(); > ``` > may be considered as a declaration of a function `::C()` that returns > `A::B`, or a function `::B::C()` that returns `A`. > > With this change when the compiler sees 'A::B' while parsing decl-spec, it > tries to find `B` within 'A'. If it finds, 'A::B' is treated as a part of > qualified name. If it doesn't and the current declaration declares a > function, '::B' is assumed to be a part of declarator. For non-function > declarations 'B' can be searched for in the global namespace to improve > diagnostics. > > This changes fixes https://llvm.org/bugs/show_bug.cgi?id=28422. > > https://reviews.llvm.org/D23684 > > Files: > include/clang/Parse/Parser.h > include/clang/Sema/Sema.h > lib/Parse/ParseDecl.cpp > lib/Parse/ParseDeclCXX.cpp > lib/Parse/ParseExprCXX.cpp > lib/Parse/Parser.cpp > lib/Parse/RAIIObjectsForParser.h > lib/Sema/SemaCXXScopeSpec.cpp > lib/Sema/TreeTransform.h > test/CXX/drs/dr1xx.cpp > test/CXX/drs/dr2xx.cpp > test/Parser/cxx-decl.cpp > test/SemaCXX/nested-name-spec2.cpp > test/SemaCXX/pr18284-crash-on-invalid.cpp > test/SemaCXX/typo-correction.cpp > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits