Skip to content

Commit 8fa1a87

Browse files
committed
TableGen: Fix ASAN error
Summary: As a bonus, this arguably improves the code by making it simpler. gcc 8 on Ubuntu 18.10 reports the following: ==39667==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffffff8ae0 at pc 0x555555dbfc68 bp 0x7fffffff8760 sp 0x7fffffff8750 WRITE of size 8 at 0x7fffffff8ae0 thread T0 #0 0x555555dbfc67 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider::_Alloc_hider(char*, std::allocator<char>&&) /usr/include/c++/8/bits/basic_string.h:149 rust-lang#1 0x555555dbfc67 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) /usr/include/c++/8/bits/basic_string.h:542 rust-lang#2 0x555555dbfc67 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) /usr/include/c++/8/bits/basic_string.h:6009 rust-lang#3 0x555555dbfc67 in searchableFieldType /home/nha/amd/build/san/llvm-src/utils/TableGen/SearchableTableEmitter.cpp:168 (...) Address 0x7fffffff8ae0 is located in stack of thread T0 at offset 864 in frame #0 0x555555dbef3f in searchableFieldType /home/nha/amd/build/san/llvm-src/utils/TableGen/SearchableTableEmitter.cpp:148 Reviewers: fhahn, simon_tatham, kparzysz Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D53931 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345749 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 99c3317 commit 8fa1a87

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

utils/TableGen/SearchableTableEmitter.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -155,17 +155,15 @@ class SearchableTableEmitter {
155155
} else if (BitsRecTy *BI = dyn_cast<BitsRecTy>(Field.RecType)) {
156156
unsigned NumBits = BI->getNumBits();
157157
if (NumBits <= 8)
158-
NumBits = 8;
159-
else if (NumBits <= 16)
160-
NumBits = 16;
161-
else if (NumBits <= 32)
162-
NumBits = 32;
163-
else if (NumBits <= 64)
164-
NumBits = 64;
165-
else
166-
PrintFatalError(Twine("bitfield '") + Field.Name +
167-
"' too large to search");
168-
return "uint" + utostr(NumBits) + "_t";
158+
return "uint8_t";
159+
if (NumBits <= 16)
160+
return "uint16_t";
161+
if (NumBits <= 32)
162+
return "uint32_t";
163+
if (NumBits <= 64)
164+
return "uint64_t";
165+
PrintFatalError(Twine("bitfield '") + Field.Name +
166+
"' too large to search");
169167
} else if (Field.Enum || Field.IsIntrinsic || Field.IsInstruction)
170168
return "unsigned";
171169
PrintFatalError(Twine("Field '") + Field.Name + "' has unknown type '" +

0 commit comments

Comments
 (0)