misc12.C: Removed.

* g++.old-deja/g++.brendan/misc12.C: Removed.
	* g++.old-deja/g++.pt/memtemp77.C: Constify.
	* g++.old-deja/g++.ext/pretty4.C: New test.

From-SVN: r32419
This commit is contained in:
Nathan Sidwell 2000-03-08 11:22:15 +00:00 committed by Nathan Sidwell
parent 2ce07e2d92
commit 98eddaf72b
4 changed files with 94 additions and 20 deletions

View File

@ -1,3 +1,9 @@
2000-03-08 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.brendan/misc12.C: Removed.
* g++.old-deja/g++.pt/memtemp77.C: Constify.
* g++.old-deja/g++.ext/pretty4.C: New test.
2000-03-08 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.other/string2.C: New test.

View File

@ -1,16 +0,0 @@
// GROUPS passed miscellaneous
extern "C" void exit (int);
extern "C" int printf (const char *, ...);
/* Make sure cp-lex.c handles these properly--if this links, that means
it emitted the strings instead of __FUNCTION__.0, etc. */
int
main()
{
char *a = __FUNCTION__;
char *b = __PRETTY_FUNCTION__;
printf ("PASS\n");
exit (0);
}

View File

@ -0,0 +1,84 @@
// Copyright (C) 2000 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 3 Mar 2000 <nathan@codesourcery.com>
// __PRETTY_FUNCTION__, __FUNCTION__ and __function__ should have the
// type char const [X], where X is the right value for that particular function
static void const *strings[4];
static void const *tpls[4];
static unsigned pos = 0;
static int fail;
static void const *ptr = 0;
void unover (char const (*)[5]) {}
void foo (char const (*)[5]) {}
void foo (void *) {fail = 1;}
void foo (void const *) {fail = 1;}
void baz (char const (&)[5]) {}
template<unsigned I> void PV (char const (&objRef)[I])
{
strings[pos] = objRef;
tpls[pos] = __PRETTY_FUNCTION__;
pos++;
}
void fn ()
{
PV (__FUNCTION__);
PV (__func__);
PV (__PRETTY_FUNCTION__);
PV ("wibble");
}
void baz ()
{
ptr = __FUNCTION__;
// there should be no string const merging
if (ptr == "baz")
fail = 1;
// but all uses should be the same.
if (ptr != __FUNCTION__)
fail = 1;
}
int baz (int)
{
return ptr == __FUNCTION__;
}
int main ()
{
// make sure we actually emit the VAR_DECL when needed, and things have the
// expected type.
foo (&__FUNCTION__);
baz (__FUNCTION__);
unover (&__FUNCTION__);
if (fail)
return 1;
// __FUNCTION__ should be unique across functions with the same base name
// (it's a local static, _not_ a string).
baz ();
if (fail)
return 1;
if (baz (1))
return 1;
fn ();
// Check the names of fn. They should all be distinct strings (though two
// will have the same value).
if (strings[0] == strings[1])
return 1;
if (strings[0] == strings[2])
return 1;
if (strings[1] == strings[2])
return 1;
// check the names of the template functions so invoked
if (tpls[0] != tpls[1])
return 1;
if (tpls[0] == tpls[2])
return 1;
return 0;
}

View File

@ -4,21 +4,21 @@ template <class T>
struct S3
{
template <class U>
static char* h(U);
static const char* h(U);
};
template <>
template <>
char* S3<double>::h(int) { return __PRETTY_FUNCTION__; }
const char* S3<double>::h(int) { return __PRETTY_FUNCTION__; }
template <>
template <>
char* S3<char>::h(int) { return __PRETTY_FUNCTION__; }
const char* S3<char>::h(int) { return __PRETTY_FUNCTION__; }
int main()
{
if (strcmp (S3<double>::h(7),
"char *S3<T>::h (U) [with U = int, T = double]") == 0)
"const char *S3<T>::h (U) [with U = int, T = double]") == 0)
return 0;
else
return 1;