1//gofmt -r=(x)->x
2
3// Copyright 2012 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Rewriting of parenthesized expressions (x) -> x
8// must not drop parentheses if that would lead to
9// wrong association of the operands.
10// Was issue 1847.
11
12package main
13
14// From example 1 of issue 1847.
15func _() {
16	var t = (&T{1000}).Id()
17}
18
19// From example 2 of issue 1847.
20func _() {
21	fmt.Println((*xpp).a)
22}
23
24// Some more test cases.
25func _() {
26	_ = (-x).f
27	_ = (*x).f
28	_ = (&x).f
29	_ = (!x).f
30	_ = -x.f
31	_ = *x.f
32	_ = &x.f
33	_ = !x.f
34	(-x).f()
35	(*x).f()
36	(&x).f()
37	(!x).f()
38	_ = -x.f()
39	_ = *x.f()
40	_ = &x.f()
41	_ = !x.f()
42
43	_ = (-x).f
44	_ = (*x).f
45	_ = (&x).f
46	_ = (!x).f
47	_ = -x.f
48	_ = *x.f
49	_ = &x.f
50	_ = !x.f
51	(-x).f()
52	(*x).f()
53	(&x).f()
54	(!x).f()
55	_ = -x.f()
56	_ = *x.f()
57	_ = &x.f()
58	_ = !x.f()
59
60	_ = -x.f
61	_ = *x.f
62	_ = &x.f
63	_ = !x.f
64	_ = -x.f
65	_ = *x.f
66	_ = &x.f
67	_ = !x.f
68	_ = -x.f()
69	_ = *x.f()
70	_ = &x.f()
71	_ = !x.f()
72	_ = -x.f()
73	_ = *x.f()
74	_ = &x.f()
75	_ = !x.f()
76}
77