I have this C code:

```
EaglePage* EaglePage_RealCopy(EaglePage *page)
{
    if(NULL == page) {
        return NULL;
    }

    switch(page->type) {

        case EagleDataTypeUnknown:
            EagleLogger_Log(EagleLoggerSeverityError, "Cannot page of Unknown type.");
            return NULL;

        case EagleDataTypeInteger:
            return EaglePage_RealCopyInt_(page);

        case EagleDataTypeVarchar:
            return EaglePage_RealCopyVarchar_(page);

        case EagleDataTypeFloat:
            return EaglePage_RealCopyFloat_(page);

    }
}

```

When I compile this on Mac OS X using clang it understands that the switch handles all 'possible' branches and does not warn about a missing return statement (like Java). However if I run the same code through GCC 4.4.5 it always gives a missing return warning.

It's annoying because if I put in return statements then my code coverage breaks because I don't cover those 'impossible' scenarios. Is there a way for GCC to handle this like clang/javac?