While backporting this to 4.5 and 4.4 I noticed that making the object non-dependent shouldn't be conditionalized.

Tested x86_64-pc-linux-gnu, applying to 4.6 and trunk. Applying the two patches folded together on 4.4 and 4.5.
commit a39f5c2859bb16af16945830f3c0802c40441b70
Author: Jason Merrill <ja...@redhat.com>
Date:   Wed Apr 20 12:48:33 2011 -0700

        PR c++/48594
        * decl2.c (build_offset_ref_call_from_tree): Move
        non-dependency of object outside condition.

diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 1217e42..89e03c0 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -4079,9 +4079,9 @@ build_offset_ref_call_from_tree (tree fn, VEC(tree,gc) 
**args)
         parameter.  That must be done before the FN is transformed
         because we depend on the form of FN.  */
       make_args_non_dependent (*args);
+      object = build_non_dependent_expr (object);
       if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
        {
-         object = build_non_dependent_expr (object);
          if (TREE_CODE (fn) == DOTSTAR_EXPR)
            object = cp_build_addr_expr (object, tf_warning_or_error);
          VEC_safe_insert (tree, gc, *args, 0, object);

Reply via email to