Changeset: 0ac451062fdb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0ac451062fdb
Modified Files:
        gdk/gdk.h
        gdk/gdk_atoms.h
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_cand.h
        gdk/gdk_group.c
        gdk/gdk_hash.h
        gdk/gdk_storage.c
        gdk/gdk_system.h
Branch: default
Log Message:

Tell the compiler certain code paths are unreachable.


diffs (285 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1626,10 +1626,6 @@ gdk_export gdk_return GDKtracer_fill_com
 
 gdk_export _Noreturn void GDKfatal(_In_z_ _Printf_format_string_ const char 
*format, ...)
        __attribute__((__format__(__printf__, 1, 2)));
-       /*
-gdk_export void GDKfatal(_In_z_ _Printf_format_string_ const char *format, ...)
-       __attribute__((__format__(__printf__, 1, 2)));
-       */
 gdk_export void GDKclrerr(void);
 
 
@@ -1675,6 +1671,8 @@ tfastins_nocheckVAR(BAT *b, BUN p, const
                ((uint64_t *) b->theap->base)[p] = (uint64_t) d;
                break;
 #endif
+       default:
+               MT_UNREACHABLE();
        }
        return GDK_SUCCEED;
 }
diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h
--- a/gdk/gdk_atoms.h
+++ b/gdk/gdk_atoms.h
@@ -437,12 +437,14 @@ VarHeapVal(const void *b, BUN p, int w)
                return (size_t) ((const uint8_t *) b)[p] + GDK_VAROFFSET;
        case 2:
                return (size_t) ((const uint16_t *) b)[p] + GDK_VAROFFSET;
-#if SIZEOF_VAR_T == 8
        case 4:
                return (size_t) ((const uint32_t *) b)[p];
+#if SIZEOF_VAR_T == 8
+       case 8:
+               return (size_t) ((const uint64_t *) b)[p];
 #endif
        default:
-               return (size_t) ((const var_t *) b)[p];
+               MT_UNREACHABLE();
        }
 }
 
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1511,7 +1511,7 @@ BUNinplacemulti(BAT *b, const oid *posit
                        ptr _ptr;
                        _ptr = BUNtloc(bi, p);
                        switch (b->twidth) {
-                       default:        /* only three or four cases possible */
+                       case 1:
                                _d = (var_t) * (uint8_t *) _ptr + GDK_VAROFFSET;
                                break;
                        case 2:
@@ -1525,6 +1525,8 @@ BUNinplacemulti(BAT *b, const oid *posit
                                _d = (var_t) * (uint64_t *) _ptr;
                                break;
 #endif
+                       default:
+                               MT_UNREACHABLE();
                        }
                        if (ATOMreplaceVAR(b, &_d, t) != GDK_SUCCEED) {
                                MT_rwlock_wrunlock(&b->thashlock);
@@ -1549,7 +1551,7 @@ BUNinplacemulti(BAT *b, const oid *posit
                        }
                        _ptr = BUNtloc(bi, p);
                        switch (b->twidth) {
-                       default:        /* only three or four cases possible */
+                       case 1:
                                * (uint8_t *) _ptr = (uint8_t) (_d - 
GDK_VAROFFSET);
                                break;
                        case 2:
@@ -1563,6 +1565,8 @@ BUNinplacemulti(BAT *b, const oid *posit
                                * (uint64_t *) _ptr = (uint64_t) _d;
                                break;
 #endif
+                       default:
+                               MT_UNREACHABLE();
                        }
                } else if (ATOMstorage(b->ttype) == TYPE_msk) {
                        mskSetVal(b, p, * (msk *) t);
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -211,7 +211,7 @@ insert_string_bat(BAT *b, BAT *n, struct
                        break;
 #endif
                default:
-                       assert(0);
+                       MT_UNREACHABLE();
                }
                MT_thread_setalgorithm("copy offset values");
                r = b->batCount;
@@ -1239,7 +1239,7 @@ BATappend_or_update(BAT *b, BAT *p, cons
 
                        var_t d;
                        switch (b->twidth) {
-                       default: /* only three or four cases possible */
+                       case 1:
                                d = (var_t) ((uint8_t *) b->theap->base)[updid] 
+ GDK_VAROFFSET;
                                break;
                        case 2:
@@ -1253,6 +1253,8 @@ BATappend_or_update(BAT *b, BAT *p, cons
                                d = (var_t) ((uint64_t *) 
b->theap->base)[updid];
                                break;
 #endif
+                       default:
+                               MT_UNREACHABLE();
                        }
                        if (ATOMreplaceVAR(b, &d, new) != GDK_SUCCEED) {
                                goto bailout;
@@ -1290,6 +1292,8 @@ BATappend_or_update(BAT *b, BAT *p, cons
                                ((uint64_t *) b->theap->base)[updid] = 
(uint64_t) d;
                                break;
 #endif
+                       default:
+                               MT_UNREACHABLE();
                        }
                        HASHinsert_locked(b, updid, new);
 
@@ -2909,16 +2913,16 @@ BATcount_no_nil(BAT *b, BAT *s)
                switch (bi.width) {
                case 1:
                        for (i = 0; i < n; i++)
-                               cnt += base[(var_t) ((const unsigned char *) 
p)[canditer_next(&ci) - hseq] + GDK_VAROFFSET] != '\200';
+                               cnt += base[(var_t) ((const uint8_t *) 
p)[canditer_next(&ci) - hseq] + GDK_VAROFFSET] != '\200';
                        break;
                case 2:
                        for (i = 0; i < n; i++)
-                               cnt += base[(var_t) ((const unsigned short *) 
p)[canditer_next(&ci) - hseq] + GDK_VAROFFSET] != '\200';
+                               cnt += base[(var_t) ((const uint16_t *) 
p)[canditer_next(&ci) - hseq] + GDK_VAROFFSET] != '\200';
                        break;
 #if SIZEOF_VAR_T != SIZEOF_INT
                case 4:
                        for (i = 0; i < n; i++)
-                               cnt += base[(var_t) ((const unsigned int *) 
p)[canditer_next(&ci) - hseq]] != '\200';
+                               cnt += base[(var_t) ((const uint32_t *) 
p)[canditer_next(&ci) - hseq]] != '\200';
                        break;
 #endif
                default:
diff --git a/gdk/gdk_cand.h b/gdk/gdk_cand.h
--- a/gdk/gdk_cand.h
+++ b/gdk/gdk_cand.h
@@ -163,12 +163,10 @@ canditer_next(struct canditer *ci)
        case cand_except:
                return canditer_next_except(ci);
        case cand_mask:
-               /* work around compiler error: control reaches end of
-                * non-void function */
-               break;
+               return canditer_next_mask(ci);
+       default:
+               MT_UNREACHABLE();
        }
-       assert(ci->tpe == cand_mask);
-       return canditer_next_mask(ci);
 }
 
 #define canditer_search_dense(ci, o, next) ((o) < (ci)->seq ? next ? 0 : 
BUN_NONE : (o) >= (ci)->seq + (ci)->ncand ? next ? (ci)->ncand : BUN_NONE : (o) 
- (ci)->seq)
diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -906,7 +906,7 @@ BATgroup_internal(BAT **groups, BAT **ex
                        break;
 #endif
                default:
-                       assert(0);
+                       MT_UNREACHABLE();
                }
        }
 
diff --git a/gdk/gdk_hash.h b/gdk/gdk_hash.h
--- a/gdk/gdk_hash.h
+++ b/gdk/gdk_hash.h
@@ -67,7 +67,7 @@ HASHput(Hash *h, BUN i, BUN v)
                ((BUN2type *) h->Bckt)[i] = (BUN2type) v;
                break;
 #endif
-       default:                /* BUN4 */
+       case BUN4:
                ((BUN4type *) h->Bckt)[i] = (BUN4type) v;
                break;
 #ifdef BUN8
@@ -75,6 +75,8 @@ HASHput(Hash *h, BUN i, BUN v)
                ((BUN8type *) h->Bckt)[i] = (BUN8type) v;
                break;
 #endif
+       default:
+               MT_UNREACHABLE();
        }
 }
 
@@ -90,7 +92,7 @@ HASHputlink(Hash *h, BUN i, BUN v)
                ((BUN2type *) h->Link)[i] = (BUN2type) v;
                break;
 #endif
-       default:                /* BUN4 */
+       case BUN4:
                assert(v == BUN_NONE || v == BUN4_NONE || v < i);
                ((BUN4type *) h->Link)[i] = (BUN4type) v;
                break;
@@ -100,6 +102,8 @@ HASHputlink(Hash *h, BUN i, BUN v)
                ((BUN8type *) h->Link)[i] = (BUN8type) v;
                break;
 #endif
+       default:
+               MT_UNREACHABLE();
        }
 }
 
