Originally posted by coder
View Post
Code:
[COLOR=#0000ff]#if[/COLOR][COLOR=#000000] [/COLOR][COLOR=#098658]1[/COLOR] [COLOR=#0000ff]typedef[/COLOR][COLOR=#000000] [/COLOR][COLOR=#0000ff]enum[/COLOR][COLOR=#000000] E { ea, eb, ec } E;[/COLOR] [COLOR=#0000ff]#else[/COLOR] [COLOR=#0000ff]typedef[/COLOR][COLOR=#000000] [/COLOR][COLOR=#0000ff]enum[/COLOR][COLOR=#000000] E { ea, eb, ec, ed } E;[/COLOR] [COLOR=#0000ff]#endif[/COLOR] [COLOR=#0000ff]int[/COLOR][COLOR=#000000] test1(E e) {[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]int[/COLOR][COLOR=#000000] x;[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]switch[/COLOR][COLOR=#000000] (e) {[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]case[/COLOR][COLOR=#000000] ea : x = [/COLOR][COLOR=#098658]1[/COLOR][COLOR=#000000]; [/COLOR][COLOR=#0000ff]break[/COLOR][COLOR=#000000];[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]case[/COLOR][COLOR=#000000] eb : x = [/COLOR][COLOR=#098658]2[/COLOR][COLOR=#000000]; [/COLOR][COLOR=#0000ff]break[/COLOR][COLOR=#000000];[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]case[/COLOR][COLOR=#000000] ec : x = [/COLOR][COLOR=#098658]3[/COLOR][COLOR=#000000]; [/COLOR][COLOR=#0000ff]break[/COLOR][COLOR=#000000];[/COLOR] [COLOR=#000000] }[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]return[/COLOR][COLOR=#000000] x;[/COLOR] [COLOR=#000000]}[/COLOR] [COLOR=#0000ff]int[/COLOR][COLOR=#000000] test2(E e) {[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]int[/COLOR][COLOR=#000000] x;[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]switch[/COLOR][COLOR=#000000] (e) {[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]case[/COLOR][COLOR=#000000] ea : x = [/COLOR][COLOR=#098658]1[/COLOR][COLOR=#000000]; [/COLOR][COLOR=#0000ff]break[/COLOR][COLOR=#000000];[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]case[/COLOR][COLOR=#000000] eb : x = [/COLOR][COLOR=#098658]2[/COLOR][COLOR=#000000]; [/COLOR][COLOR=#0000ff]break[/COLOR][COLOR=#000000];[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]case[/COLOR][COLOR=#000000] ec : x = [/COLOR][COLOR=#098658]3[/COLOR][COLOR=#000000]; [/COLOR][COLOR=#0000ff]break[/COLOR][COLOR=#000000];[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]default[/COLOR][COLOR=#000000] : __builtin_unreachable();[/COLOR] [COLOR=#000000] }[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]return[/COLOR][COLOR=#000000] x;[/COLOR] [COLOR=#000000]}[/COLOR]
Code:
[COLOR=#008080]test1(E):[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]lea[/COLOR][COLOR=#000000] [/COLOR][COLOR=#4864aa]edx[/COLOR][COLOR=#000000], [[/COLOR][COLOR=#4864aa]rdi[/COLOR][COLOR=#000000]+[/COLOR][COLOR=#098658]1[/COLOR][COLOR=#000000]][/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]cmp[/COLOR][COLOR=#000000] [/COLOR][COLOR=#4864aa]edi[/COLOR][COLOR=#000000], [/COLOR][COLOR=#098658]3[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]mov[/COLOR][COLOR=#000000] [/COLOR][COLOR=#4864aa]eax[/COLOR][COLOR=#000000], [/COLOR][COLOR=#098658]0[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]cmovb[/COLOR][COLOR=#000000] [/COLOR][COLOR=#4864aa]eax[/COLOR][COLOR=#000000], [/COLOR][COLOR=#4864aa]edx[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]ret[/COLOR]
Code:
[COLOR=#008080]test2(E):[/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]lea[/COLOR][COLOR=#000000] [/COLOR][COLOR=#4864aa]eax[/COLOR][COLOR=#000000], [[/COLOR][COLOR=#4864aa]rdi[/COLOR][COLOR=#000000]+[/COLOR][COLOR=#098658]1[/COLOR][COLOR=#000000]][/COLOR] [COLOR=#000000] [/COLOR][COLOR=#0000ff]ret[/COLOR]
If you change the conditional to add an extra enumerator to the type, you get warnings (which you want) on both functions.
Yes, I think we're basically in agreement. Your earlier post seemed to take a more absolutist stance, which I clearly reject.
Comment