diff --git a/parse.y b/parse.y index 189731b45c..d7261a008d 100644 --- a/parse.y +++ b/parse.y @@ -11758,6 +11758,7 @@ cond0(struct parser_params *p, NODE *node, enum cond_type type, const YYLTYPE *l break; case NODE_DSYM: + warn_symbol: SWITCH_BY_COND_TYPE(type, warning, "symbol ") break; @@ -11770,6 +11771,9 @@ cond0(struct parser_params *p, NODE *node, enum cond_type type, const YYLTYPE *l node->nd_lit == Qfalse) { /* booleans are OK, e.g., while true */ } + else if (SYMBOL_P(node->nd_lit)) { + goto warn_symbol; + } else { SWITCH_BY_COND_TYPE(type, warning, "") } diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index bf59ee5379..667eb205dc 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -1061,16 +1061,16 @@ eom end def test_warning_literal_in_condition - assert_warn(/literal in condition/) do + assert_warn(/string literal in condition/) do eval('1 if ""') end - assert_warn(/literal in condition/) do + assert_warn(/regex literal in condition/) do eval('1 if //') end assert_warning(/literal in condition/) do eval('1 if 1') end - assert_warning(/literal in condition/) do + assert_warning(/symbol literal in condition/) do eval('1 if :foo') end assert_warning(/symbol literal in condition/) do