[llvm] r313041 - Statically assert that enum items don't overflow storage.

Adrian Prantl via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 12 09:10:24 PDT 2017


Author: adrian
Date: Tue Sep 12 09:10:24 2017
New Revision: 313041

URL: http://llvm.org/viewvc/llvm-project?rev=313041&view=rev
Log:
Statically assert that enum items don't overflow storage.

Modified:
    llvm/trunk/include/llvm/DebugInfo/DIContext.h

Modified: llvm/trunk/include/llvm/DebugInfo/DIContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DIContext.h?rev=313041&r1=313040&r2=313041&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/DIContext.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/DIContext.h Tue Sep 12 09:10:24 2017
@@ -112,7 +112,6 @@ struct DILineInfoSpecifier {
       : FLIKind(FLIKind), FNKind(FNKind) {}
 };
 
-namespace {
 /// This is just a helper to programmatically construct DIDumpType.
 enum DIDumpTypeCounter {
   DIDT_ID_Null = 0,
@@ -120,15 +119,16 @@ enum DIDumpTypeCounter {
   DIDT_ID##ENUM_NAME,
 #include "llvm/BinaryFormat/Dwarf.def"
 #undef HANDLE_DWARF_SECTION
+  DIDT_ID_Count,
 };
-}
+  static_assert(DIDT_ID_Count <= 64, "section types overflow storage");
 
 /// Selects which debug sections get dumped.
 enum DIDumpType : uint64_t {
   DIDT_Null,
   DIDT_All             = ~0ULL,
 #define HANDLE_DWARF_SECTION(ENUM_NAME, ELF_NAME, CMDLINE_NAME) \
-  DIDT_##ENUM_NAME = 1 << DIDT_ID##ENUM_NAME,
+  DIDT_##ENUM_NAME = 1 << (DIDT_ID##ENUM_NAME - 1),
 #include "llvm/BinaryFormat/Dwarf.def"
 #undef HANDLE_DWARF_SECTION
 };




More information about the llvm-commits mailing list