Add testcase from PR71959

libgomp/

	PR lto/71959
	* testsuite/libgomp.oacc-c++/pr71959-aux.cc: New.
	* testsuite/libgomp.oacc-c++/pr71959.C: New.

Co-Authored-By: Julian Brown <julian@codesourcery.com>

From-SVN: r267806
This commit is contained in:
Nathan Sidwell 2019-01-10 12:32:03 +00:00 committed by Julian Brown
parent ae8792cb3b
commit e222497dcb
3 changed files with 73 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2019-01-10 Nathan Sidwell <nathan@acm.org>
Julian Brown <julian@codesourcery.com>
PR lto/71959
* testsuite/libgomp.oacc-c++/pr71959-aux.cc: New.
* testsuite/libgomp.oacc-c++/pr71959.C: New.
2019-01-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
* config/rtems/bar.c: Include "../linux/bar.c" and delete copy

View File

@ -0,0 +1,35 @@
// { dg-do compile }
#define STR1(X) #X
#define STR2(X) STR1(X)
#define LABEL(X) STR2(__USER_LABEL_PREFIX__) X
struct Iter
{
int *cursor;
void ctor (int *cursor_) asm (LABEL ("_ZN4IterC1EPi"));
int *point () const asm (LABEL ("_ZNK4Iter5pointEv"));
};
#pragma acc routine
void Iter::ctor (int *cursor_)
{
cursor = cursor_;
}
#pragma acc routine
int *Iter::point () const
{
return cursor;
}
void apply (int (*fn)(), Iter out) asm (LABEL ("_ZN5Apply5applyEPFivE4Iter"));
#pragma acc routine
void apply (int (*fn)(), struct Iter out)
{ *out.point() = fn (); }
extern "C" void __gxx_personality_v0 ()
{
}

View File

@ -0,0 +1,31 @@
// { dg-additional-sources "pr71959-aux.cc" }
// PR lto/71959 ICEd LTO due to mismatch between writing & reading behaviour
struct Iter
{
int *cursor;
Iter(int *cursor_) : cursor(cursor_) {}
int *point() const { return cursor; }
};
#pragma acc routine seq
int one () { return 1; }
struct Apply
{
static void apply (int (*fn)(), Iter out)
{ *out.point() = fn (); }
};
int main ()
{
int x;
#pragma acc parallel copyout(x)
Apply::apply (one, Iter (&x));
return x != 1;
}