# \[bug:trunk\] inconsistent warning: character class has duplicated range: /\[aa\]/

**URL:** <https://www.ruby-forum.com/t/bug-trunk-inconsistent-warning-character-class-has-duplicated-range-aa/182412>\
**Category:** Development\
**Created:** [January 27, 2010, 5:50pm UTC](https://www.ruby-forum.com/t/bug-trunk-inconsistent-warning-character-class-has-duplicated-range-aa/182412 "2010-01-27T17:50:16Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [January 27, 2010, 5:50pm UTC](https://www.ruby-forum.com/t/bug-trunk-inconsistent-warning-character-class-has-duplicated-range-aa/182412/1 "2010-01-27T17:50:16Z")

</div>

e$B0J2\<$N$h$&$K!"e(B  
exit;if a;end;/[aa]/  
exit;/[aa]/  
e$B$H$$$&$U$?$D$NJ8;zNs$re(B eval e$B$7$?$H$-!"A0\<T$KBP$7$F$Oe(B  
warning: character class has duplicated range: /[aa]/  
e$B$H$$$&7Y9p$,=P$k$N$K!"8e\<T$K$O=P$^$;$s!#e(B

% ./ruby -w -e ‘eval(“exit;if a;end;/[aa]/”)’  
(eval):1: warning: character class has duplicated range: /[aa]/  
% ./ruby -w -e ‘eval(“exit;/[aa]/”)’  
% ./ruby -v  
ruby 1.9.2dev (2010-01-27 trunk 26450) [i686-linux]

e$B$^$?!“e(Beval e$B$G$J$/D\>@\M?$($?$H$-$O!”$I$A$i$G$b7Y9p$5$l$^$9!#e(B

% ./ruby -w -e ‘exit;if a;end;/[aa]/’  
-e:1: warning: character class has duplicated range: /[aa]/  
% ./ruby -w -e ‘exit;/[aa]/’  
-e:1: warning: character class has duplicated range: /[aa]/

e$B$3$l$O$J$K$+JQ$J5$$,$9$k$s$G$9$,$$$+$,$G$7$g$&e(B?

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [January 27, 2010, 6:17pm UTC](https://www.ruby-forum.com/t/bug-trunk-inconsistent-warning-character-class-has-duplicated-range-aa/182412/2 "2010-01-27T18:17:12Z")

</div>

2010e$BG/e(B1e$B7ne(B28e$BF|e(B1:49 Tanaka A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> e$B0J2\<$N$h$&$K!"e(B  
> exit;if a;end;/[aa]/  
> exit;/[aa]/  
> e$B$H$$$&$U$?$D$NJ8;zNs$re(B eval e$B$7$?$H$-!"A0\<T$KBP$7$F$Oe(B  
> warning: character class has duplicated range: /[aa]/  
> e$B$H$$$&7Y9p$,=P$k$N$K!"8e\<T$K$O=P$^$;$s!#e(B

valgrind  
e$B$G0J2\<$N$h$&$J$N$,=P$F$/$k$s$G$9$,!"$b$7$+$9$k$H$3$l$G$9$+$M!#e(B

% valgrind ./ruby -w -e ‘exit;/[aa]/’  
==7830== Memcheck, a memory error detector.  
==7830== Copyright (C) 2002-2007, and GNU GPL’d, by Julian Seward et al.  
==7830== Using LibVEX rev 1854, a library for dynamic binary  
translation.  
==7830== Copyright (C) 2004-2007, and GNU GPL’d, by OpenWorks LLP.  
==7830== Using valgrind-3.3.1-Debian, a dynamic binary instrumentation  
framework.  
==7830== Copyright (C) 2000-2007, and GNU GPL’d, by Julian Seward et al.  
==7830== For more details, rerun with: -v  
==7830==  
==7830== Conditional jump or move depends on uninitialised value(s)  
==7830== at 0x80E04DF: CC\_DUP\_WARN (regparse.c:2892)  
==7830== by 0x80E42E8: next\_state\_val (regparse.c:4186)  
==7830== by 0x80E4F73: parse\_char\_class (regparse.c:4555)  
==7830== by 0x80E6B57: parse\_exp (regparse.c:5388)  
==7830== by 0x80E7083: parse\_branch (regparse.c:5544)  
==7830== by 0x80E71EE: parse\_subexp (regparse.c:5587)  
==7830== by 0x80E73A5: parse\_regexp (regparse.c:5635)  
==7830== by 0x80E7457: onig\_parse\_make\_tree (regparse.c:5662)  
==7830== by 0x80D0C0A: onig\_compile (regcomp.c:5391)  
==7830== by 0x80C0A3F: make\_regexp (re.c:755)  
==7830== by 0x80C41DA: rb\_reg\_initialize (re.c:2376)  
==7830== by 0x80C4360: rb\_reg\_initialize\_str (re.c:2402)  
-e:1: warning: character class has duplicated range: /[aa]/  
==7830==  
==7830== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 29 from 1)  
==7830== malloc/free: in use at exit: 1,341,790 bytes in 14,652 blocks.  
==7830== malloc/free: 15,913 allocs, 1,261 frees, 1,643,306 bytes  
allocated.  
==7830== For counts of detected errors, rerun with: -v  
==7830== searching for pointers to 14,652 not-freed blocks.  
==7830== checked 855,696 bytes.  
==7830==  
==7830== LEAK SUMMARY:  
==7830== definitely lost: 20 bytes in 2 blocks.  
==7830== possibly lost: 0 bytes in 0 blocks.  
==7830== still reachable: 1,341,770 bytes in 14,650 blocks.  
==7830== suppressed: 0 bytes in 0 blocks.  
==7830== Rerun with --leak-check=full to see details of leaked memory.
