forked from OSchip/llvm-project
3cd1013739
Use better heuristics to detect if a '{' might be the start of the constructor body or not. Especially when there is a completion token. Fix the test 'test/CodeCompletion/ctor-initializer.cpp ' when clang defaults to c++11 The problem was is how we recover invalid code in the ctor-init part as we skip the function body. In particular, we want to know if a '{' is the begining of the body. In C++03, we always consider it as the beginng of the body. The problem was that in C++11, it may be the start of an initializer, so we skip over it, causing further parse errors later. (It is important that we are able to parse correctly the rest of the class definition, to know what are the class member, for example) This commit is improving the heuristics to decide if the '{' is starting a function body. The rules are the following: If we are not in a template argument, and that the previous tokens are not an identifier, or a >, then it is much more likely to be the function body. We verify that further by checking the token after the matching '}' The commit also fix the behavior when there is a code_completion token in the ctor-initializers. Differential Revision: https://reviews.llvm.org/D21502 llvm-svn: 285883 |
||
---|---|---|
.. | ||
Inputs | ||
PR9728.cpp | ||
auto.cpp | ||
bracket-decl.c | ||
call.c | ||
call.cpp | ||
constexpr.cpp | ||
ctor-initializer.cpp | ||
documentation.cpp | ||
documentation.m | ||
enum-switch-case-qualified.cpp | ||
enum-switch-case.c | ||
enum-switch-case.cpp | ||
function-templates.cpp | ||
functions.cpp | ||
macros-in-modules.c | ||
macros-in-modules.m | ||
macros.c | ||
member-access.c | ||
member-access.cpp | ||
namespace-alias.cpp | ||
namespace.cpp | ||
nested-name-specifier.cpp | ||
objc-expr.m | ||
objc-message.m | ||
objc-message.mm | ||
objc-protocol-member-access.m | ||
operator.cpp | ||
ordinary-name-cxx11.cpp | ||
ordinary-name.c | ||
ordinary-name.cpp | ||
pch-and-module.m | ||
preamble.c | ||
some_struct.h | ||
stdin.c | ||
tag.c | ||
tag.cpp | ||
templates.cpp | ||
truncation.c | ||
truncation.c.h | ||
using-namespace.cpp | ||
using.cpp |