diff options
Diffstat (limited to 'lib/Sema/DelayedDiagnostic.cpp')
| -rw-r--r-- | lib/Sema/DelayedDiagnostic.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/lib/Sema/DelayedDiagnostic.cpp b/lib/Sema/DelayedDiagnostic.cpp index 3d321d561e60..122b477d5522 100644 --- a/lib/Sema/DelayedDiagnostic.cpp +++ b/lib/Sema/DelayedDiagnostic.cpp @@ -1,4 +1,4 @@ -//===--- DelayedDiagnostic.cpp - Delayed declarator diagnostics -*- C++ -*-===// +//===- DelayedDiagnostic.cpp - Delayed declarator diagnostics -------------===// // // The LLVM Compiler Infrastructure // @@ -14,36 +14,44 @@ // This file also defines AccessedEntity. // //===----------------------------------------------------------------------===// + #include "clang/Sema/DelayedDiagnostic.h" -#include <string.h> +#include <cstring> + using namespace clang; using namespace sema; DelayedDiagnostic DelayedDiagnostic::makeAvailability(AvailabilityResult AR, - SourceLocation Loc, + ArrayRef<SourceLocation> Locs, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, StringRef Msg, bool ObjCPropertyAccess) { + assert(!Locs.empty()); DelayedDiagnostic DD; DD.Kind = Availability; DD.Triggered = false; - DD.Loc = Loc; + DD.Loc = Locs.front(); DD.AvailabilityData.ReferringDecl = ReferringDecl; DD.AvailabilityData.OffendingDecl = OffendingDecl; DD.AvailabilityData.UnknownObjCClass = UnknownObjCClass; DD.AvailabilityData.ObjCProperty = ObjCProperty; char *MessageData = nullptr; - if (Msg.size()) { + if (!Msg.empty()) { MessageData = new char [Msg.size()]; memcpy(MessageData, Msg.data(), Msg.size()); } - DD.AvailabilityData.Message = MessageData; DD.AvailabilityData.MessageLen = Msg.size(); + + DD.AvailabilityData.SelectorLocs = new SourceLocation[Locs.size()]; + memcpy(DD.AvailabilityData.SelectorLocs, Locs.data(), + sizeof(SourceLocation) * Locs.size()); + DD.AvailabilityData.NumSelectorLocs = Locs.size(); + DD.AvailabilityData.AR = AR; DD.AvailabilityData.ObjCPropertyAccess = ObjCPropertyAccess; return DD; @@ -57,6 +65,7 @@ void DelayedDiagnostic::Destroy() { case Availability: delete[] AvailabilityData.Message; + delete[] AvailabilityData.SelectorLocs; break; case ForbiddenType: |
