1//===--- DelayedDiagnostic.cpp - Delayed declarator diagnostics -*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines the DelayedDiagnostic class implementation, which 11// is used to record diagnostics that are being conditionally produced 12// during declarator parsing. 13// 14// This file also defines AccessedEntity. 15// 16//===----------------------------------------------------------------------===// 17#include "clang/Sema/DelayedDiagnostic.h" 18#include <string.h> 19using namespace clang; 20using namespace sema; 21 22DelayedDiagnostic DelayedDiagnostic::makeDeprecation(SourceLocation Loc, 23 const NamedDecl *D, 24 const ObjCInterfaceDecl *UnknownObjCClass, 25 StringRef Msg) { 26 DelayedDiagnostic DD; 27 DD.Kind = Deprecation; 28 DD.Triggered = false; 29 DD.Loc = Loc; 30 DD.DeprecationData.Decl = D; 31 DD.DeprecationData.UnknownObjCClass = UnknownObjCClass; 32 char *MessageData = 0; 33 if (Msg.size()) { 34 MessageData = new char [Msg.size()]; 35 memcpy(MessageData, Msg.data(), Msg.size()); 36 } 37 38 DD.DeprecationData.Message = MessageData; 39 DD.DeprecationData.MessageLen = Msg.size(); 40 return DD; 41} 42 43void DelayedDiagnostic::Destroy() { 44 switch (Kind) { 45 case Access: 46 getAccessData().~AccessedEntity(); 47 break; 48 49 case Deprecation: 50 delete [] DeprecationData.Message; 51 break; 52 53 case ForbiddenType: 54 break; 55 } 56} 57