February 26, 2023 [Issue 23744] New: Static If Compilation Differences / Attribute inference bug | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=23744 Issue ID: 23744 Summary: Static If Compilation Differences / Attribute inference bug Product: D Version: D2 Hardware: Other OS: Mac OS X Status: NEW Severity: major Priority: P1 Component: dmd Assignee: nobody@puremagic.com Reporter: bradley@chatha.dev I'm uncertain whether this issue is mainly the "Attribute inference on recursion" bug or instead another bug that is only manifesting itself alongside the other bug; but essentially: ``` module test; bool nextVaryingLengthToken() @safe { bool tryLexLongerOperators(alias TokenType)() { switch(' ') { /* Comment out the first two blocks and you will see that the error dissapears. The only difference between the two sets of blocks is that one has braces and the other doesn't. Additionally, commenting out the line `int i` will cause the error to not appear. It appears having _any_ sort of statement there causes the error to show up. */ static if(false) case "=": int i; if(tryLexLongerOperators!"=") return true; return true; static if(false) case "*": int i3; if(tryLexLongerOperators!"*") return true; return true; static if(false) { case "=": int i2; if(tryLexLongerOperators!"=") return true; return true; case "*": int i4; if(tryLexLongerOperators!"*") return true; return true; } default: return false; } } return tryLexLongerOperators!noreturn; } ``` It seems that `static if(false) <body>` will still cause the compiler to try and evaluate the <body>, however `static if(false) { <body> }` causes it to not bother. And then since it evaluates the body it triggers the inferrence bug, which is what makes me think this is a separate bug on its own. However that's more just an observation rather than a truthful assertion; I'm struggling to reproduce this outside of this particular setup. -- |
Copyright © 1999-2021 by the D Language Foundation