1221339Sdim//===--- DelayedDiagnostic.cpp - Delayed declarator diagnostics -*- C++ -*-===// 2221339Sdim// 3221339Sdim// The LLVM Compiler Infrastructure 4221339Sdim// 5221339Sdim// This file is distributed under the University of Illinois Open Source 6221339Sdim// License. See LICENSE.TXT for details. 7221339Sdim// 8221339Sdim//===----------------------------------------------------------------------===// 9221339Sdim// 10221339Sdim// This file defines the DelayedDiagnostic class implementation, which 11221339Sdim// is used to record diagnostics that are being conditionally produced 12221339Sdim// during declarator parsing. 13221339Sdim// 14221339Sdim// This file also defines AccessedEntity. 15221339Sdim// 16221339Sdim//===----------------------------------------------------------------------===// 17221339Sdim#include "clang/Sema/DelayedDiagnostic.h" 18221339Sdim#include <string.h> 19221339Sdimusing namespace clang; 20221339Sdimusing namespace sema; 21221339Sdim 22221339SdimDelayedDiagnostic DelayedDiagnostic::makeDeprecation(SourceLocation Loc, 23234353Sdim const NamedDecl *D, 24234353Sdim const ObjCInterfaceDecl *UnknownObjCClass, 25243830Sdim const ObjCPropertyDecl *ObjCProperty, 26234353Sdim StringRef Msg) { 27221339Sdim DelayedDiagnostic DD; 28221339Sdim DD.Kind = Deprecation; 29221339Sdim DD.Triggered = false; 30221339Sdim DD.Loc = Loc; 31221339Sdim DD.DeprecationData.Decl = D; 32234353Sdim DD.DeprecationData.UnknownObjCClass = UnknownObjCClass; 33243830Sdim DD.DeprecationData.ObjCProperty = ObjCProperty; 34221339Sdim char *MessageData = 0; 35221339Sdim if (Msg.size()) { 36221339Sdim MessageData = new char [Msg.size()]; 37221339Sdim memcpy(MessageData, Msg.data(), Msg.size()); 38221339Sdim } 39221339Sdim 40221339Sdim DD.DeprecationData.Message = MessageData; 41221339Sdim DD.DeprecationData.MessageLen = Msg.size(); 42221339Sdim return DD; 43221339Sdim} 44221339Sdim 45221339Sdimvoid DelayedDiagnostic::Destroy() { 46221339Sdim switch (Kind) { 47221339Sdim case Access: 48221339Sdim getAccessData().~AccessedEntity(); 49221339Sdim break; 50221339Sdim 51221339Sdim case Deprecation: 52221339Sdim delete [] DeprecationData.Message; 53221339Sdim break; 54224145Sdim 55224145Sdim case ForbiddenType: 56224145Sdim break; 57221339Sdim } 58221339Sdim} 59