]> granicus.if.org Git - clang/commit
Better parser recovery in Objective-C containers.
authorJordan Rose <jordan_rose@apple.com>
Mon, 9 Jul 2012 16:54:53 +0000 (16:54 +0000)
committerJordan Rose <jordan_rose@apple.com>
Mon, 9 Jul 2012 16:54:53 +0000 (16:54 +0000)
commit94f29f4bf5d6b49dd1b7fc16cfa1521adc0c71c0
tree2ace396d6886f3b5b0f6611c21e625c763a78770
parentee158bc29bc12ce544996f7cdfde14aba63acf4d
Better parser recovery in Objective-C containers.

Previously it was possible to get an infinite-loop-on-invalid with a namespace
decl within @interface. Since 'namespace' is normally a safe place to retry
top-level parsing, we just didn't consume the token.

This adds a flag that tracks whether we have temporarily left Objective-C
scope to parse a C-like declaration, and uses that to better recover from
parse problems by stopping at possible method declarations and at @end. To
fix the original problem, we do /not/ stop at 'namespace' when in an
Objective-C @interface or @protocol context (but still do in @implementation).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159941 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Parse/Parser.h
lib/Parse/ParseDecl.cpp
lib/Parse/Parser.cpp
test/Parser/objc-recover.mm [new file with mode: 0644]