Reorder and shrink size of NameLen field in diagnostic group table. Shaves ~4K from clang binary.
llvm-svn: 189445
This commit is contained in:
parent
8a0caa8525
commit
a3891a7568
|
@ -502,11 +502,8 @@ DiagnosticIDs::getDiagnosticLevel(unsigned DiagID, unsigned DiagClass,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct clang::WarningOption {
|
struct clang::WarningOption {
|
||||||
// Be safe with the size of 'NameLen' because we don't statically check if
|
|
||||||
// the size will fit in the field; the struct size won't decrease with a
|
|
||||||
// shorter type anyway.
|
|
||||||
size_t NameLen;
|
|
||||||
const char *NameStr;
|
const char *NameStr;
|
||||||
|
uint16_t NameLen;
|
||||||
uint16_t Members;
|
uint16_t Members;
|
||||||
uint16_t SubGroups;
|
uint16_t SubGroups;
|
||||||
|
|
||||||
|
@ -558,7 +555,9 @@ void DiagnosticIDs::getDiagnosticsInGroup(
|
||||||
bool DiagnosticIDs::getDiagnosticsInGroup(
|
bool DiagnosticIDs::getDiagnosticsInGroup(
|
||||||
StringRef Group,
|
StringRef Group,
|
||||||
SmallVectorImpl<diag::kind> &Diags) const {
|
SmallVectorImpl<diag::kind> &Diags) const {
|
||||||
WarningOption Key = { Group.size(), Group.data(), 0, 0 };
|
if (Group.size() > UINT16_MAX)
|
||||||
|
return true; // Option is too long to be one in the table.
|
||||||
|
WarningOption Key = { Group.data(), (uint16_t)Group.size(), 0, 0 };
|
||||||
const WarningOption *Found =
|
const WarningOption *Found =
|
||||||
std::lower_bound(OptionTable, OptionTable + OptionTableSize, Key,
|
std::lower_bound(OptionTable, OptionTable + OptionTableSize, Key,
|
||||||
WarningOptionCompare);
|
WarningOptionCompare);
|
||||||
|
|
|
@ -35,11 +35,8 @@ namespace diagtool {
|
||||||
|
|
||||||
|
|
||||||
struct GroupRecord {
|
struct GroupRecord {
|
||||||
// Be safe with the size of 'NameLen' because we don't statically check if
|
|
||||||
// the size will fit in the field; the struct size won't decrease with a
|
|
||||||
// shorter type anyway.
|
|
||||||
size_t NameLen;
|
|
||||||
const char *NameStr;
|
const char *NameStr;
|
||||||
|
uint16_t NameLen;
|
||||||
uint16_t Members;
|
uint16_t Members;
|
||||||
uint16_t SubGroups;
|
uint16_t SubGroups;
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,12 @@ static int showGroup(llvm::raw_ostream &out, StringRef RootGroup,
|
||||||
bool FlagsOnly) {
|
bool FlagsOnly) {
|
||||||
ArrayRef<GroupRecord> AllGroups = getDiagnosticGroups();
|
ArrayRef<GroupRecord> AllGroups = getDiagnosticGroups();
|
||||||
|
|
||||||
GroupRecord Key = { RootGroup.size(), RootGroup.data(), 0, 0 };
|
if (RootGroup.size() > UINT16_MAX) {
|
||||||
|
llvm::errs() << "No such diagnostic group exists\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupRecord Key = { RootGroup.data(), (uint16_t)RootGroup.size(), 0, 0 };
|
||||||
const GroupRecord *Found =
|
const GroupRecord *Found =
|
||||||
std::lower_bound(AllGroups.begin(), AllGroups.end(), Key);
|
std::lower_bound(AllGroups.begin(), AllGroups.end(), Key);
|
||||||
|
|
||||||
|
|
|
@ -681,7 +681,6 @@ void EmitClangDiagGroups(RecordKeeper &Records, raw_ostream &OS) {
|
||||||
I = DiagsInGroup.begin(), E = DiagsInGroup.end(); I != E; ++I) {
|
I = DiagsInGroup.begin(), E = DiagsInGroup.end(); I != E; ++I) {
|
||||||
// Group option string.
|
// Group option string.
|
||||||
OS << " { ";
|
OS << " { ";
|
||||||
OS << I->first.size() << ", ";
|
|
||||||
OS << "\"";
|
OS << "\"";
|
||||||
if (I->first.find_first_not_of("abcdefghijklmnopqrstuvwxyz"
|
if (I->first.find_first_not_of("abcdefghijklmnopqrstuvwxyz"
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
@ -690,6 +689,9 @@ void EmitClangDiagGroups(RecordKeeper &Records, raw_ostream &OS) {
|
||||||
I->first + "'");
|
I->first + "'");
|
||||||
OS.write_escaped(I->first) << "\","
|
OS.write_escaped(I->first) << "\","
|
||||||
<< std::string(MaxLen-I->first.size()+1, ' ');
|
<< std::string(MaxLen-I->first.size()+1, ' ');
|
||||||
|
if (I->first.size() > UINT16_MAX)
|
||||||
|
PrintFatalError("Diagnostic group name is too long for NameLen field.");
|
||||||
|
OS << I->first.size() << ", ";
|
||||||
|
|
||||||
// Special handling for 'pedantic'.
|
// Special handling for 'pedantic'.
|
||||||
const bool IsPedantic = I->first == "pedantic";
|
const bool IsPedantic = I->first == "pedantic";
|
||||||
|
|
Loading…
Reference in New Issue