]> granicus.if.org Git - clang/commit
PR16480: Reimplement token-caching for constructor initializer lists. This
authorRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 4 Jul 2013 00:13:48 +0000 (00:13 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 4 Jul 2013 00:13:48 +0000 (00:13 +0000)
commit54ca069d1526df84a48a3974871a7c4f46549651
tree82c5a9ff03b1adf186948c02a0ff137753792a44
parentdca7289799517c3eee1765a174984f2ecffad0f1
PR16480: Reimplement token-caching for constructor initializer lists. This
previously didn't work if a mem-initializer-id had a template argument which
contained parentheses or braces.

We now implement a simple rule: just look for a ') {' or '} {' that is not
nested. The '{' is assumed to start the function-body. There are still two
cases which we misparse, where the ') {' comes from a compound literal or
from a lambda. The former case is not valid C++, and the latter will probably
not be valid C++ once DR1607 is resolved, so these seem to be of low value,
and we do not regress on them with this change. EDG and g++ also misparse
both of these cases.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185598 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/DiagnosticParseKinds.td
lib/Parse/ParseCXXInlineMethods.cpp
test/Parser/cxx-member-initializers.cpp