diff options
| author | David Blaikie <dblaikie@gmail.com> | 2012-02-15 19:45:34 +0000 |
|---|---|---|
| committer | David Blaikie <dblaikie@gmail.com> | 2012-02-15 19:45:34 +0000 |
| commit | 040a3a28f1581e99afecfa462f38a70b7007df06 (patch) | |
| tree | c62c144d2d2c271455c69304abc289fb500eadbc /clang/tools | |
| parent | 74f7d50f6a5b2f74bb63bedae2d32590b8f594ce (diff) | |
| download | bcm5719-llvm-040a3a28f1581e99afecfa462f38a70b7007df06.tar.gz bcm5719-llvm-040a3a28f1581e99afecfa462f38a70b7007df06.zip | |
Remove the unuseful -fdiagnostics-show-name
This option was added in r129614 and doesn't have any use case that I'm aware
of. It's possible that external tools are using these names - and if that's
the case we can certainly reassess the functionality, but for now it lets us
shave out a few unneeded bits from clang.
Move the "StaticDiagNameIndex" table into the only remaining consumer, diagtool.
This removes the actual diagnostic name strings from clang entirely.
Reviewed by Chris Lattner & Ted Kremenek.
llvm-svn: 150612
Diffstat (limited to 'clang/tools')
| -rw-r--r-- | clang/tools/diagtool/ListWarnings.cpp | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/clang/tools/diagtool/ListWarnings.cpp b/clang/tools/diagtool/ListWarnings.cpp index 7f7db8ef10b..85720b1f0b7 100644 --- a/clang/tools/diagtool/ListWarnings.cpp +++ b/clang/tools/diagtool/ListWarnings.cpp @@ -16,6 +16,14 @@ #include "clang/Basic/Diagnostic.h" #include "llvm/Support/Format.h" #include "llvm/ADT/StringMap.h" +#include "clang/AST/ASTDiagnostic.h" +#include "clang/Analysis/AnalysisDiagnostic.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Frontend/FrontendDiagnostic.h" +#include "clang/Lex/LexDiagnostic.h" +#include "clang/Parse/ParseDiagnostic.h" +#include "clang/Sema/SemaDiagnostic.h" +#include "clang/Serialization/SerializationDiagnostic.h" DEF_DIAGTOOL("list-warnings", "List warnings and their corresponding flags", @@ -23,6 +31,39 @@ DEF_DIAGTOOL("list-warnings", using namespace clang; +namespace { +template <size_t SizeOfStr, typename FieldType> +class StringSizerHelper { + char FIELD_TOO_SMALL[SizeOfStr <= FieldType(~0U) ? 1 : -1]; +public: + enum { Size = SizeOfStr }; +}; + +} // namespace anonymous + +#define STR_SIZE(str, fieldTy) StringSizerHelper<sizeof(str)-1, fieldTy>::Size + +namespace { +struct StaticDiagNameIndexRec { + const char *NameStr; + unsigned short DiagID; + uint8_t NameLen; + + StringRef getName() const { + return StringRef(NameStr, NameLen); + } +}; +} + +static const StaticDiagNameIndexRec StaticDiagNameIndex[] = { +#define DIAG_NAME_INDEX(ENUM) { #ENUM, diag::ENUM, STR_SIZE(#ENUM, uint8_t) }, +#include "clang/Basic/DiagnosticIndexName.inc" +#undef DIAG_NAME_INDEX + { 0, 0, 0 } +}; + +static const unsigned StaticDiagNameIndexSize = + sizeof(StaticDiagNameIndex)/sizeof(StaticDiagNameIndex[0])-1; namespace { struct Entry { @@ -47,16 +88,13 @@ static void printEntries(std::vector<Entry> &entries, llvm::raw_ostream &out) { } int ListWarnings::run(unsigned int argc, char **argv, llvm::raw_ostream &out) { - llvm::IntrusiveRefCntPtr<DiagnosticIDs> Diags(new DiagnosticIDs); - DiagnosticsEngine D(Diags); - std::vector<Entry> Flagged, Unflagged; llvm::StringMap<std::vector<unsigned> > flagHistogram; - for (DiagnosticIDs::diag_iterator di = DiagnosticIDs::diags_begin(), - de = DiagnosticIDs::diags_end(); di != de; ++di) { + for (const StaticDiagNameIndexRec *di = StaticDiagNameIndex, *de = StaticDiagNameIndex + StaticDiagNameIndexSize; + di != de; ++di) { - unsigned diagID = di.getDiagID(); + unsigned diagID = di->DiagID; if (DiagnosticIDs::isBuiltinNote(diagID)) continue; @@ -64,7 +102,7 @@ int ListWarnings::run(unsigned int argc, char **argv, llvm::raw_ostream &out) { if (!DiagnosticIDs::isBuiltinWarningOrExtension(diagID)) continue; - Entry entry(di.getDiagName(), + Entry entry(di->getName(), DiagnosticIDs::getWarningOptionForDiag(diagID)); if (entry.Flag.empty()) |

