gcc/libcc1/compiler.hh
Tom Tromey 96deddca2e libcc1: avoid extra string copies
PR c/94669 points out that a couple of spots in libcc1 take a
std::string where a reference would do.  This changes these spots to
take a const char *, to reduce the number of copies.

libcc1

	PR c/94669
	* compiler.hh (compiler_driver_filename): Take const char *.
	(compiler_triplet_regexp): Likewise.
2021-05-05 00:08:34 -06:00

84 lines
2.1 KiB
C++

/* Compiler handling for plugin
Copyright (C) 2014-2020 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#ifndef CC1_PLUGIN_COMPILER_HH
#define CC1_PLUGIN_COMPILER_HH
namespace cc1_plugin
{
// Base class for compiler.
class compiler
{
public:
explicit compiler (bool v)
: verbose (v)
{
}
virtual ~compiler () = default;
// Find the compiler. BASE is the base name of the compiler, see
// compiler-name.hh. This sets COMPILER to the resulting path.
// Returns nullptr on success, or a malloc'd error string on
// failure.
virtual char *find (const char *base, std::string &compiler) const;
void set_verbose (bool v)
{
verbose = v;
}
protected:
bool verbose;
};
/* Compiler to set by set_triplet_regexp. */
class compiler_triplet_regexp : public compiler
{
private:
std::string triplet_regexp_;
public:
char *find (const char *base, std::string &compiler) const override;
compiler_triplet_regexp (bool v, const char *triplet_regexp)
: compiler (v), triplet_regexp_ (triplet_regexp)
{
}
};
/* Compiler to set by set_driver_filename. */
class compiler_driver_filename : public compiler
{
private:
std::string driver_filename_;
public:
char *find (const char *base, std::string &compiler) const override;
compiler_driver_filename (bool v, const char *driver_filename)
: compiler (v), driver_filename_ (driver_filename)
{
}
};
}
#endif // CC1_PLUGIN_COMPILER_HH