diff options
author | Chris Manghane <cmang@google.com> | 2013-09-30 18:11:42 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2013-09-30 18:11:42 +0000 |
commit | d4fe7beb780ed05c0b63bc3985c52c1502f5401a (patch) | |
tree | 52d8a99ea0a6d13dcfb7adcea2e76a201c696426 /gcc/go/go-gcc.cc | |
parent | a10bad862ffabecf122bfbb6b506be673c867b89 (diff) | |
download | gcc-d4fe7beb780ed05c0b63bc3985c52c1502f5401a.zip gcc-d4fe7beb780ed05c0b63bc3985c52c1502f5401a.tar.gz gcc-d4fe7beb780ed05c0b63bc3985c52c1502f5401a.tar.bz2 |
compiler: Use backend interface for variable expressions.
* go-gcc.cc (Backend::error_expression): New function.
(Backend::var_expression): New function.
(Backend::indirect_expression): New function.
From-SVN: r203038
Diffstat (limited to 'gcc/go/go-gcc.cc')
-rw-r--r-- | gcc/go/go-gcc.cc | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc index 025bb2b..df8c4fc 100644 --- a/gcc/go/go-gcc.cc +++ b/gcc/go/go-gcc.cc @@ -208,6 +208,16 @@ class Gcc_backend : public Backend Bexpression* zero_expression(Btype*); + Bexpression* + error_expression() + { return this->make_expression(error_mark_node); } + + Bexpression* + var_expression(Bvariable* var, Location); + + Bexpression* + indirect_expression(Bexpression* expr, bool known_valid, Location); + // Statements. Bstatement* @@ -848,6 +858,30 @@ Gcc_backend::zero_expression(Btype* btype) return tree_to_expr(ret); } +// An expression that references a variable. + +Bexpression* +Gcc_backend::var_expression(Bvariable* var, Location) +{ + tree ret = var->get_tree(); + if (ret == error_mark_node) + return this->error_expression(); + return tree_to_expr(ret); +} + +// An expression that indirectly references an expression. + +Bexpression* +Gcc_backend::indirect_expression(Bexpression* expr, bool known_valid, + Location location) +{ + tree ret = build_fold_indirect_ref_loc(location.gcc_location(), + expr->get_tree()); + if (known_valid) + TREE_THIS_NOTRAP(ret) = 1; + return tree_to_expr(ret); +} + // An expression as a statement. Bstatement* |