@@ -112,7 +116,7 @@ HASHget(const Hash *h, BUN i)
                i = (BUN) ((BUN2type *) h->Bckt)[i];
                return i == BUN2_NONE ? BUN_NONE : i;
 #endif
-       default:                /* BUN4 */
+       case BUN4:
                i = (BUN) ((BUN4type *) h->Bckt)[i];
                return i == BUN4_NONE ? BUN_NONE : i;
 #ifdef BUN8
@@ -120,6 +124,8 @@ HASHget(const Hash *h, BUN i)
                i = (BUN) ((BUN8type *) h->Bckt)[i];
                return i == BUN8_NONE ? BUN_NONE : i;
 #endif
+       default:
+               MT_UNREACHABLE();
        }
 }
 
@@ -132,7 +138,7 @@ HASHgetlink(const Hash *h, BUN i)
                i = (BUN) ((BUN2type *) h->Link)[i];
                return i == BUN2_NONE ? BUN_NONE : i;
 #endif
-       default:                /* BUN4 */
+       case BUN4:
                i = (BUN) ((BUN4type *) h->Link)[i];
                return i == BUN4_NONE ? BUN_NONE : i;
 #ifdef BUN8
@@ -140,6 +146,8 @@ HASHgetlink(const Hash *h, BUN i)
                i = (BUN) ((BUN8type *) h->Link)[i];
                return i == BUN8_NONE ? BUN_NONE : i;
 #endif
+       default:
+               MT_UNREACHABLE();
        }
 }
 
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -777,8 +777,10 @@ gettailnamebi(const BATiter *bi)
        case 4:
                return "tail4";
 #endif
+       case 8:
+               return "tail";
        default:
-               return "tail";
+               MT_UNREACHABLE();
        }
 }
 
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -80,6 +80,19 @@
 #define __warn_unused_result__
 #endif
 
+/* unreachable code */
+#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 
5))
+#define MT_UNREACHABLE()       do { assert(0); __builtin_unreachable(); } 
while (0)
+#elif defined(__clang__) || defined(__INTEL_COMPILER)
+#define MT_UNREACHABLE()       do { assert(0); __builtin_unreachable(); } 
while (0)
+#elif defined(_MSC_VER)
+#define MT_UNREACHABLE()       do { assert(0); __assume(0); } while (0)
+#else
+/* we don't know how to tell the compiler, so call a function that
+ * doesn't return */
+#define MT_UNREACHABLE()       do { assert(0); GDKfatal("Unreachable C code 
path reached"); } while (0)
+#endif
+
 /* also see gdk.h for these */
 #define THRDMASK       (1)
 #define TEMMASK                (1<<10)
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to