OSDN Git Service

compiler: Don't try to take the address of a constant.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 15 May 2012 20:00:57 +0000 (20:00 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 15 May 2012 20:00:57 +0000 (20:00 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@187554 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/expressions.cc

index f6fb658..56df6f6 100644 (file)
@@ -4044,7 +4044,7 @@ Unary_expression::do_get_tree(Translate_context* context)
 
       if (this->create_temp_
          && !TREE_ADDRESSABLE(TREE_TYPE(expr))
-         && !DECL_P(expr)
+         && (TREE_CODE(expr) == CONST_DECL || !DECL_P(expr))
          && TREE_CODE(expr) != INDIRECT_REF
          && TREE_CODE(expr) != COMPONENT_REF)
        {
@@ -6194,7 +6194,9 @@ Expression::comparison_tree(Translate_context* context, Operator op,
          make_tmp = NULL_TREE;
          arg = right_tree;
        }
-      else if (TREE_ADDRESSABLE(TREE_TYPE(right_tree)) || DECL_P(right_tree))
+      else if (TREE_ADDRESSABLE(TREE_TYPE(right_tree))
+              || (TREE_CODE(right_tree) != CONST_DECL
+                  && DECL_P(right_tree)))
        {
          make_tmp = NULL_TREE;
          arg = build_fold_addr_expr_loc(location.gcc_location(), right_tree);