aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/typeck.cc6
-rw-r--r--gcc/testsuite/g++.dg/overload/paren1.C7
2 files changed, 10 insertions, 3 deletions
diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc
index f796337..bddc837 100644
--- a/gcc/cp/typeck.cc
+++ b/gcc/cp/typeck.cc
@@ -6884,9 +6884,9 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain)
so we can just form an ADDR_EXPR with the correct type. */
if (processing_template_decl || TREE_CODE (arg) != COMPONENT_REF)
{
- tree stripped_arg = tree_strip_any_location_wrapper (arg);
- if (TREE_CODE (stripped_arg) == FUNCTION_DECL
- && !mark_used (stripped_arg, complain) && !(complain & tf_error))
+ tree stripped_arg
+ = tree_strip_any_location_wrapper (maybe_undo_parenthesized_ref (arg));
+ if (!mark_single_function (stripped_arg, complain))
return error_mark_node;
val = build_address (arg);
if (TREE_CODE (arg) == OFFSET_REF)
diff --git a/gcc/testsuite/g++.dg/overload/paren1.C b/gcc/testsuite/g++.dg/overload/paren1.C
new file mode 100644
index 0000000..21421ae
--- /dev/null
+++ b/gcc/testsuite/g++.dg/overload/paren1.C
@@ -0,0 +1,7 @@
+// PR c++/104618
+
+extern void gen_addsi3 (void);
+void output_stack_adjust ()
+{
+ (*(gen_addsi3)) ();
+}