[PATCH] D53931: TableGen: Fix ASAN error
Nicolai Hähnle via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 31 07:07:47 PDT 2018
nhaehnle created this revision.
nhaehnle added reviewers: fhahn, simon_tatham, kparzysz.
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
#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
#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
#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
Repository:
rL LLVM
https://reviews.llvm.org/D53931
Files:
utils/TableGen/SearchableTableEmitter.cpp
Index: utils/TableGen/SearchableTableEmitter.cpp
===================================================================
--- utils/TableGen/SearchableTableEmitter.cpp
+++ utils/TableGen/SearchableTableEmitter.cpp
@@ -155,17 +155,15 @@
} else if (BitsRecTy *BI = dyn_cast<BitsRecTy>(Field.RecType)) {
unsigned NumBits = BI->getNumBits();
if (NumBits <= 8)
- NumBits = 8;
- else if (NumBits <= 16)
- NumBits = 16;
- else if (NumBits <= 32)
- NumBits = 32;
- else if (NumBits <= 64)
- NumBits = 64;
- else
- PrintFatalError(Twine("bitfield '") + Field.Name +
- "' too large to search");
- return "uint" + utostr(NumBits) + "_t";
+ return "uint8_t";
+ if (NumBits <= 16)
+ return "uint16_t";
+ if (NumBits <= 32)
+ return "uint32_t";
+ if (NumBits <= 64)
+ return "uint64_t";
+ PrintFatalError(Twine("bitfield '") + Field.Name +
+ "' too large to search");
} else if (Field.Enum || Field.IsIntrinsic || Field.IsInstruction)
return "unsigned";
PrintFatalError(Twine("Field '") + Field.Name + "' has unknown type '" +
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D53931.171911.patch
Type: text/x-patch
Size: 1196 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181031/97321497/attachment.bin>
More information about the llvm-commits
mailing list