This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, PR C++/61038] - g++ -E is unusable with UDL strings


On 05/13/2014 01:29 PM, Joseph S. Myers wrote:
On Mon, 12 May 2014, Ed Smith-Rowland wrote:

This patch is really a libcpp patch.  But UDLs are like that ;-)

Add string user-defined literals and char user-defined literals to the list of
things to look out for while escaping strings in macro args.

I'm not sure how to test this really.  we want to write out *.ii files and
verify that internal quotes are escaped.
You should be able to check the results of stringizing twice, e.g.:

extern "C" int strcmp (const char *, const char *);
extern "C" void abort (void);
extern "C" void exit (int);

void operator "" _s(const char *, unsigned long)
{
}

#define QUOTE(s) #s
#define QQUOTE(s) QUOTE(s)

const char *s = QQUOTE(QUOTE("hello"_s));
const char *t = QUOTE("\"hello\"_s");

int main()
{
   if (strcmp(s, t) == 0)
     exit(0);
   else
     abort();
}

(at least, this fails for me with unmodified GCC, and I think it should
pass).

Thank you Joe!

Here is a new patch with a proper test case.

Built and tested on x86_64-linux.

OK?

Ed

Attachment: patch_pr61038
Description: Text document

Attachment: CL_pr61038
Description: Text document

Attachment: CL_pr61038
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]