[cfe-commits] r44255 - in /cfe/trunk: AST/StmtPrinter.cpp AST/StmtSerialization.cpp Parse/ParseStmt.cpp Parse/Parser.cpp Sema/Sema.h Sema/SemaStmt.cpp include/clang/AST/Stmt.h include/clang/Parse/Action.h include/clang/Parse/Parser.h

fjahanian fjahanian at apple.com
Wed Nov 21 13:25:00 PST 2007


It is useful to  provide test cases for this and any new feature to  
know the extent of support with each new patch. There are both gcc  
style inline asm and CodeWarrior style inline support (latter is only  
supported in Apple's gcc version).

- Fariborz

On Nov 20, 2007, at 11:21 AM, Anders Carlsson wrote:

> Author: andersca
> Date: Tue Nov 20 13:21:03 2007
> New Revision: 44255
>
> URL: http://llvm.org/viewvc/llvm-project?rev=44255&view=rev
> Log:
> Store inline asm code in the AST.
>
> Modified:
>     cfe/trunk/AST/StmtPrinter.cpp
>     cfe/trunk/AST/StmtSerialization.cpp
>     cfe/trunk/Parse/ParseStmt.cpp
>     cfe/trunk/Parse/Parser.cpp
>     cfe/trunk/Sema/Sema.h
>     cfe/trunk/Sema/SemaStmt.cpp
>     cfe/trunk/include/clang/AST/Stmt.h
>     cfe/trunk/include/clang/Parse/Action.h
>     cfe/trunk/include/clang/Parse/Parser.h
>
> Modified: cfe/trunk/AST/StmtPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/AST/ 
> StmtPrinter.cpp?rev=44255&r1=44254&r2=44255&view=diff
>
> ====================================================================== 
> ========
> --- cfe/trunk/AST/StmtPrinter.cpp (original)
> +++ cfe/trunk/AST/StmtPrinter.cpp Tue Nov 20 13:21:03 2007
> @@ -326,7 +326,9 @@
>
>
>  void StmtPrinter::VisitAsmStmt(AsmStmt *Node) {
> -  Indent() << "asm (/*todo*/);\n";
> +  Indent() << "asm (";
> +  VisitStringLiteral(Node->getAsmString());
> +  OS << ");\n";
>  }
>
>  void StmtPrinter::VisitObjcAtTryStmt(ObjcAtTryStmt *Node) {
>
> Modified: cfe/trunk/AST/StmtSerialization.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/AST/ 
> StmtSerialization.cpp?rev=44255&r1=44254&r2=44255&view=diff
>
> ====================================================================== 
> ========
> --- cfe/trunk/AST/StmtSerialization.cpp (original)
> +++ cfe/trunk/AST/StmtSerialization.cpp Tue Nov 20 13:21:03 2007
> @@ -197,14 +197,16 @@
>
>  void AsmStmt::EmitImpl(Serializer& S) const {
>    S.Emit(AsmLoc);
> +  getAsmString()->EmitImpl(S);
>    S.Emit(RParenLoc);
>  }
>
>  AsmStmt* AsmStmt::CreateImpl(Deserializer& D) {
>    SourceLocation ALoc = SourceLocation::ReadVal(D);
> +  StringLiteral *AsmStr = StringLiteral::CreateImpl(D);
>    SourceLocation PLoc = SourceLocation::ReadVal(D);
>
> -  return new AsmStmt(ALoc,PLoc);
> +  return new AsmStmt(ALoc, AsmStr, PLoc);
>  }
>
>  void BinaryOperator::EmitImpl(Serializer& S) const {
>
> Modified: cfe/trunk/Parse/ParseStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/ 
> ParseStmt.cpp?rev=44255&r1=44254&r2=44255&view=diff
>
> ====================================================================== 
> ========
> --- cfe/trunk/Parse/ParseStmt.cpp (original)
> +++ cfe/trunk/Parse/ParseStmt.cpp Tue Nov 20 13:21:03 2007
> @@ -943,8 +943,10 @@
>    }
>    Loc = ConsumeParen();
>
> -  ParseAsmStringLiteral();
> -
> +  ExprResult AsmString = ParseAsmStringLiteral();
> +  if (AsmString.isInvalid)
> +    return true;
> +
>    // Parse Outputs, if present.
>    ParseAsmOperandsOpt();
>
> @@ -969,7 +971,7 @@
>    SourceLocation RParenLoc = MatchRHSPunctuation(tok::r_paren, Loc);
>
>    // FIXME: Pass all the details down to the action.
> -  return Actions.ActOnAsmStmt(AsmLoc, RParenLoc);
> +  return Actions.ActOnAsmStmt(AsmLoc, AsmString.Val, RParenLoc);
>  }
>
>  /// ParseAsmOperands - Parse the asm-operands production as used by
>
> Modified: cfe/trunk/Parse/Parser.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/Parser.cpp? 
> rev=44255&r1=44254&r2=44255&view=diff
>
> ====================================================================== 
> ========
> --- cfe/trunk/Parse/Parser.cpp (original)
> +++ cfe/trunk/Parse/Parser.cpp Tue Nov 20 13:21:03 2007
> @@ -575,16 +575,18 @@
>  /// [GNU] asm-string-literal:
>  ///         string-literal
>  ///
> -void Parser::ParseAsmStringLiteral() {
> +Parser::ExprResult Parser::ParseAsmStringLiteral() {
>    if (!isTokenStringLiteral()) {
>      Diag(Tok, diag::err_expected_string_literal);
> -    return;
> +    return true;
>    }
>
>    ExprResult Res = ParseStringLiteralExpression();
> -  if (Res.isInvalid) return;
> +  if (Res.isInvalid) return true;
>
>    // TODO: Diagnose: wide string literal in 'asm'
> +
> +  return Res;
>  }
>
>  /// ParseSimpleAsm
>
> Modified: cfe/trunk/Sema/Sema.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/Sema.h? 
> rev=44255&r1=44254&r2=44255&view=diff
>
> ====================================================================== 
> ========
> --- cfe/trunk/Sema/Sema.h (original)
> +++ cfe/trunk/Sema/Sema.h Tue Nov 20 13:21:03 2007
> @@ -346,7 +346,8 @@
>    virtual StmtResult ActOnReturnStmt(SourceLocation ReturnLoc,
>                                       ExprTy *RetValExp);
>
> -  virtual StmtResult ActOnAsmStmt(SourceLocation AsmLoc,
> +  virtual StmtResult ActOnAsmStmt(SourceLocation AsmLoc,
> +                                  ExprTy *AsmString,
>                                    SourceLocation RParenLoc);
>
>    virtual StmtResult ActOnObjcAtCatchStmt(SourceLocation AtLoc,
>
> Modified: cfe/trunk/Sema/SemaStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/ 
> SemaStmt.cpp?rev=44255&r1=44254&r2=44255&view=diff
>
> ====================================================================== 
> ========
> --- cfe/trunk/Sema/SemaStmt.cpp (original)
> +++ cfe/trunk/Sema/SemaStmt.cpp Tue Nov 20 13:21:03 2007
> @@ -644,9 +644,12 @@
>    return new ReturnStmt(ReturnLoc, (Expr*)RetValExp);
>  }
>
> -Sema::StmtResult Sema::ActOnAsmStmt(SourceLocation AsmLoc,
> +Sema::StmtResult Sema::ActOnAsmStmt(SourceLocation AsmLoc,
> +                                    ExprTy *AsmString,
>                                      SourceLocation RParenLoc) {
> -  return new AsmStmt(AsmLoc, RParenLoc);
> +  Expr *E = (Expr *)AsmString;
> +
> +  return new AsmStmt(AsmLoc, cast<StringLiteral>(E), RParenLoc);
>  }
>
>  Action::StmtResult
>
> Modified: cfe/trunk/include/clang/AST/Stmt.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ 
> AST/Stmt.h?rev=44255&r1=44254&r2=44255&view=diff
>
> ====================================================================== 
> ========
> --- cfe/trunk/include/clang/AST/Stmt.h (original)
> +++ cfe/trunk/include/clang/AST/Stmt.h Tue Nov 20 13:21:03 2007
> @@ -30,6 +30,7 @@
>    class ScopedDecl;
>    class IdentifierInfo;
>    class SourceManager;
> +  class StringLiteral;
>    class SwitchStmt;
>    class PrinterHelper;
>
> @@ -704,11 +705,17 @@
>  ///
>  class AsmStmt : public Stmt {
>    SourceLocation AsmLoc, RParenLoc;
> +  StringLiteral *AsmStr;
>    // FIXME: This doesn't capture most of the interesting pieces.
>  public:
> -  AsmStmt(SourceLocation asmloc, SourceLocation rparenloc)
> -    : Stmt(AsmStmtClass), AsmLoc(asmloc), RParenLoc(rparenloc) {}
> +  AsmStmt(SourceLocation asmloc, StringLiteral *asmstr,
> +          SourceLocation rparenloc)
> +    : Stmt(AsmStmtClass), AsmLoc(asmloc), RParenLoc(rparenloc),
> +      AsmStr(asmstr) {}
>
> +  const StringLiteral *getAsmString() const { return AsmStr; }
> +  StringLiteral *getAsmString() { return AsmStr; }
> +
>    virtual SourceRange getSourceRange() const {
>      return SourceRange(AsmLoc, RParenLoc);
>    }
>
> Modified: cfe/trunk/include/clang/Parse/Action.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ 
> Parse/Action.h?rev=44255&r1=44254&r2=44255&view=diff
>
> ====================================================================== 
> ========
> --- cfe/trunk/include/clang/Parse/Action.h (original)
> +++ cfe/trunk/include/clang/Parse/Action.h Tue Nov 20 13:21:03 2007
> @@ -286,7 +286,8 @@
>                                       ExprTy *RetValExp) {
>      return 0;
>    }
> -  virtual StmtResult ActOnAsmStmt(SourceLocation AsmLoc,
> +  virtual StmtResult ActOnAsmStmt(SourceLocation AsmLoc,
> +                                  ExprTy *AsmString,
>                                    SourceLocation RParenLoc) {
>      return 0;
>    }
>
> Modified: cfe/trunk/include/clang/Parse/Parser.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ 
> Parse/Parser.h?rev=44255&r1=44254&r2=44255&view=diff
>
> ====================================================================== 
> ========
> --- cfe/trunk/include/clang/Parse/Parser.h (original)
> +++ cfe/trunk/include/clang/Parse/Parser.h Tue Nov 20 13:21:03 2007
> @@ -244,7 +244,10 @@
>    }
>    bool SkipUntil(const tok::TokenKind *Toks, unsigned NumToks,
>                   bool StopAtSemi = true, bool DontConsume = false);
> -
> +
> +  typedef Action::ExprResult ExprResult;
> +  typedef Action::StmtResult StmtResult;
> +
>    // 
> ===------------------------------------------------------------------- 
> -===//
>    // C99 6.9: External Definitions.
>    DeclTy *ParseExternalDeclaration();
> @@ -252,7 +255,7 @@
>    DeclTy *ParseFunctionDefinition(Declarator &D);
>    void ParseKNRParamDeclarations(Declarator &D);
>    void ParseSimpleAsm();
> -  void ParseAsmStringLiteral();
> +  ExprResult ParseAsmStringLiteral();
>
>    // Objective-C External Declarations
>    DeclTy *ParseObjCAtDirectives();
> @@ -305,9 +308,6 @@
>    // 
> ===------------------------------------------------------------------- 
> -===//
>    // C99 6.5: Expressions.
>
> -  typedef Action::ExprResult ExprResult;
> -  typedef Action::StmtResult StmtResult;
> -
>    ExprResult ParseExpression();
>    ExprResult ParseConstantExpression();
>    ExprResult ParseAssignmentExpression();  // Expr that doesn't  
> include commas.
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list