1 // PR middle-end/51647 2 // { dg-do compile } 3 // { dg-options "-Wall" } 4 5 enum PropertyAttributes { NONE = 1 }; 6 enum PropertyType { NORMAL = 0, FIELD = 1 }; 7 class LookupResult; 8 9 template <typename T> 10 struct Handle 11 { HandleHandle12 inline explicit Handle (T *obj) __attribute__ ((always_inline)) {} 13 inline T *operator-> () const __attribute__ ((always_inline)) { return 0; } 14 }; 15 16 struct JSObject 17 { IsGlobalObjectJSObject18 bool IsGlobalObject () { return false; } 19 }; 20 21 struct Isolate 22 { top_lookup_resultIsolate23 LookupResult *top_lookup_result () { return 0; } 24 }; 25 26 struct LookupResult 27 { LookupResultLookupResult28 explicit LookupResult (Isolate *isolate) {} holderLookupResult29 JSObject *holder () { return 0; } typeLookupResult30 PropertyType type () { return NORMAL; } 31 }; 32 33 int test(LookupResult * lookup)34test (LookupResult *lookup) 35 { 36 Handle <JSObject> holder (lookup->holder ()); 37 switch (lookup->type ()) 38 { 39 case NORMAL: 40 if (holder->IsGlobalObject ()) 41 return 2; 42 else 43 return 3; 44 break; 45 default: 46 return 4; 47 } 48 } // { dg-bogus "control reaches end of non-void function" } 49