[cfe-commits] r163083 - in /cfe/trunk: include/clang/AST/ include/clang/Basic/ include/clang/Sema/ include/clang/Serialization/ lib/AST/ lib/CodeGen/ lib/Parse/ lib/Sema/ lib/Serialization/ lib/StaticAnalyzer/Core/ test/Parser/ tools/libclang/

João Matos ripzonetriton at gmail.com
Sun Sep 2 07:18:48 PDT 2012


Thanks, all the major things should be accurate.

Just a minor thing:
 - I didn't create a BuildXXX function, and followed the existing style of
the other SEH nodes by creating the node in ActOnXXX.

If that is an issue I can fix it. And of course point 5., it's still
missing code-gen support, but I will handle that separately for all __try
contructs.


On Sun, Sep 2, 2012 at 5:32 AM, Sean Silva <silvas at purdue.edu> wrote:

> Since you just implemented a new Stmt, could you take a look at
> <http://clang.llvm.org/docs/InternalsManual.html#AddingExprStmt> and
> make sure that it is accurate?
>
> Thanks
> --Sean Silva
>
> On Sat, Sep 1, 2012 at 11:45 PM, Joao Matos <ripzonetriton at gmail.com>
> wrote:
> > Author: triton
> > Date: Sat Sep  1 22:45:41 2012
> > New Revision: 163083
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=163083&view=rev
> > Log:
> > Implemented parsing and AST support for the MS __leave exception
> statement. Also a minor fix to __except printing in StmtPrinter.cpp. Thanks
> to Aaron Ballman for review.
> >
> > Modified:
> >     cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
> >     cfe/trunk/include/clang/AST/Stmt.h
> >     cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
> >     cfe/trunk/include/clang/Basic/StmtNodes.td
> >     cfe/trunk/include/clang/Sema/Scope.h
> >     cfe/trunk/include/clang/Sema/Sema.h
> >     cfe/trunk/include/clang/Serialization/ASTBitCodes.h
> >     cfe/trunk/lib/AST/Stmt.cpp
> >     cfe/trunk/lib/AST/StmtPrinter.cpp
> >     cfe/trunk/lib/AST/StmtProfile.cpp
> >     cfe/trunk/lib/CodeGen/CGStmt.cpp
> >     cfe/trunk/lib/Parse/ParseStmt.cpp
> >     cfe/trunk/lib/Sema/SemaStmt.cpp
> >     cfe/trunk/lib/Sema/TreeTransform.h
> >     cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
> >     cfe/trunk/lib/Serialization/ASTWriterStmt.cpp
> >     cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
> >     cfe/trunk/test/Parser/MicrosoftExtensions.c
> >     cfe/trunk/tools/libclang/RecursiveASTVisitor.h
> >
> > Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original)
> > +++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Sat Sep  1
> 22:45:41 2012
> > @@ -2202,6 +2202,7 @@
> >  })
> >
> >  DEF_TRAVERSE_STMT(SEHTryStmt, {})
> > +DEF_TRAVERSE_STMT(SEHLeaveStmt, {})
> >  DEF_TRAVERSE_STMT(SEHExceptStmt, {})
> >  DEF_TRAVERSE_STMT(SEHFinallyStmt,{})
> >
> >
> > Modified: cfe/trunk/include/clang/AST/Stmt.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Stmt.h?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/AST/Stmt.h (original)
> > +++ cfe/trunk/include/clang/AST/Stmt.h Sat Sep  1 22:45:41 2012
> > @@ -1889,6 +1889,34 @@
> >    static bool classof(SEHTryStmt *) { return true; }
> >  };
> >
> > +class SEHLeaveStmt : public Stmt {
> > +  SourceLocation  LeaveLoc;
> > +
> > +  SEHLeaveStmt(SourceLocation LeaveLoc);
> > +
> > +  friend class ASTReader;
> > +  friend class ASTStmtReader;
> > +  explicit SEHLeaveStmt(EmptyShell E) : Stmt(SEHLeaveStmtClass, E) { }
> > +
> > +public:
> > +  static SEHLeaveStmt* Create(ASTContext &C,
> > +                              SourceLocation LeaveLoc);
> > +
> > +  SourceRange getSourceRange() const LLVM_READONLY {
> > +    return SourceRange(getLeaveLoc());
> > +  }
> > +
> > +  SourceLocation getLeaveLoc() const { return LeaveLoc; }
> > +
> > +  child_range children() { return child_range(); }
> > +
> > +  static bool classof(const Stmt *T) {
> > +    return T->getStmtClass() == SEHLeaveStmtClass;
> > +  }
> > +
> > +  static bool classof(SEHLeaveStmt *) { return true; }
> > +};
> > +
> >  }  // end namespace clang
> >
> >  #endif
> >
> > Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
> > +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Sat Sep  1
> 22:45:41 2012
> > @@ -740,6 +740,9 @@
> >
> >  def err_seh___finally_block : Error<
> >    "%0 only allowed in __finally block">;
> > +
> > +def err_seh___try_block : Error<
> > +  "%0 only allowed in __try block">;
> >
> >  } // end of Parse Issue category.
> >
> >
> > Modified: cfe/trunk/include/clang/Basic/StmtNodes.td
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/StmtNodes.td?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Basic/StmtNodes.td (original)
> > +++ cfe/trunk/include/clang/Basic/StmtNodes.td Sat Sep  1 22:45:41 2012
> > @@ -164,6 +164,7 @@
> >  // Microsoft Extensions.
> >  def CXXUuidofExpr : DStmt<Expr>;
> >  def SEHTryStmt : Stmt;
> > +def SEHLeaveStmt : Stmt;
> >  def SEHExceptStmt : Stmt;
> >  def SEHFinallyStmt : Stmt;
> >  def MSDependentExistsStmt : Stmt;
> >
> > Modified: cfe/trunk/include/clang/Sema/Scope.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Scope.h?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Sema/Scope.h (original)
> > +++ cfe/trunk/include/clang/Sema/Scope.h Sat Sep  1 22:45:41 2012
> > @@ -82,7 +82,10 @@
> >      SwitchScope = 0x800,
> >
> >      /// TryScope - This is the scope of a C++ try statement.
> > -    TryScope = 0x1000
> > +    TryScope = 0x1000,
> > +
> > +    /// SEHTryScope - This is scope of a Microsoft SEH try statement.
> > +    SEHTryScope = 0x2000
> >    };
> >  private:
> >    /// The parent scope for this scope.  This is null for the
> translation-unit
> > @@ -292,6 +295,9 @@
> >    /// \brief Determine whether this scope is a C++ 'try' block.
> >    bool isTryScope() const { return getFlags() & Scope::TryScope; }
> >
> > +  /// \brief Determine whether this scope is a MS SEH 'try' block.
> > +  bool isSEHTryScope() const { return getFlags() & Scope::SEHTryScope; }
> > +
> >    /// containedInPrototypeScope - Return true if this or a parent scope
> >    /// is a FunctionPrototypeScope.
> >    bool containedInPrototypeScope() const;
> >
> > Modified: cfe/trunk/include/clang/Sema/Sema.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Sema/Sema.h (original)
> > +++ cfe/trunk/include/clang/Sema/Sema.h Sat Sep  1 22:45:41 2012
> > @@ -2622,6 +2622,8 @@
> >                                Stmt *TryBlock,
> >                                Stmt *Handler);
> >
> > +  StmtResult ActOnSEHLeaveStmt(SourceLocation LeaveLoc);
> > +
> >    StmtResult ActOnSEHExceptBlock(SourceLocation Loc,
> >                                   Expr *FilterExpr,
> >                                   Stmt *Block);
> >
> > Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original)
> > +++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Sat Sep  1
> 22:45:41 2012
> > @@ -1204,6 +1204,7 @@
> >        STMT_SEH_EXCEPT,            // SEHExceptStmt
> >        STMT_SEH_FINALLY,           // SEHFinallyStmt
> >        STMT_SEH_TRY,               // SEHTryStmt
> > +      STMT_SEH_LEAVE,             // SEHLeaveStmt
> >
> >        // ARC
> >        EXPR_OBJC_BRIDGED_CAST,     // ObjCBridgedCastExpr
> >
> > Modified: cfe/trunk/lib/AST/Stmt.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Stmt.cpp?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/AST/Stmt.cpp (original)
> > +++ cfe/trunk/lib/AST/Stmt.cpp Sat Sep  1 22:45:41 2012
> > @@ -1006,6 +1006,17 @@
> >    return dyn_cast<SEHFinallyStmt>(getHandler());
> >  }
> >
> > +SEHLeaveStmt::SEHLeaveStmt(SourceLocation LeaveLoc)
> > +  : Stmt(SEHLeaveStmtClass),
> > +    LeaveLoc(LeaveLoc)
> > +{
> > +}
> > +
> > +SEHLeaveStmt* SEHLeaveStmt::Create(ASTContext &C,
> > +                                   SourceLocation LeaveLoc) {
> > +  return new(C) SEHLeaveStmt(LeaveLoc);
> > +}
> > +
> >  SEHExceptStmt::SEHExceptStmt(SourceLocation Loc,
> >                               Expr *FilterExpr,
> >                               Stmt *Block)
> >
> > Modified: cfe/trunk/lib/AST/StmtPrinter.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtPrinter.cpp?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/AST/StmtPrinter.cpp (original)
> > +++ cfe/trunk/lib/AST/StmtPrinter.cpp Sat Sep  1 22:45:41 2012
> > @@ -537,6 +537,11 @@
> >    OS << "\n";
> >  }
> >
> > +void StmtPrinter::VisitSEHLeaveStmt(SEHLeaveStmt *Node) {
> > +  Indent() << "__leave;";
> > +  OS << "\n";
> > +}
> > +
> >  void StmtPrinter::PrintRawSEHFinallyStmt(SEHFinallyStmt *Node) {
> >    OS << "__finally ";
> >    PrintRawCompoundStmt(Node->getBlock());
> > @@ -546,7 +551,7 @@
> >  void StmtPrinter::PrintRawSEHExceptHandler(SEHExceptStmt *Node) {
> >    OS << "__except (";
> >    VisitExpr(Node->getFilterExpr());
> > -  OS << ")\n";
> > +  OS << ") ";
> >    PrintRawCompoundStmt(Node->getBlock());
> >    OS << "\n";
> >  }
> >
> > Modified: cfe/trunk/lib/AST/StmtProfile.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/AST/StmtProfile.cpp (original)
> > +++ cfe/trunk/lib/AST/StmtProfile.cpp Sat Sep  1 22:45:41 2012
> > @@ -215,6 +215,10 @@
> >    VisitStmt(S);
> >  }
> >
> > +void StmtProfiler::VisitSEHLeaveStmt(const SEHLeaveStmt *S) {
> > +  VisitStmt(S);
> > +}
> > +
> >  void StmtProfiler::VisitObjCForCollectionStmt(const
> ObjCForCollectionStmt *S) {
> >    VisitStmt(S);
> >  }
> >
> > Modified: cfe/trunk/lib/CodeGen/CGStmt.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmt.cpp?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/CodeGen/CGStmt.cpp (original)
> > +++ cfe/trunk/lib/CodeGen/CGStmt.cpp Sat Sep  1 22:45:41 2012
> > @@ -163,6 +163,7 @@
> >    case Stmt::CXXForRangeStmtClass:
> >      EmitCXXForRangeStmt(cast<CXXForRangeStmt>(*S));
> >    case Stmt::SEHTryStmtClass:
> > +  case Stmt::SEHLeaveStmtClass:
> >      // FIXME Not yet implemented
> >      break;
> >    }
> >
> > Modified: cfe/trunk/lib/Parse/ParseStmt.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseStmt.cpp?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Parse/ParseStmt.cpp (original)
> > +++ cfe/trunk/lib/Parse/ParseStmt.cpp Sat Sep  1 22:45:41 2012
> > @@ -183,6 +183,19 @@
> >
> >      return ParseExprStatement();
> >    }
> > +
> > +  case tok::kw___leave: {
> > +    Token LeaveTok = Tok;
> > +    ConsumeToken();
> > +    if (getCurScope()->isSEHTryScope()) {
> > +      Res = Actions.ActOnSEHLeaveStmt(LeaveTok.getLocation());
> > +    } else {
> > +      Diag(LeaveTok, diag::err_seh___try_block)
> > +         << LeaveTok.getIdentifierInfo()->getName();
> > +      Res = StmtError();
> > +    }
> > +    break;
> > +  }
> >
> >    case tok::kw_case:                // C99 6.8.1: labeled-statement
> >      return ParseCaseStatement();
> > @@ -322,7 +335,9 @@
> >    if(Tok.isNot(tok::l_brace))
> >      return StmtError(Diag(Tok,diag::err_expected_lbrace));
> >
> > -  StmtResult TryBlock(ParseCompoundStatement());
> > +  // Use the SEHTryScope to handle __leave as a statement.
> > +  unsigned ScopeFlags = Scope::DeclScope | Scope::SEHTryScope;
> > +  StmtResult TryBlock(ParseCompoundStatement(false /*isStmtExpr*/,
> ScopeFlags));
> >    if(TryBlock.isInvalid())
> >      return TryBlock;
> >
> >
> > Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
> > +++ cfe/trunk/lib/Sema/SemaStmt.cpp Sat Sep  1 22:45:41 2012
> > @@ -2746,6 +2746,12 @@
> >  }
> >
> >  StmtResult
> > +Sema::ActOnSEHLeaveStmt(SourceLocation LeaveLoc)
> > +{
> > +  return Owned(SEHLeaveStmt::Create(Context, LeaveLoc));
> > +}
> > +
> > +StmtResult
> >  Sema::ActOnSEHExceptBlock(SourceLocation Loc,
> >                            Expr *FilterExpr,
> >                            Stmt *Block) {
> >
> > Modified: cfe/trunk/lib/Sema/TreeTransform.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Sema/TreeTransform.h (original)
> > +++ cfe/trunk/lib/Sema/TreeTransform.h Sat Sep  1 22:45:41 2012
> > @@ -1361,6 +1361,10 @@
> >      return getSema().ActOnSEHTryBlock(IsCXXTry,TryLoc,TryBlock,Handler);
> >    }
> >
> > +  StmtResult RebuildSEHLeaveStmt(SourceLocation LeaveLoc) {
> > +    return getSema().ActOnSEHLeaveStmt(LeaveLoc);
> > +  }
> > +
> >    StmtResult RebuildSEHExceptStmt(SourceLocation Loc,
> >                                    Expr *FilterExpr,
> >                                    Stmt *Block) {
> > @@ -6001,6 +6005,12 @@
> >
> >  template<typename Derived>
> >  StmtResult
> > +TreeTransform<Derived>::TransformSEHLeaveStmt(SEHLeaveStmt *S) {
> > +  return getDerived().RebuildSEHLeaveStmt(S->getLeaveLoc());
> > +}
> > +
> > +template<typename Derived>
> > +StmtResult
> >  TreeTransform<Derived>::TransformSEHFinallyStmt(SEHFinallyStmt *S) {
> >    StmtResult Block; //  =
> getDerived().TransformCompoundStatement(S->getBlock());
> >    if(Block.isInvalid()) return StmtError();
> >
> > Modified: cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderStmt.cpp?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Serialization/ASTReaderStmt.cpp (original)
> > +++ cfe/trunk/lib/Serialization/ASTReaderStmt.cpp Sat Sep  1 22:45:41
> 2012
> > @@ -1516,6 +1516,11 @@
> >    S->Children[SEHTryStmt::HANDLER] = Reader.ReadSubStmt();
> >  }
> >
> > +void ASTStmtReader::VisitSEHLeaveStmt(SEHLeaveStmt *S) {
> > +  VisitStmt(S);
> > +  S->LeaveLoc = ReadSourceLocation(Record, Idx);
> > +}
> > +
> >
>  //===----------------------------------------------------------------------===//
> >  // CUDA Expressions and Statements
> >
>  //===----------------------------------------------------------------------===//
> > @@ -1986,6 +1991,9 @@
> >      case STMT_SEH_TRY:
> >        S = new (Context) SEHTryStmt(Empty);
> >        break;
> > +    case STMT_SEH_LEAVE:
> > +      S = new (Context) SEHLeaveStmt(Empty);
> > +      break;
> >      case STMT_CXX_CATCH:
> >        S = new (Context) CXXCatchStmt(Empty);
> >        break;
> >
> > Modified: cfe/trunk/lib/Serialization/ASTWriterStmt.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterStmt.cpp?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Serialization/ASTWriterStmt.cpp (original)
> > +++ cfe/trunk/lib/Serialization/ASTWriterStmt.cpp Sat Sep  1 22:45:41
> 2012
> > @@ -1554,6 +1554,12 @@
> >    Code = serialization::STMT_SEH_TRY;
> >  }
> >
> > +void ASTStmtWriter::VisitSEHLeaveStmt(SEHLeaveStmt *S) {
> > +  VisitStmt(S);
> > +  Writer.AddSourceLocation(S->getLeaveLoc(), Record);
> > +  Code = serialization::STMT_SEH_LEAVE;
> > +}
> > +
> >
>  //===----------------------------------------------------------------------===//
> >  // ASTWriter Implementation
> >
>  //===----------------------------------------------------------------------===//
> >
> > Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp (original)
> > +++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp Sat Sep  1 22:45:41
> 2012
> > @@ -527,6 +527,7 @@
> >      case Stmt::PackExpansionExprClass:
> >      case Stmt::SubstNonTypeTemplateParmPackExprClass:
> >      case Stmt::SEHTryStmtClass:
> > +    case Stmt::SEHLeaveStmtClass:
> >      case Stmt::SEHExceptStmtClass:
> >      case Stmt::LambdaExprClass:
> >      case Stmt::SEHFinallyStmtClass: {
> >
> > Modified: cfe/trunk/test/Parser/MicrosoftExtensions.c
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/MicrosoftExtensions.c?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/test/Parser/MicrosoftExtensions.c (original)
> > +++ cfe/trunk/test/Parser/MicrosoftExtensions.c Sat Sep  1 22:45:41 2012
> > @@ -102,3 +102,9 @@
> >    struct S7 s;
> >    int i = s.t; /* expected-warning {{'t' is deprecated}} */
> >  }
> > +
> > +void SEH() {
> > +  __try { __leave; } __except (0) {}
> > +  __try { } __except (0) { __leave; } // expected-error {{__leave only
> allowed in __try block}}
> > +  __try { } __finally { __leave; } // expected-error {{__leave only
> allowed in __try block}}
> > +}
> > \ No newline at end of file
> >
> > Modified: cfe/trunk/tools/libclang/RecursiveASTVisitor.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/RecursiveASTVisitor.h?rev=163083&r1=163082&r2=163083&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/tools/libclang/RecursiveASTVisitor.h (original)
> > +++ cfe/trunk/tools/libclang/RecursiveASTVisitor.h Sat Sep  1 22:45:41
> 2012
> > @@ -2122,6 +2122,7 @@
> >  })
> >
> >  DEF_TRAVERSE_STMT(SEHTryStmt, {})
> > +DEF_TRAVERSE_STMT(SEHLeaveStmt, {})
> >  DEF_TRAVERSE_STMT(SEHExceptStmt, {})
> >  DEF_TRAVERSE_STMT(SEHFinallyStmt,{})
> >
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>



-- 
João Matos
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120902/105c1d2d/attachment.html>


More information about the cfe-commits mailing list