mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
DebugInfo: Require valid DIDescriptors
As part of PR22777, switch from `dyn_cast_or_null<>` to `cast<>` in most `DIDescriptor` accessors. These classes are lightweight wrappers around pointers, so the users should check for valid pointers before using them. This survives a Darwin clang -g bootstrap (after fixing testcases), but it's possible the bots will complain about other configurations. I'll fix any fallout as quickly as I can! Once this bakes for a bit I'll remove the macros. Note that `DebugLoc` implicitly gets stricter with this change as well, since it forward to `DILocation`. Any code that's using `DebugLoc` accessors should check `DebugLoc::isUnknown()` first. (BTW, I'm also partway through a cleanup of the `DebugLoc` API to make it more obvious what it is (a glorified pointer wrapper) and remove cruft from before the Metadata/Value split. I'll commit soon.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232844 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d80979b25d
commit
e2305f7e90
@ -266,23 +266,26 @@ public:
|
||||
void replaceAllUsesWith(MDNode *D);
|
||||
};
|
||||
|
||||
#define RETURN_FROM_RAW(VALID, DEFAULT) \
|
||||
#define RETURN_FROM_RAW(VALID, UNUSED) \
|
||||
do { \
|
||||
if (auto *N = getRaw()) \
|
||||
return VALID; \
|
||||
return DEFAULT; \
|
||||
assert(this->DbgNode && "Expected non-null in accessor"); \
|
||||
auto *N = getRaw(); \
|
||||
assert(N && "Expected correct subclass in accessor"); \
|
||||
return VALID; \
|
||||
} while (false)
|
||||
#define RETURN_DESCRIPTOR_FROM_RAW(DESC, VALID) \
|
||||
do { \
|
||||
if (auto *N = getRaw()) \
|
||||
return DESC(dyn_cast_or_null<MDNode>(VALID)); \
|
||||
return DESC(static_cast<const MDNode *>(nullptr)); \
|
||||
assert(this->DbgNode && "Expected non-null in accessor"); \
|
||||
auto *N = getRaw(); \
|
||||
assert(N && "Expected correct subclass in accessor"); \
|
||||
return DESC(dyn_cast_or_null<MDNode>(VALID)); \
|
||||
} while (false)
|
||||
#define RETURN_REF_FROM_RAW(REF, VALID) \
|
||||
do { \
|
||||
if (auto *N = getRaw()) \
|
||||
return REF::get(VALID); \
|
||||
return REF::get(nullptr); \
|
||||
assert(this->DbgNode && "Expected non-null in accessor"); \
|
||||
auto *N = getRaw(); \
|
||||
assert(N && "Expected correct subclass in accessor"); \
|
||||
return REF::get(VALID); \
|
||||
} while (false)
|
||||
|
||||
/// \brief This is used to represent ranges, for array bounds.
|
||||
|
Loading…
Reference in New Issue
Block a user