| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/ice15172.d(14): Error: constructor ice15172.ThreadError.this no match for implicit super() call in constructor |
| --- |
| */ |
| |
| // 1. ClassDeclaration.semantic |
| class ThreadError : Error |
| { |
| // 2. FuncDeclaration.semantic |
| // 4. FuncDeclaration.semantic3 |
| // --> error happens |
| this(string) |
| { |
| } |
| } |
| |
| // 3. FuncDeclaration.semantic |
| // 5. FuncDeclaration.semantic3 |
| void onThreadError() |
| { |
| // 6. NewExp.semantic |
| // --> cd.members.errors == false, cd.members.semantic3Errors == true |
| // BUT, The ThreadError class constructor is not a template function, so |
| // the errors inside its function body won't be associated with the validness of this NewExp. |
| // Therefore, converting the semantic3Error to ErrorExp is not correct. |
| // 7. ctfeInterpret |
| // Finally, FuncDeclaration::interpret may encounter a function which is semantic3Errors == true. So |
| // 7a. functionSemantic3() should return false if semantic3Errors is true. |
| // 7b. the function body errors may not happen during ctfeInterpret call and global.errors could be unincremented. |
| __gshared auto ThreadError = new ThreadError(null); |
| } |