[Issue 9055] Compiler segfaults on forward reference to auto-return	member function
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Fri Jan  4 02:00:18 PST 2013
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=9055
Don <clugdbug at yahoo.com.au> changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|CTFE                        |ice
            Summary|[CTFE] Compiler segfaults   |Compiler segfaults on
                   |on paren-free auto-return   |forward reference to
                   |forward referenced member   |auto-return member function
                   |function call on            |
                   |nonexistent 'this' receiver |
--- Comment #5 from Don <clugdbug at yahoo.com.au> 2013-01-04 02:00:12 PST ---
This is not a CTFE bug. Here is an example which doesn't use CTFE, properties,
or invalid use of 'this':
---
class C
{
    enum a = typeof(this.b()).init;
    static auto b(){ return 0; }
}
---
If in any of these examples you replace this.b() by simply b(), you get a
"forward reference to b" error message.
Here's a basic patch to do the same thing in this case. I'm not really happy
with it though, the errors for b() and this.b() should be generated in the same
function.
-- a/src/expression.c
+++ b/src/expression.c
@@ -929,6 +929,11 @@ Type *functionParameters(Loc loc, Scope *sc, TypeFunction
*tf,
     if (!tf->next && fd->inferRetType)
     {
         TemplateInstance *spec = fd->isSpeculative();
+        if ( fd->semanticRun < PASSsemanticdone )
+        {   // We haven't run semantic() yet, eg bug 9055.
+            error(loc, "forward reference to %s", fd->toChars());
+            return Type::terror;
+        }
         int olderrs = global.errors;
         // If it isn't speculative, we need to show errors
         unsigned oldgag = global.gag;
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
    
    
More information about the Digitalmars-d-bugs
mailing list