[cfe-commits] [patch] [Windows] __leave keyword parsing and AST nodes

Aaron Ballman aaron at aaronballman.com
Thu Aug 30 09:19:04 PDT 2012


On Tue, Aug 28, 2012 at 6:59 PM, João Matos <ripzonetriton at gmail.com> wrote:
> Hi, attached patch adds support for the "__leave" keyword used in "__try"
> exception handling support on Windows/MSVC.

Thanks for tackling this!

> diff --git a/include/clang/AST/RecursiveASTVisitor.h
> b/include/clang/AST/RecursiveASTVisitor.h
> index c24b0a9..7fdecdc 100644

Please submit svn patches instead of git patches.  It may seem minor,
but not all diff clients handle git particularly well (esp on Windows
where TortoiseSVN is used frequently).

> diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp
> index f58f90d..6597cf8 100644
> --- a/lib/Parse/ParseStmt.cpp
> +++ b/lib/Parse/ParseStmt.cpp
> @@ -169,6 +169,20 @@ Retry:
>    }
>
>    default: {
> +
> +    if (Kind == tok::kw___leave) {
> +      Token LeaveTok = Tok;
> +      ConsumeToken();
> +
> +      if (!getCurScope()->isSEHTryScope()) {
> +        Diag(Tok, diag::err_seh___try_block)
> +            << LeaveTok.getIdentifierInfo()->getName();
> +        return StmtError();
> +      }

Is this putting the diagnostic on the correct token -- it seems like
it should be against the __leave instead of the token after it.

> diff --git a/test/Parser/MicrosoftExtensions.c b/test/Parser/MicrosoftExtensions.c
> index 7703999..676b599 100644
> --- a/test/Parser/MicrosoftExtensions.c
> +++ b/test/Parser/MicrosoftExtensions.c
> @@ -102,3 +102,8 @@ __declspec() void quux( void ) {
>    struct S7 s;
>    int i = s.t;	/* expected-warning {{'t' is deprecated}} */
>  }
> +
> +void SEH() {
> +  __try { __leave; } __except (0) {}
> +  __try { } __finally { __leave; } // expected-error {{__leave only allowed in __try block}}
> +}
> \ No newline at end of file

Should have a newline at the end of this file.  Also, can you add a
test for __leave in an __except block?

Aside from this, it looks reasonable to me at first blush.

~Aaron




More information about the cfe-commits mailing list