Commit dbf96d49 by David Malcolm Committed by David Malcolm

selftest: introduce class auto_fix_quotes

This patch moves a workaround for locale differences from a
selftest in pretty-print.c to selftest.h/c to make it reusable; I need
this for a selftest in a followup patch.

gcc/ChangeLog:
	* pretty-print.c (selftest::test_pp_format): Move save and restore
	of quotes to class auto_fix_quotes, and add an instance.
	* selftest.c: Include "intl.h".
	(selftest::auto_fix_quotes::auto_fix_quotes): New ctor.
	(selftest::auto_fix_quotes::~auto_fix_quotes): New dtor.
	* selftest.h (selftest::auto_fix_quotes): New class.

From-SVN: r262317
parent 7edd4c18
2018-07-02 David Malcolm <dmalcolm@redhat.com>
* pretty-print.c (selftest::test_pp_format): Move save and restore
of quotes to class auto_fix_quotes, and add an instance.
* selftest.c: Include "intl.h".
(selftest::auto_fix_quotes::auto_fix_quotes): New ctor.
(selftest::auto_fix_quotes::~auto_fix_quotes): New dtor.
* selftest.h (selftest::auto_fix_quotes): New class.
2018-07-02 Richard Henderson <richard.henderson@linaro.org> 2018-07-02 Richard Henderson <richard.henderson@linaro.org>
* config/aarch64/aarch64-protos.h, config/aarch64/aarch64.c * config/aarch64/aarch64-protos.h, config/aarch64/aarch64.c
......
...@@ -2102,10 +2102,7 @@ test_pp_format () ...@@ -2102,10 +2102,7 @@ test_pp_format ()
{ {
/* Avoid introducing locale-specific differences in the results /* Avoid introducing locale-specific differences in the results
by hardcoding open_quote and close_quote. */ by hardcoding open_quote and close_quote. */
const char *old_open_quote = open_quote; auto_fix_quotes fix_quotes;
const char *old_close_quote = close_quote;
open_quote = "`";
close_quote = "'";
/* Verify that plain text is passed through unchanged. */ /* Verify that plain text is passed through unchanged. */
assert_pp_format (SELFTEST_LOCATION, "unformatted", "unformatted"); assert_pp_format (SELFTEST_LOCATION, "unformatted", "unformatted");
...@@ -2187,10 +2184,6 @@ test_pp_format () ...@@ -2187,10 +2184,6 @@ test_pp_format ()
assert_pp_format (SELFTEST_LOCATION, "item 3 of 7", "item %i of %i", 3, 7); assert_pp_format (SELFTEST_LOCATION, "item 3 of 7", "item %i of %i", 3, 7);
assert_pp_format (SELFTEST_LOCATION, "problem with `bar' at line 10", assert_pp_format (SELFTEST_LOCATION, "problem with `bar' at line 10",
"problem with %qs at line %i", "bar", 10); "problem with %qs at line %i", "bar", 10);
/* Restore old values of open_quote and close_quote. */
open_quote = old_open_quote;
close_quote = old_close_quote;
} }
/* Run all of the selftests within this file. */ /* Run all of the selftests within this file. */
......
...@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3. If not see
#include "system.h" #include "system.h"
#include "coretypes.h" #include "coretypes.h"
#include "selftest.h" #include "selftest.h"
#include "intl.h"
#if CHECKING_P #if CHECKING_P
...@@ -192,6 +193,25 @@ temp_source_file::temp_source_file (const location &loc, ...@@ -192,6 +193,25 @@ temp_source_file::temp_source_file (const location &loc,
fclose (out); fclose (out);
} }
/* Avoid introducing locale-specific differences in the results
by hardcoding open_quote and close_quote. */
auto_fix_quotes::auto_fix_quotes ()
{
m_saved_open_quote = open_quote;
m_saved_close_quote = close_quote;
open_quote = "`";
close_quote = "'";
}
/* Restore old values of open_quote and close_quote. */
auto_fix_quotes::~auto_fix_quotes ()
{
open_quote = m_saved_open_quote;
close_quote = m_saved_close_quote;
}
/* Read the contents of PATH into memory, returning a 0-terminated buffer /* Read the contents of PATH into memory, returning a 0-terminated buffer
that must be freed by the caller. that must be freed by the caller.
Fail (and abort) if there are any problems, with LOC as the reported Fail (and abort) if there are any problems, with LOC as the reported
......
...@@ -113,6 +113,26 @@ class temp_source_file : public named_temp_file ...@@ -113,6 +113,26 @@ class temp_source_file : public named_temp_file
const char *content); const char *content);
}; };
/* RAII-style class for avoiding introducing locale-specific differences
in strings containing localized quote marks, by temporarily overriding
the "open_quote" and "close_quote" globals to something hardcoded.
Specifically, the C locale's values are used:
- open_quote becomes "`"
- close_quote becomes "'"
for the lifetime of the object. */
class auto_fix_quotes
{
public:
auto_fix_quotes ();
~auto_fix_quotes ();
private:
const char *m_saved_open_quote;
const char *m_saved_close_quote;
};
/* Various selftests involving location-handling require constructing a /* Various selftests involving location-handling require constructing a
line table and one or more line maps within it. line table and one or more line maps within it.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment