forked from OSchip/llvm-project
b23c5e8c3d
template name is not visible to unqualified lookup. In order to support this without a severe degradation in our ability to diagnose typos in template names, this change significantly restructures the way we handle template-id-shaped syntax for which lookup of the template name finds nothing. Instead of eagerly diagnosing an undeclared template name, we now form a placeholder template-name representing a name that is known to not find any templates. When the parser sees such a name, it attempts to disambiguate whether we have a less-than comparison or a template-id. Any diagnostics or typo-correction for the name are delayed until its point of use. The upshot should be a small improvement of our diagostic quality overall: we now take more syntactic context into account when trying to resolve an undeclared identifier on the left hand side of a '<'. In fact, this works well enough that the backwards-compatible portion (for an undeclared identifier rather than a lookup that finds functions but no function templates) is enabled in all language modes. llvm-svn: 360308 |
||
---|---|---|
.. | ||
Inputs | ||
atomic-property.m | ||
auto-fixit.m | ||
auto-isa-fixit.m | ||
bridge-cast-in-arc.mm | ||
bridge-in-non-arc.m | ||
dereference-addressof.c | ||
fixit-add-synthesize-to-property.m | ||
fixit-autoreleasepool.m | ||
fixit-availability.c | ||
fixit-availability.mm | ||
fixit-c90.c | ||
fixit-class-method-messaging.m | ||
fixit-cxx0x.cpp | ||
fixit-cxx1y-compat.cpp | ||
fixit-cxx11-attributes.cpp | ||
fixit-cxx11-compat.cpp | ||
fixit-eof-space.c | ||
fixit-errors-1.c | ||
fixit-errors.c | ||
fixit-format-darwin.m | ||
fixit-format-ios-nopedantic.m | ||
fixit-format-ios.m | ||
fixit-function-call.cpp | ||
fixit-include.c | ||
fixit-include.h | ||
fixit-interface-as-param.m | ||
fixit-large-file.cpp | ||
fixit-missing-method-return-type.m | ||
fixit-missing-self-in-block.m | ||
fixit-multiple-selector-warnings.m | ||
fixit-newline-style.c | ||
fixit-nsstring-compare.m | ||
fixit-nullability-declspec.cpp | ||
fixit-objc-arc.m | ||
fixit-objc-bridge-related-attr.m | ||
fixit-objc-bridge-related-property.m | ||
fixit-objc-bridge-related.m | ||
fixit-objc-message-comma-separator.m | ||
fixit-objc-message.m | ||
fixit-objc.m | ||
fixit-pmem.cpp | ||
fixit-pragma-attribute.c | ||
fixit-pragma-attribute.cpp | ||
fixit-pragma-pack.c | ||
fixit-recompile.c | ||
fixit-recursive-block.c | ||
fixit-static-object-decl.m | ||
fixit-suffix.c | ||
fixit-typedef-instead-of-typename-typo.cpp | ||
fixit-unicode-with-utf8-output.c | ||
fixit-unicode.c | ||
fixit-uninit.c | ||
fixit-unrecoverable.c | ||
fixit-unrecoverable.cpp | ||
fixit-unused-lambda-capture.cpp | ||
fixit-vexing-parse-cxx0x.cpp | ||
fixit-vexing-parse.cpp | ||
fixit.c | ||
fixit.cpp | ||
format-darwin.m | ||
format-no-fixit.m | ||
format.m | ||
format.mm | ||
messages.cpp | ||
multiarg-selector-fixit.m | ||
no-diagnostics-fixit-info.c | ||
no-fixit.cpp | ||
no-macro-fixit.c | ||
no-typo.c | ||
nullability.mm | ||
objc-literals.m | ||
property-access-fixit.m | ||
selector-fixit.m | ||
typo-crash.cpp | ||
typo-crash.m | ||
typo-location-bugs.cpp | ||
typo-using.cpp | ||
typo.c | ||
typo.cpp | ||
typo.m |