[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