Diagnostic.h revision 7bfaaaecb3113f955db31e8d8a51acffd1bc0c27
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===--- Diagnostic.h - C Language Family Diagnostic Handling ---*- C++ -*-===// 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// The LLVM Compiler Infrastructure 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details. 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// This file defines the Diagnostic-related interfaces. 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#ifndef LLVM_CLANG_DIAGNOSTIC_H 155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define LLVM_CLANG_DIAGNOSTIC_H 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 172eefd8657c233bc7c9330acfe475fc270bbe7cabTed Kremenek#include "clang/Basic/SourceLocation.h" 185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <string> 19f86638365f4801ec2d2970f7c0663e94590618b8Chris Lattner#include <cassert> 205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace clang { 225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer class DiagnosticClient; 235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer class SourceRange; 247a9d49fd2bfac00e905b361ba76d26ab5b6c3b09Ted Kremenek class SourceManager; 255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Import the diagnostic enums themselves. 275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer namespace diag { 28182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner class CustomDiagInfo; 29182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner 305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// diag::kind - All of the diagnostics that can be emitted by the frontend. 315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer enum kind { 325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define DIAG(ENUM,FLAGS,DESC) ENUM, 335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "DiagnosticKinds.def" 340750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner NUM_BUILTIN_DIAGNOSTICS 355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer }; 365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// Enum values that allow the client to map NOTEs, WARNINGs, and EXTENSIONs 385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// to either MAP_IGNORE (nothing), MAP_WARNING (emit a warning), MAP_ERROR 395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// (emit as an error), or MAP_DEFAULT (handle the default way). 405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer enum Mapping { 415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer MAP_DEFAULT = 0, //< Do not map this diagnostic. 425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer MAP_IGNORE = 1, //< Map this diagnostic to nothing, ignore it. 435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer MAP_WARNING = 2, //< Map this diagnostic to a warning. 445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer MAP_ERROR = 3 //< Map this diagnostic to an error. 455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer }; 465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// Diagnostic - This concrete class is used by the front-end to report 495f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// problems and issues. It massages the diagnostics (e.g. handling things like 505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// "report warnings as errors" and passes them off to the DiagnosticClient for 515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// reporting to the user. 525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass Diagnostic { 53182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattnerpublic: 54182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner /// Level - The level of the diagnostic, after it has been through mapping. 55182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner enum Level { 56182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner Ignored, Note, Warning, Error, Fatal 57182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner }; 58182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner 59182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattnerprivate: 605b4681c8ef65808ec4d72ab6081efd24d53d4969Chris Lattner bool IgnoreAllWarnings; // Ignore all warnings: -w 615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool WarningsAsErrors; // Treat warnings like errors: 625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool WarnOnExtensions; // Enables warnings for gcc extensions: -pedantic. 635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool ErrorOnExtensions; // Error on extensions: -pedantic-errors. 64b4398aa27da4d6919c3ae448d1ae66ba6cafc048Ted Kremenek DiagnosticClient *Client; 655f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 665f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// DiagMappings - Mapping information for diagnostics. Mapping info is 675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// packed into two bits per diagnostic. 680750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner unsigned char DiagMappings[(diag::NUM_BUILTIN_DIAGNOSTICS+3)/4]; 695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// ErrorOccurred - This is set to true when an error is emitted, and is 715f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// sticky. 725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool ErrorOccurred; 735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned NumDiagnostics; // Number of diagnostics reported 755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned NumErrors; // Number of diagnostics that are errors 76182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner 77182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner /// CustomDiagInfo - Information for uniquing and looking up custom diags. 78182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner diag::CustomDiagInfo *CustomDiagInfo; 797bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber 805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 817bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber explicit Diagnostic(DiagnosticClient *client = 0); 82182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner ~Diagnostic(); 835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //===--------------------------------------------------------------------===// 855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Diagnostic characterization methods, used by a client to customize how 865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // 872bf78fba7a37a42d4295999706053fdf4c9625e2Ted Kremenek 887bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber DiagnosticClient *getClient() { return Client; }; 897bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber const DiagnosticClient *getClient() const { return Client; }; 90b4398aa27da4d6919c3ae448d1ae66ba6cafc048Ted Kremenek 91b4398aa27da4d6919c3ae448d1ae66ba6cafc048Ted Kremenek void setClient(DiagnosticClient* client) { Client = client; } 925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 935b4681c8ef65808ec4d72ab6081efd24d53d4969Chris Lattner /// setIgnoreAllWarnings - When set to true, any unmapped warnings are 945b4681c8ef65808ec4d72ab6081efd24d53d4969Chris Lattner /// ignored. If this and WarningsAsErrors are both set, then this one wins. 955b4681c8ef65808ec4d72ab6081efd24d53d4969Chris Lattner void setIgnoreAllWarnings(bool Val) { IgnoreAllWarnings = Val; } 965b4681c8ef65808ec4d72ab6081efd24d53d4969Chris Lattner bool getIgnoreAllWarnings() const { return IgnoreAllWarnings; } 975b4681c8ef65808ec4d72ab6081efd24d53d4969Chris Lattner 985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// setWarningsAsErrors - When set to true, any warnings reported are issued 995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// as errors. 1005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer void setWarningsAsErrors(bool Val) { WarningsAsErrors = Val; } 1015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool getWarningsAsErrors() const { return WarningsAsErrors; } 1025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// setWarnOnExtensions - When set to true, issue warnings on GCC extensions, 1045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// the equivalent of GCC's -pedantic. 1055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer void setWarnOnExtensions(bool Val) { WarnOnExtensions = Val; } 1065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool getWarnOnExtensions() const { return WarnOnExtensions; } 1075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// setErrorOnExtensions - When set to true issue errors for GCC extensions 1095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// instead of warnings. This is the equivalent to GCC's -pedantic-errors. 1105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer void setErrorOnExtensions(bool Val) { ErrorOnExtensions = Val; } 1115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool getErrorOnExtensions() const { return ErrorOnExtensions; } 1125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// setDiagnosticMapping - This allows the client to specify that certain 1145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// warnings are ignored. Only NOTEs, WARNINGs, and EXTENSIONs can be mapped. 1155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer void setDiagnosticMapping(diag::kind Diag, diag::Mapping Map) { 1160750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner assert(Diag < diag::NUM_BUILTIN_DIAGNOSTICS && 1170750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner "Can only map builtin diagnostics"); 1180750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner assert(isBuiltinNoteWarningOrExtension(Diag) && "Cannot map errors!"); 1195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned char &Slot = DiagMappings[Diag/4]; 1205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned Bits = (Diag & 3)*2; 1215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Slot &= ~(3 << Bits); 1225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Slot |= Map << Bits; 1235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// getDiagnosticMapping - Return the mapping currently set for the specified 1265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// diagnostic. 1275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer diag::Mapping getDiagnosticMapping(diag::kind Diag) const { 1285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return (diag::Mapping)((DiagMappings[Diag/4] >> (Diag & 3)*2) & 3); 1295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool hasErrorOccurred() const { return ErrorOccurred; } 1325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned getNumErrors() const { return NumErrors; } 1345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned getNumDiagnostics() const { return NumDiagnostics; } 1355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 136182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner /// getCustomDiagID - Return an ID for a diagnostic with the specified message 137182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner /// and level. If this is the first request for this diagnosic, it is 138182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner /// registered and created, otherwise the existing ID is returned. 139182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner unsigned getCustomDiagID(Level L, const char *Message); 140182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner 1415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer //===--------------------------------------------------------------------===// 1425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Diagnostic classification and reporting interfaces. 1435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // 1445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// getDescription - Given a diagnostic ID, return a description of the 1465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// issue. 1470750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner const char *getDescription(unsigned DiagID); 1485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1490750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner /// isBuiltinNoteWarningOrExtension - Return true if the unmapped diagnostic 1500750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner /// level of the specified diagnostic ID is a Note, Warning, or Extension. 1510750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner /// Note that this only works on builtin diagnostics, not custom ones. 1520750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner static bool isBuiltinNoteWarningOrExtension(unsigned DiagID); 1535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// getDiagnosticLevel - Based on the way the client configured the Diagnostic 1555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// object, classify the specified diagnostic ID into a Level, consumable by 1565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// the DiagnosticClient. 1575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Level getDiagnosticLevel(unsigned DiagID) const; 1585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// Report - Issue the message to the client. DiagID is a member of the 1605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// diag::kind enum. 1619c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek void Report(FullSourceLoc Pos, unsigned DiagID, 1625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const std::string *Strs = 0, unsigned NumStrs = 0, 163615f5177095e62b36bf88f1b1b7b644295e4097bTed Kremenek const SourceRange *Ranges = 0, unsigned NumRanges = 0) { 164615f5177095e62b36bf88f1b1b7b644295e4097bTed Kremenek Report(NULL, Pos, DiagID, Strs, NumStrs, Ranges, NumRanges); 165615f5177095e62b36bf88f1b1b7b644295e4097bTed Kremenek } 1662eefd8657c233bc7c9330acfe475fc270bbe7cabTed Kremenek 1672eefd8657c233bc7c9330acfe475fc270bbe7cabTed Kremenek /// Report - Issue the message to the client. DiagID is a member of the 1682eefd8657c233bc7c9330acfe475fc270bbe7cabTed Kremenek /// diag::kind enum. 1699c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek void Report(unsigned DiagID, 1709c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek const std::string *Strs = 0, unsigned NumStrs = 0, 1719c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek const SourceRange *Ranges = 0, unsigned NumRanges = 0) { 172615f5177095e62b36bf88f1b1b7b644295e4097bTed Kremenek Report(FullSourceLoc(), DiagID, Strs, NumStrs, Ranges, NumRanges); 1732eefd8657c233bc7c9330acfe475fc270bbe7cabTed Kremenek } 174615f5177095e62b36bf88f1b1b7b644295e4097bTed Kremenek 175615f5177095e62b36bf88f1b1b7b644295e4097bTed Kremenek /// Report - Issue the message to the specified client. 176615f5177095e62b36bf88f1b1b7b644295e4097bTed Kremenek /// DiagID is a member of the diag::kind enum. 177615f5177095e62b36bf88f1b1b7b644295e4097bTed Kremenek void Report(DiagnosticClient* C, FullSourceLoc Pos, unsigned DiagID, 178615f5177095e62b36bf88f1b1b7b644295e4097bTed Kremenek const std::string *Strs = 0, unsigned NumStrs = 0, 179615f5177095e62b36bf88f1b1b7b644295e4097bTed Kremenek const SourceRange *Ranges = 0, unsigned NumRanges = 0); 1805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 1815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// DiagnosticClient - This is an abstract interface implemented by clients of 1835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// the front-end, which formats and prints fully processed diagnostics. 1845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass DiagnosticClient { 1857bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weberprotected: 1867bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber std::string FormatDiagnostic(Diagnostic &Diags, Diagnostic::Level Level, 1877bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber diag::kind ID, 1887bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber const std::string *Strs, 1897bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber unsigned NumStrs); 1905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 1915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual ~DiagnosticClient(); 1925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// HandleDiagnostic - Handle this diagnostic, reporting it to the user or 1945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// capturing it to a log as needed. 1950750618b0beacdc9b0a9e210a661e4746823ced7Chris Lattner virtual void HandleDiagnostic(Diagnostic &Diags, 1969c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek Diagnostic::Level DiagLevel, 1979c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek FullSourceLoc Pos, 1989c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek diag::kind ID, 1997a9d49fd2bfac00e905b361ba76d26ab5b6c3b09Ted Kremenek const std::string *Strs, 2009c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek unsigned NumStrs, 2019c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek const SourceRange *Ranges, 2025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned NumRanges) = 0; 2035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 2045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} // end namespace clang 2065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#endif 208