[all-commits] [llvm/llvm-project] 815446: [clang][NFC] Standard substitution checking cleanup
Nathan Sidwell via All-commits
all-commits at lists.llvm.org
Thu Feb 10 04:45:21 PST 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 815446cd3e164b8be010864648d4104ad178b129
https://github.com/llvm/llvm-project/commit/815446cd3e164b8be010864648d4104ad178b129
Author: Nathan Sidwell <nathan at acm.org>
Date: 2022-02-10 (Thu, 10 Feb 2022)
Changed paths:
M clang/lib/AST/ItaniumMangle.cpp
Log Message:
-----------
[clang][NFC] Standard substitution checking cleanup
In preparing for module mangling changes I noticed some issues with
the way we check for std::basic_string instantiations and friends.
*) there's a single routine for std::basic_{i,o,io}stream but it is
templatized on the length of the name. Really? just use a
StringRef, rather than clone the entire routine just for
'basic_iostream'.
*) We have a helper routine to check for char type, and call it from
several places. But given all the instantiations are of the form
TPL<char, Other<char> ...> we could just check the first arg is char
and the later templated args are instantiating that same type. A
simpler type comparison.
*) Because basic_string has a third allocator parameter, it is open
coded, which I found a little confusing. But otherwise it's exactly
the same pattern as the iostream ones. Just tell that checker about
whether there's an expected allocator argument.[*]
*) We may as well return in each block of mangleStandardSubstitution
once we determine it is not one of the entities of interest -- it
certainly cannot be one of the other kinds of entities.
FWIW this shaves about 500 bytes off the executable.
[*] I suppose we could also have this routine a tri-value, with one to
indicat 'it is this name, but it's not the one you're looking for', to
avoid later calls trying different names?
Reviewd By: ChuanqiXu
Differential Revision: https://reviews.llvm.org/D119333
More information about the All-commits
mailing list