diff options
author | Paolo Bonzini <bonzini@gnu.org> | 2007-02-05 07:57:49 +0000 |
---|---|---|
committer | Paolo Bonzini <bonzini@gcc.gnu.org> | 2007-02-05 07:57:49 +0000 |
commit | 4fe70b3151497166c316c45e5eec842f9de3a3f2 (patch) | |
tree | 72e2ca11bf540b559a9b8d7dbb132697b28c88ff /gcc/cp/semantics.c | |
parent | 3c1c7aaea2a967a51f6ec39b39bbd8d4fa6d6aed (diff) | |
download | gcc-4fe70b3151497166c316c45e5eec842f9de3a3f2.zip gcc-4fe70b3151497166c316c45e5eec842f9de3a3f2.tar.gz gcc-4fe70b3151497166c316c45e5eec842f9de3a3f2.tar.bz2 |
cp-tree.h (OMP_ATOMIC_CODE): Delete.
2007-02-05 Paolo Bonzini <bonzini@gnu.org>
* cp-tree.h (OMP_ATOMIC_CODE): Delete.
(OMP_ATOMIC_DEPENDENT_P): Rewrite.
* pt.c (tsubst_expr): Adjust for new format of dependent OMP_ATOMIC
expressions.
* semantics.c (finish_omp_atomic): Store a whole expression node
in operand 1, and integer_zero_node in operand 0, for dependent
OMP_ATOMIC. Rewrite to make flow easier to understand.
From-SVN: r121592
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r-- | gcc/cp/semantics.c | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index fea3341..326bcfb 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -3867,41 +3867,28 @@ finish_omp_for (location_t locus, tree decl, tree init, tree cond, void finish_omp_atomic (enum tree_code code, tree lhs, tree rhs) { - tree orig_lhs; - tree orig_rhs; - bool dependent_p; tree stmt; - orig_lhs = lhs; - orig_rhs = rhs; - dependent_p = false; - stmt = NULL_TREE; - - /* Even in a template, we can detect invalid uses of the atomic - pragma if neither LHS nor RHS is type-dependent. */ - if (processing_template_decl) + if (processing_template_decl + && (type_dependent_expression_p (lhs) + || type_dependent_expression_p (rhs))) + stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, + build2 (code, void_type_node, lhs, rhs)); + else { - dependent_p = (type_dependent_expression_p (lhs) - || type_dependent_expression_p (rhs)); - if (!dependent_p) + /* Even in a template, we can detect invalid uses of the atomic + pragma if neither LHS nor RHS is type-dependent. */ + if (processing_template_decl) { lhs = build_non_dependent_expr (lhs); rhs = build_non_dependent_expr (rhs); } - } - if (!dependent_p) - { + stmt = c_finish_omp_atomic (code, lhs, rhs); - if (stmt == error_mark_node) - return; } - if (processing_template_decl) - { - stmt = build2 (OMP_ATOMIC, void_type_node, orig_lhs, orig_rhs); - OMP_ATOMIC_DEPENDENT_P (stmt) = 1; - OMP_ATOMIC_CODE (stmt) = code; - } - add_stmt (stmt); + + if (stmt != error_mark_node) + add_stmt (stmt); } void |