Skip to content

Commit 3b1d0fb

Browse files
author
Daniel Kroening
committed
ID_* symbols are now constexpr
1 parent e3ff246 commit 3b1d0fb

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

src/util/irep_ids.cpp

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,30 +27,15 @@ const char *irep_ids_table[]=
2727

2828
#ifdef USE_DSTRING
2929

30-
enum class idt:unsigned
31-
{
32-
#define IREP_ID_ONE(the_id) id_##the_id,
33-
#define IREP_ID_TWO(the_id, str) id_##the_id,
34-
35-
#include "irep_ids.def" // NOLINT(build/include)
36-
};
37-
38-
#define IREP_ID_ONE(the_id) \
39-
const dstringt ID_##the_id=dstringt::make_from_table_index( \
40-
static_cast<unsigned>(idt::id_##the_id));
41-
#define IREP_ID_TWO(the_id, str) \
42-
const dstringt ID_##the_id=dstringt::make_from_table_index( \
43-
static_cast<unsigned>(idt::id_##the_id));
44-
4530
#else
4631

4732
#define IREP_ID_ONE(the_id) const std::string ID_##the_id(#the_id);
4833
#define IREP_ID_TWO(the_id, str) const std::string ID_##the_id(#the_id);
4934

50-
#endif
51-
5235
#include "irep_ids.def" // NOLINT(build/include)
5336

37+
#endif
38+
5439
string_containert::string_containert()
5540
{
5641
// pre-allocate empty string -- this gets index 0

src/util/irep_ids.h

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,38 @@ Author: Reuben Thomas, [email protected]
3636

3737
#ifdef USE_DSTRING
3838

39-
#define IREP_ID_ONE(the_id) extern const dstringt ID_##the_id;
40-
#define IREP_ID_TWO(the_id, str) extern const dstringt ID_##the_id;
39+
enum class idt : unsigned
40+
{
41+
#define IREP_ID_ONE(the_id) id_##the_id,
42+
#define IREP_ID_TWO(the_id, str) id_##the_id,
43+
44+
#include "irep_ids.def" // NOLINT(build/include)
45+
};
46+
47+
#ifdef __GNUC__
48+
#define IREP_ID_ONE(the_id) \
49+
constexpr dstringt ID_##the_id=dstringt::make_from_table_index( \
50+
static_cast<unsigned>(idt::id_##the_id));
51+
#define IREP_ID_TWO(the_id, str) \
52+
constexpr dstringt ID_##the_id=dstringt::make_from_table_index( \
53+
static_cast<unsigned>(idt::id_##the_id));
54+
#else
55+
#define IREP_ID_ONE(the_id) \
56+
const dstringt ID_##the_id=dstringt::make_from_table_index( \
57+
static_cast<unsigned>(idt::id_##the_id));
58+
#define IREP_ID_TWO(the_id, str) \
59+
const const dstringt ID_##the_id=dstringt::make_from_table_index( \
60+
static_cast<unsigned>(idt::id_##the_id));
61+
#endif
62+
63+
template <>
64+
struct diagnostics_helpert<irep_idt>
65+
{
66+
static std::string diagnostics_as_string(const irep_idt &irep_id)
67+
{
68+
return as_string(irep_id);
69+
}
70+
};
4171

4272
#else
4373

0 commit comments

Comments
 (0)