Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
fd68e6ba
Commit
fd68e6ba
authored
Mar 24, 2011
by
Ian Lance Taylor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Condition in if statement is not optional.
From-SVN: r171377
parent
5278672c
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
21 additions
and
176 deletions
+21
-176
gcc/go/gofrontend/parse.cc
+2
-4
gcc/go/gofrontend/statements.cc
+11
-24
gcc/testsuite/go.test/test/fixedbugs/bug001.go
+0
-11
gcc/testsuite/go.test/test/fixedbugs/bug140.go
+2
-2
gcc/testsuite/go.test/test/fixedbugs/bug219.go
+6
-6
gcc/testsuite/go.test/test/if.go
+0
-12
gcc/testsuite/go.test/test/if1.go
+0
-20
gcc/testsuite/go.test/test/ken/robif.go
+0
-97
No files found.
gcc/go/gofrontend/parse.cc
View file @
fd68e6ba
...
@@ -3703,8 +3703,7 @@ Parse::return_stat()
...
@@ -3703,8 +3703,7 @@ Parse::return_stat()
location
));
location
));
}
}
// IfStat = "if" [ [ SimpleStat ] ";" ] [ Condition ]
// IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" Statement ] .
// Block [ "else" Statement ] .
void
void
Parse
::
if_stat
()
Parse
::
if_stat
()
...
@@ -3728,8 +3727,7 @@ Parse::if_stat()
...
@@ -3728,8 +3727,7 @@ Parse::if_stat()
{
{
if
(
this
->
peek_token
()
->
is_op
(
OPERATOR_SEMICOLON
))
if
(
this
->
peek_token
()
->
is_op
(
OPERATOR_SEMICOLON
))
this
->
advance_token
();
this
->
advance_token
();
if
(
!
this
->
peek_token
()
->
is_op
(
OPERATOR_LCURLY
))
cond
=
this
->
expression
(
PRECEDENCE_NORMAL
,
false
,
false
,
NULL
);
cond
=
this
->
expression
(
PRECEDENCE_NORMAL
,
false
,
false
,
NULL
);
}
}
this
->
gogo_
->
start_block
(
this
->
location
());
this
->
gogo_
->
start_block
(
this
->
location
());
...
...
gcc/go/gofrontend/statements.cc
View file @
fd68e6ba
...
@@ -2956,12 +2956,8 @@ class If_statement : public Statement
...
@@ -2956,12 +2956,8 @@ class If_statement : public Statement
int
int
If_statement
::
do_traverse
(
Traverse
*
traverse
)
If_statement
::
do_traverse
(
Traverse
*
traverse
)
{
{
if
(
this
->
cond_
!=
NULL
)
if
(
this
->
traverse_expression
(
traverse
,
&
this
->
cond_
)
==
TRAVERSE_EXIT
{
||
this
->
then_block_
->
traverse
(
traverse
)
==
TRAVERSE_EXIT
)
if
(
this
->
traverse_expression
(
traverse
,
&
this
->
cond_
)
==
TRAVERSE_EXIT
)
return
TRAVERSE_EXIT
;
}
if
(
this
->
then_block_
->
traverse
(
traverse
)
==
TRAVERSE_EXIT
)
return
TRAVERSE_EXIT
;
return
TRAVERSE_EXIT
;
if
(
this
->
else_block_
!=
NULL
)
if
(
this
->
else_block_
!=
NULL
)
{
{
...
@@ -2974,11 +2970,8 @@ If_statement::do_traverse(Traverse* traverse)
...
@@ -2974,11 +2970,8 @@ If_statement::do_traverse(Traverse* traverse)
void
void
If_statement
::
do_determine_types
()
If_statement
::
do_determine_types
()
{
{
if
(
this
->
cond_
!=
NULL
)
Type_context
context
(
Type
::
lookup_bool_type
(),
false
);
{
this
->
cond_
->
determine_type
(
&
context
);
Type_context
context
(
Type
::
lookup_bool_type
(),
false
);
this
->
cond_
->
determine_type
(
&
context
);
}
this
->
then_block_
->
determine_types
();
this
->
then_block_
->
determine_types
();
if
(
this
->
else_block_
!=
NULL
)
if
(
this
->
else_block_
!=
NULL
)
this
->
else_block_
->
determine_types
();
this
->
else_block_
->
determine_types
();
...
@@ -2989,14 +2982,11 @@ If_statement::do_determine_types()
...
@@ -2989,14 +2982,11 @@ If_statement::do_determine_types()
void
void
If_statement
::
do_check_types
(
Gogo
*
)
If_statement
::
do_check_types
(
Gogo
*
)
{
{
if
(
this
->
cond_
!=
NULL
)
Type
*
type
=
this
->
cond_
->
type
();
{
if
(
type
->
is_error_type
())
Type
*
type
=
this
->
cond_
->
type
();
this
->
set_is_error
();
if
(
type
->
is_error_type
())
else
if
(
!
type
->
is_boolean_type
())
this
->
set_is_error
();
this
->
report_error
(
_
(
"expected boolean expression"
));
else
if
(
!
type
->
is_boolean_type
())
this
->
report_error
(
_
(
"expected boolean expression"
));
}
}
}
// Whether the overall statement may fall through.
// Whether the overall statement may fall through.
...
@@ -3014,12 +3004,9 @@ If_statement::do_may_fall_through() const
...
@@ -3014,12 +3004,9 @@ If_statement::do_may_fall_through() const
tree
tree
If_statement
::
do_get_tree
(
Translate_context
*
context
)
If_statement
::
do_get_tree
(
Translate_context
*
context
)
{
{
gcc_assert
(
this
->
cond_
==
NULL
gcc_assert
(
this
->
cond_
->
type
()
->
is_boolean_type
()
||
this
->
cond_
->
type
()
->
is_boolean_type
()
||
this
->
cond_
->
type
()
->
is_error_type
());
||
this
->
cond_
->
type
()
->
is_error_type
());
tree
cond_tree
=
(
this
->
cond_
==
NULL
tree
cond_tree
=
this
->
cond_
->
get_tree
(
context
);
?
boolean_true_node
:
this
->
cond_
->
get_tree
(
context
));
tree
then_tree
=
this
->
then_block_
->
get_tree
(
context
);
tree
then_tree
=
this
->
then_block_
->
get_tree
(
context
);
tree
else_tree
=
(
this
->
else_block_
==
NULL
tree
else_tree
=
(
this
->
else_block_
==
NULL
?
NULL_TREE
?
NULL_TREE
...
...
gcc/testsuite/go.test/test/fixedbugs/bug001.go
deleted
100644 → 0
View file @
5278672c
// $G $D/$F.go && $L $F.$A && ./$A.out
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
main
func
main
()
{
if
{}
// compiles; should be an error (must be an expression)
}
gcc/testsuite/go.test/test/fixedbugs/bug140.go
View file @
fd68e6ba
...
@@ -7,8 +7,8 @@
...
@@ -7,8 +7,8 @@
package
main
package
main
func
main
()
{
func
main
()
{
if
{}
else
L1
:
;
if
true
{}
else
L1
:
;
if
{}
else
L2
:
main
()
;
if
true
{}
else
L2
:
main
()
;
}
}
/*
/*
...
...
gcc/testsuite/go.test/test/fixedbugs/bug219.go
View file @
fd68e6ba
...
@@ -12,8 +12,8 @@ func f(func()) int { return 0 }
...
@@ -12,8 +12,8 @@ func f(func()) int { return 0 }
// bug219.go:16: syntax error near if
// bug219.go:16: syntax error near if
func
g1
()
{
func
g1
()
{
if
x
:=
f
(
func
()
{
if
x
:=
f
(
func
()
{
if
{}
if
true
{}
});
{
});
true
{
_
=
x
;
_
=
x
;
}
}
}
}
...
@@ -21,8 +21,8 @@ func g1() {
...
@@ -21,8 +21,8 @@ func g1() {
// this works
// this works
func
g2
()
{
func
g2
()
{
if
x
:=
f
(
func
()
{
if
x
:=
f
(
func
()
{
//if {}
//if
true
{}
});
{
});
true
{
_
=
x
;
_
=
x
;
}
}
}
}
...
@@ -30,9 +30,9 @@ func g2() {
...
@@ -30,9 +30,9 @@ func g2() {
// this works
// this works
func
g3
()
{
func
g3
()
{
x
:=
f
(
func
()
{
x
:=
f
(
func
()
{
if
{}
if
true
{}
});
});
if
{
if
true
{
_
=
x
;
_
=
x
;
}
}
}
}
gcc/testsuite/go.test/test/if.go
View file @
fd68e6ba
...
@@ -45,18 +45,6 @@ func main() {
...
@@ -45,18 +45,6 @@ func main() {
assertequal
(
count
,
0
,
"if false one"
)
assertequal
(
count
,
0
,
"if false one"
)
count
=
0
count
=
0
if
{
count
=
count
+
1
}
assertequal
(
count
,
1
,
"if empty"
)
count
=
0
if
one
:=
1
;
true
{
count
=
count
+
one
}
assertequal
(
count
,
1
,
"if empty one"
)
count
=
0
if
i5
<
i7
{
if
i5
<
i7
{
count
=
count
+
1
count
=
count
+
1
}
}
...
...
gcc/testsuite/go.test/test/if1.go
deleted
100644 → 0
View file @
5278672c
// $G $F.go && $L $F.$A && ./$A.out
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
main
import
"os"
func
main
()
{
count
:=
7
if
one
:=
1
;
{
count
=
count
+
one
}
if
count
!=
8
{
print
(
count
,
" should be 8
\n
"
)
os
.
Exit
(
1
)
}
}
gcc/testsuite/go.test/test/ken/robif.go
deleted
100644 → 0
View file @
5278672c
// $G $D/$F.go && $L $F.$A && ./$A.out
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
main
func
assertequal
(
is
,
shouldbe
int
,
msg
string
)
{
if
is
!=
shouldbe
{
print
(
"assertion fail"
+
msg
+
"
\n
"
);
panic
(
1
);
}
}
func
main
()
{
i5
:=
5
;
i7
:=
7
;
var
count
int
;
count
=
0
;
if
true
{
count
=
count
+
1
;
}
assertequal
(
count
,
1
,
"if true"
);
count
=
0
;
if
false
{
count
=
count
+
1
;
}
assertequal
(
count
,
0
,
"if false"
);
count
=
0
;
if
one
:=
1
;
true
{
count
=
count
+
one
;
}
assertequal
(
count
,
1
,
"if true one"
);
count
=
0
;
if
one
:=
1
;
false
{
_
=
one
;
count
=
count
+
1
;
}
assertequal
(
count
,
0
,
"if false one"
);
count
=
0
;
if
{
count
=
count
+
1
;
}
assertequal
(
count
,
1
,
"if empty"
);
count
=
0
;
if
one
:=
1
;
{
count
=
count
+
one
;
}
assertequal
(
count
,
1
,
"if empty one"
);
count
=
0
;
if
i5
<
i7
{
count
=
count
+
1
;
}
assertequal
(
count
,
1
,
"if cond"
);
count
=
0
;
if
true
{
count
=
count
+
1
;
}
else
count
=
count
-
1
;
assertequal
(
count
,
1
,
"if else true"
);
count
=
0
;
if
false
{
count
=
count
+
1
;
}
else
count
=
count
-
1
;
assertequal
(
count
,
-
1
,
"if else false"
);
count
=
0
;
if
t
:=
1
;
false
{
count
=
count
+
1
;
t
:=
7
;
_
=
t
;
}
else
count
=
count
-
t
;
assertequal
(
count
,
-
1
,
"if else false var"
);
count
=
0
;
t
:=
1
;
if
false
{
count
=
count
+
1
;
t
:=
7
;
_
=
t
;
}
else
count
=
count
-
t
;
assertequal
(
count
,
-
1
,
"if else false var outside"
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment