diff options
Diffstat (limited to 'src/cmd/gc/walk.c')
-rw-r--r-- | src/cmd/gc/walk.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index d9c6341b43..e8ebd28924 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -1338,6 +1338,13 @@ walkexpr(Node **np, NodeList **init) fatal("missing switch %O", n->op); ret: + // Expressions that are constant at run time but not + // considered const by the language spec are not turned into + // constants until walk. For example, if n is y%1 == 0, the + // walk of y%1 may have replaced it by 0. + // Check whether n with its updated args is itself now a constant. + evconst(n); + ullmancalc(n); if(debug['w'] && n != N) |