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

Douglas Gregor dgregor at apple.com
Thu Oct 13 17:39:49 PDT 2011


On Oct 10, 2011, at 7:20 PM, Eli Friedman wrote:

> Author: efriedma
> Date: Mon Oct 10 21:20:01 2011
> New Revision: 141632
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=141632&view=rev
> Log:
> Initial implementation of __atomic_* (everything except __atomic_is_lock_free).

Cool.

> Modified: cfe/trunk/lib/AST/StmtProfile.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=141632&r1=141631&r2=141632&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/StmtProfile.cpp (original)
> +++ cfe/trunk/lib/AST/StmtProfile.cpp Mon Oct 10 21:20:01 2011
> @@ -468,6 +468,10 @@
>   }
> }
> 
> +void StmtProfiler::VisitAtomicExpr(const AtomicExpr *S) {
> +  VisitExpr(S);
> +}

You should also add the AtomicOp to the profile.

> 
> Modified: cfe/trunk/lib/Sema/TreeTransform.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=141632&r1=141631&r2=141632&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/TreeTransform.h (original)
> +++ cfe/trunk/lib/Sema/TreeTransform.h Mon Oct 10 21:20:01 2011
> @@ -8099,6 +8099,13 @@
> TreeTransform<Derived>::TransformAsTypeExpr(AsTypeExpr *E) {
>   llvm_unreachable("Cannot transform asType expressions yet");
> }
> +
> +template<typename Derived>
> +ExprResult
> +TreeTransform<Derived>::TransformAtomicExpr(AtomicExpr *E) {
> +  assert(false && "Cannot transform atomic expressions yet");
> +  return SemaRef.Owned(E);
> +}

Will this be filled in prior to our 3.0 branching?

> //===----------------------------------------------------------------------===//
> // Type reconstruction
> 
> Modified: cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderStmt.cpp?rev=141632&r1=141631&r2=141632&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReaderStmt.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTReaderStmt.cpp Mon Oct 10 21:20:01 2011
> @@ -774,6 +774,25 @@
>   E->RParenLoc = ReadSourceLocation(Record, Idx);
> }
> 
> +void ASTStmtReader::VisitAtomicExpr(AtomicExpr *E) {
> +  VisitExpr(E);
> +  E->setOp(AtomicExpr::AtomicOp(Record[Idx++]));
> +  E->setPtr(Reader.ReadSubExpr());
> +  E->setOrder(Reader.ReadSubExpr());
> +  E->setNumSubExprs(2);
> +  if (E->getOp() != AtomicExpr::Load) {
> +    E->setVal1(Reader.ReadSubExpr());
> +    E->setNumSubExprs(3);
> +  }
> +  if (E->isCmpXChg()) {
> +    E->setOrderFail(Reader.ReadSubExpr());
> +    E->setVal2(Reader.ReadSubExpr());
> +    E->setNumSubExprs(5);
> +  }
> +  E->setBuiltinLoc(ReadSourceLocation(Record, Idx));
> +  E->setRParenLoc(ReadSourceLocation(Record, Idx));
> +}
> +
> //===----------------------------------------------------------------------===//
> // Objective-C Expressions and Statements
> 
> @@ -2010,6 +2029,10 @@
>     case EXPR_ASTYPE:
>       S = new (Context) AsTypeExpr(Empty);
>       break;
> +
> +    case EXPR_ATOMIC:
> +      S = new (Context) AtomicExpr(Empty);
> +      break;
>     }
> 
>     // We hit a STMT_STOP, so we're done with this expression.
> 
> Modified: cfe/trunk/lib/Serialization/ASTWriterStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterStmt.cpp?rev=141632&r1=141631&r2=141632&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTWriterStmt.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTWriterStmt.cpp Mon Oct 10 21:20:01 2011
> @@ -736,6 +736,21 @@
>   Code = serialization::EXPR_GENERIC_SELECTION;
> }
> 
> +void ASTStmtWriter::VisitAtomicExpr(AtomicExpr *E) {
> +  VisitExpr(E);
> +  Record.push_back(E->getOp());
> +  Writer.AddStmt(E->getPtr());
> +  Writer.AddStmt(E->getOrder());
> +  if (E->getOp() != AtomicExpr::Load)
> +    Writer.AddStmt(E->getVal1());
> +  if (E->isCmpXChg()) {
> +    Writer.AddStmt(E->getOrderFail());
> +    Writer.AddStmt(E->getVal2());
> +  }
> +  Writer.AddSourceLocation(E->getBuiltinLoc(), Record);
> +  Writer.AddSourceLocation(E->getRParenLoc(), Record);
> +}
> +
> //===----------------------------------------------------------------------===//
> // Objective-C Expressions and Statements.
> //===----------------------------------------------------------------------===//


Test for PCH reading/writing?

	- Doug



More information about the cfe-commits mailing list