From: Daniel Dunbar Date: Thu, 12 Mar 2009 10:14:16 +0000 (+0000) Subject: Add Diagnostic files for Frontend and move a couple errors over. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=50f4f469024928670f2d634c445686d00eeb89b7;p=clang Add Diagnostic files for Frontend and move a couple errors over. - Notably, clang now exits with an error if it can't find a file. This flushed out a bug in the CGColorSpace.c test case. :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66789 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/clang.cpp b/Driver/clang.cpp index c4145c01a7..a0195c629a 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -25,8 +25,9 @@ #include "clang.h" #include "ASTConsumers.h" #include "clang/Frontend/CompileOptions.h" -#include "clang/Frontend/PathDiagnosticClients.h" +#include "clang/Frontend/FrontendDiagnostic.h" #include "clang/Frontend/InitHeaderSearch.h" +#include "clang/Frontend/PathDiagnosticClients.h" #include "clang/Frontend/TextDiagnosticBuffer.h" #include "clang/Frontend/TextDiagnosticPrinter.h" #include "clang/Analysis/PathDiagnostic.h" @@ -857,14 +858,16 @@ static bool InitializePreprocessor(Preprocessor &PP, const FileEntry *File = FileMgr.getFile(InFile); if (File) SourceMgr.createMainFileID(File, SourceLocation()); if (SourceMgr.getMainFileID().isInvalid()) { - fprintf(stderr, "Error reading '%s'!\n",InFile.c_str()); + PP.getDiagnostics().Report(FullSourceLoc(), diag::err_fe_error_reading) + << InFile.c_str(); return true; } } else { llvm::MemoryBuffer *SB = llvm::MemoryBuffer::getSTDIN(); if (SB) SourceMgr.createMainFileIDForMemBuffer(SB); if (SourceMgr.getMainFileID().isInvalid()) { - fprintf(stderr, "Error reading standard input! Empty?\n"); + PP.getDiagnostics().Report(FullSourceLoc(), + diag::err_fe_error_reading_stdin); return true; } } @@ -1525,9 +1528,8 @@ int main(int argc, char **argv) { llvm::OwningPtr Target(TargetInfo::CreateTargetInfo(Triple)); if (Target == 0) { - fprintf(stderr, "Sorry, I don't know what target this is: %s\n", - Triple.c_str()); - fprintf(stderr, "Please use -triple or -arch.\n"); + Diags.Report(FullSourceLoc(), diag::err_fe_unknown_triple) + << Triple.c_str(); return 1; } diff --git a/include/clang/Basic/Diagnostic.h b/include/clang/Basic/Diagnostic.h index f504cad29f..bcec5d9334 100644 --- a/include/clang/Basic/Diagnostic.h +++ b/include/clang/Basic/Diagnostic.h @@ -33,7 +33,8 @@ namespace clang { // Start position for diagnostics. enum { DIAG_START_DRIVER = 300, - DIAG_START_LEX = DIAG_START_DRIVER + 100, + DIAG_START_FRONTEND = DIAG_START_DRIVER + 100, + DIAG_START_LEX = DIAG_START_FRONTEND + 100, DIAG_START_PARSE = DIAG_START_LEX + 300, DIAG_START_AST = DIAG_START_PARSE + 300, DIAG_START_SEMA = DIAG_START_AST + 100, diff --git a/include/clang/Basic/DiagnosticDriverKinds.td b/include/clang/Basic/DiagnosticDriverKinds.td index f84c79772d..6301b6fb32 100644 --- a/include/clang/Basic/DiagnosticDriverKinds.td +++ b/include/clang/Basic/DiagnosticDriverKinds.td @@ -9,10 +9,10 @@ let Component = "Driver" in { -def driver_no_such_file : Error<"no such file or directory: '%0'"> -def driver_unsupported_opt : Error<"unsupported option '%0'"> -def driver_unknown_stdin_type : Error< +def err_drv_no_such_file : Error<"no such file or directory: '%0'"> +def err_drv_unsupported_opt : Error<"unsupported option '%0'"> +def err_drv_unknown_stdin_type : Error< "-E or -x required when input is from standard input"> -def driver_unknown_language : Error<"language not recognized: '%0'"> +def err_drv_unknown_language : Error<"language not recognized: '%0'"> } diff --git a/include/clang/Basic/DiagnosticFrontendKinds.def b/include/clang/Basic/DiagnosticFrontendKinds.def new file mode 100644 index 0000000000..42080fe2d0 --- /dev/null +++ b/include/clang/Basic/DiagnosticFrontendKinds.def @@ -0,0 +1,20 @@ +//==--- DiagnosticFrontendKinds.def - frontend diagnostics ------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifdef FRONTENDSTART +__FRONTENDSTART = DIAG_START_FRONTEND, +#undef FRONTENDSTART +#endif + +DIAG(err_fe_unknown_triple, ERROR, + "unknown target triple '%0', please use -triple or -arch") +DIAG(err_fe_error_reading, ERROR, + "error reading '%0'") +DIAG(err_fe_error_reading_stdin, ERROR, + "error reading stdin") diff --git a/include/clang/Basic/DiagnosticFrontendKinds.td b/include/clang/Basic/DiagnosticFrontendKinds.td new file mode 100644 index 0000000000..2ab5739787 --- /dev/null +++ b/include/clang/Basic/DiagnosticFrontendKinds.td @@ -0,0 +1,15 @@ +//==--- DiagnosticFrontendKinds.td - frontend diagnostics -----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +let Component = "Frontend" in { + +def err_fe_error_reading, Error< "error reading '%0'"> +def err_fe_error_reading_stdin : Error<"error reading stdin"> + +} diff --git a/include/clang/Frontend/FrontendDiagnostic.h b/include/clang/Frontend/FrontendDiagnostic.h new file mode 100644 index 0000000000..7c87598503 --- /dev/null +++ b/include/clang/Frontend/FrontendDiagnostic.h @@ -0,0 +1,27 @@ +//===--- DiagnosticFrontend.h - Diagnostics for frontend --------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_FRONTENDDIAGNOSTIC_H +#define LLVM_CLANG_FRONTENDDIAGNOSTIC_H + +#include "clang/Basic/Diagnostic.h" + +namespace clang { + namespace diag { + enum { +#define DIAG(ENUM,FLAGS,DESC) ENUM, +#define FRONTENDSTART +#include "clang/Basic/DiagnosticFrontendKinds.def" +#undef DIAG + NUM_BUILTIN_FRONTEND_DIAGNOSTICS + }; + } // end namespace diag +} // end namespace clang + +#endif diff --git a/lib/Basic/Diagnostic.cpp b/lib/Basic/Diagnostic.cpp index 3e3802ae20..890b0c2ca5 100644 --- a/lib/Basic/Diagnostic.cpp +++ b/lib/Basic/Diagnostic.cpp @@ -48,6 +48,10 @@ static unsigned char DiagnosticFlagsDriver[] = { #include "clang/Basic/DiagnosticDriverKinds.def" 0 }; +static unsigned char DiagnosticFlagsFrontend[] = { +#include "clang/Basic/DiagnosticFrontendKinds.def" + 0 +}; static unsigned char DiagnosticFlagsLex[] = { #include "clang/Basic/DiagnosticLexKinds.def" 0 @@ -78,8 +82,10 @@ static unsigned getBuiltinDiagClass(unsigned DiagID) { unsigned res; if (DiagID < diag::DIAG_START_DRIVER) res = DiagnosticFlagsCommon[DiagID]; - else if (DiagID < diag::DIAG_START_LEX) + else if (DiagID < diag::DIAG_START_FRONTEND) res = DiagnosticFlagsDriver[DiagID - diag::DIAG_START_DRIVER - 1]; + else if (DiagID < diag::DIAG_START_LEX) + res = DiagnosticFlagsFrontend[DiagID - diag::DIAG_START_FRONTEND - 1]; else if (DiagID < diag::DIAG_START_PARSE) res = DiagnosticFlagsLex[DiagID - diag::DIAG_START_LEX - 1]; else if (DiagID < diag::DIAG_START_AST) @@ -104,6 +110,10 @@ static const char * const DiagnosticTextDriver[] = { #include "clang/Basic/DiagnosticDriverKinds.def" 0 }; +static const char * const DiagnosticTextFrontend[] = { +#include "clang/Basic/DiagnosticFrontendKinds.def" + 0 +}; static const char * const DiagnosticTextLex[] = { #include "clang/Basic/DiagnosticLexKinds.def" 0 @@ -249,8 +259,10 @@ bool Diagnostic::isBuiltinNote(unsigned DiagID) { const char *Diagnostic::getDescription(unsigned DiagID) const { if (DiagID < diag::DIAG_START_DRIVER) return DiagnosticTextCommon[DiagID]; - else if (DiagID < diag::DIAG_START_LEX) + else if (DiagID < diag::DIAG_START_FRONTEND) return DiagnosticTextDriver[DiagID - diag::DIAG_START_DRIVER - 1]; + else if (DiagID < diag::DIAG_START_LEX) + return DiagnosticTextFrontend[DiagID - diag::DIAG_START_FRONTEND - 1]; else if (DiagID < diag::DIAG_START_PARSE) return DiagnosticTextLex[DiagID - diag::DIAG_START_LEX - 1]; else if (DiagID < diag::DIAG_START_AST) diff --git a/test/Analysis/CGColorSpace.c b/test/Analysis/CGColorSpace.c index eecd1d5b3c..c405a10e36 100644 --- a/test/Analysis/CGColorSpace.c +++ b/test/Analysis/CGColorSpace.c @@ -1,5 +1,5 @@ -// RUN: clang -analyze -checker-cfref -analyzer-store=basic -analyzer-constraints=basic verify %s && -// RUN: clang -analyze -checker-cfref -analyzer-store=basic -analyzer-constraints=range verify %s && +// RUN: clang -analyze -checker-cfref -analyzer-store=basic -analyzer-constraints=basic -verify %s && +// RUN: clang -analyze -checker-cfref -analyzer-store=basic -analyzer-constraints=range -verify %s && // RUN: clang -analyze -checker-cfref -analyzer-store=region -analyzer-constraints=basic -verify %s && // RUN: clang -analyze -checker-cfref -analyzer-store=region -analyzer-constraints=range -verify %s