Enable -Wimplicit-fallthrough for ANGLE.

Also teach MSVC that ANGLE_CRASH() can't return.

Also fix instances of the warning in build configurations where
UNREACHABLE() can return (e.g. release without dcheck_always_on
or debug).

If the UNREACHABLE()s are truly unreachable, this change has
no behavior change.

Bug:  chromium:810767

Change-Id: I68f3587cf3e268c3ef634dce7ae3d70399859d0f
Reviewed-on: https://chromium-review.googlesource.com/914842
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nico Weber <thakis@chromium.org>
Commit-Queue: Nico Weber <thakis@chromium.org>
diff --git a/src/libANGLE/formatutils.cpp b/src/libANGLE/formatutils.cpp
index 374ea86..4714be3 100644
--- a/src/libANGLE/formatutils.cpp
+++ b/src/libANGLE/formatutils.cpp
@@ -438,7 +438,9 @@
             return true;
         default:
             UNREACHABLE();
+#if !UNREACHABLE_IS_NORETURN
             return false;
+#endif
     }
 }
 
@@ -1269,7 +1271,9 @@
             return ATTRIBUTE_MAT4x3;
         default:
             UNREACHABLE();
+#if !UNREACHABLE_IS_NORETURN
             return ATTRIBUTE_FLOAT;
+#endif
     }
 }
 
@@ -1306,7 +1310,9 @@
                     return VERTEX_FORMAT_SBYTE4;
                 default:
                     UNREACHABLE();
-                    break;
+#if !UNREACHABLE_IS_NORETURN
+                    return VERTEX_FORMAT_INVALID;
+#endif
             }
         case GL_UNSIGNED_BYTE:
             switch (components)
@@ -1337,7 +1343,9 @@
                     return VERTEX_FORMAT_UBYTE4;
                 default:
                     UNREACHABLE();
-                    break;
+#if !UNREACHABLE_IS_NORETURN
+                    return VERTEX_FORMAT_INVALID;
+#endif
             }
         case GL_SHORT:
             switch (components)
@@ -1368,7 +1376,9 @@
                     return VERTEX_FORMAT_SSHORT4;
                 default:
                     UNREACHABLE();
-                    break;
+#if !UNREACHABLE_IS_NORETURN
+                    return VERTEX_FORMAT_INVALID;
+#endif
             }
         case GL_UNSIGNED_SHORT:
             switch (components)
@@ -1399,7 +1409,9 @@
                     return VERTEX_FORMAT_USHORT4;
                 default:
                     UNREACHABLE();
-                    break;
+#if !UNREACHABLE_IS_NORETURN
+                    return VERTEX_FORMAT_INVALID;
+#endif
             }
         case GL_INT:
             switch (components)
@@ -1430,7 +1442,9 @@
                     return VERTEX_FORMAT_SINT4;
                 default:
                     UNREACHABLE();
-                    break;
+#if !UNREACHABLE_IS_NORETURN
+                    return VERTEX_FORMAT_INVALID;
+#endif
             }
         case GL_UNSIGNED_INT:
             switch (components)
@@ -1461,7 +1475,9 @@
                     return VERTEX_FORMAT_UINT4;
                 default:
                     UNREACHABLE();
-                    break;
+#if !UNREACHABLE_IS_NORETURN
+                    return VERTEX_FORMAT_INVALID;
+#endif
             }
         case GL_FLOAT:
             switch (components)
@@ -1476,7 +1492,9 @@
                     return VERTEX_FORMAT_FLOAT4;
                 default:
                     UNREACHABLE();
-                    break;
+#if !UNREACHABLE_IS_NORETURN
+                    return VERTEX_FORMAT_INVALID;
+#endif
             }
         case GL_HALF_FLOAT:
             switch (components)
@@ -1491,7 +1509,9 @@
                     return VERTEX_FORMAT_HALF4;
                 default:
                     UNREACHABLE();
-                    break;
+#if !UNREACHABLE_IS_NORETURN
+                    return VERTEX_FORMAT_INVALID;
+#endif
             }
         case GL_FIXED:
             switch (components)
@@ -1506,7 +1526,9 @@
                     return VERTEX_FORMAT_FIXED4;
                 default:
                     UNREACHABLE();
-                    break;
+#if !UNREACHABLE_IS_NORETURN
+                    return VERTEX_FORMAT_INVALID;
+#endif
             }
         case GL_INT_2_10_10_10_REV:
             if (pureInteger)
@@ -1522,9 +1544,10 @@
             return VERTEX_FORMAT_UINT210;
         default:
             UNREACHABLE();
-            break;
+#if !UNREACHABLE_IS_NORETURN
+            return VERTEX_FORMAT_INVALID;
+#endif
     }
-    return VERTEX_FORMAT_UBYTE1;
 }
 
 VertexFormatType GetVertexFormatType(const VertexAttribute &attrib)
@@ -2116,7 +2139,9 @@
         case VERTEX_FORMAT_INVALID:
         default:
             UNREACHABLE();
+#if !UNREACHABLE_IS_NORETURN
             return 0;
+#endif
     }
 }