Skip to content

Commit e055def

Browse files
committed
Make TableGen definitions clearer and add additional assertions
1 parent 70f1cb6 commit e055def

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

clang/include/clang/Basic/BuiltinsBase.td

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,15 @@ def NoThrow : Attribute<"n">;
3333
def Pure : Attribute<"U">;
3434
def ReturnsTwice : Attribute<"j">;
3535

36-
class NonNullOptMode {
37-
int value;
36+
class NonNullOptMode<int mode> {
37+
int value = mode;
3838
}
3939

40-
def NonOptimizing : NonNullOptMode { let value = 0; }
41-
def Optimizing : NonNullOptMode { let value = 1; }
40+
def NonOptimizing : NonNullOptMode<0>;
41+
def Optimizing : NonNullOptMode<1>;
4242

43-
class NonNull<NonNullOptMode Mode, list<int> Is> : MultiIndexAttribute<"N", Is> {
43+
class NonNull<NonNullOptMode Mode, list<int> Is> : MultiIndexAttribute<"N:" # Mode.value # ":", Is> {
4444
int optMode = Mode.value;
45-
let Mangling = "N:" # Mode.value # ":";
4645
}
4746

4847
// builtin-specific attributes

clang/lib/Basic/Builtins.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,14 +320,18 @@ bool Builtin::Context::isNonNull(unsigned ID, llvm::SmallVectorImpl<int> &Indxs,
320320
if (!AttrPos)
321321
return false;
322322

323-
AttrPos += 2; // skip 'N' and ':'
323+
++AttrPos;
324+
assert(*AttrPos == ':' && "Format specifier must be followed by a ':'");
325+
++AttrPos;
324326
if (*AttrPos == '0')
325327
Mode = Info::NonNullMode::NonOptimizing;
326328
else if (*AttrPos == '1')
327329
Mode = Info::NonNullMode::Optimizing;
328330
else
329331
llvm_unreachable("Unrecognized NonNull optimization mode");
330-
AttrPos += 2; // skip mode and ':'
332+
++AttrPos; // skip mode
333+
assert(*AttrPos == ':' && "Mode must be followed by a ':'");
334+
++AttrPos;
331335

332336
parseCommaSeparatedIndices(AttrPos, Indxs);
333337

0 commit comments

Comments
 (0)