Commit 397ecd05 by David Malcolm Committed by David Malcolm

testsuite: add param-type-mismatch.c/C testcases as a baseline

gcc/testsuite/ChangeLog:
	* g++.dg/diagnostic/param-type-mismatch.C: New test acse.
	* gcc.dg/param-type-mismatch.c: New test case.

From-SVN: r251312
parent b7fbf563
2017-08-23 David Malcolm <dmalcolm@redhat.com>
* g++.dg/diagnostic/param-type-mismatch.C: New test acse.
* gcc.dg/param-type-mismatch.c: New test case.
2017-08-23 Will Schmidt <will_schmidt@vnet.ibm.com>
* gcc.target/powerpc/fold-vec-perm-char.c: New.
......
// { dg-options "-fdiagnostics-show-caret" }
/* A collection of calls where argument 2 is of the wrong type.
TODO: we should put the caret and underline for the diagnostic
at the second argument, rather than the close paren.
TODO: we should highlight the second parameter of the callee, rather
than its name. */
/* decl, with argname. */
extern int callee_1 (int one, const char *two, float three); // { dg-line callee_1 }
int test_1 (int first, int second, float third)
{
return callee_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
/* { dg-begin-multiline-output "" }
return callee_1 (first, second, third);
^
{ dg-end-multiline-output "" } */
// { dg-message "initializing argument 2 of 'int callee_1\\(int, const char\\*, float\\)'" "" { target *-*-* } callee_1 }
/* { dg-begin-multiline-output "" }
extern int callee_1 (int one, const char *two, float three);
^~~~~~~~
{ dg-end-multiline-output "" } */
}
/* decl, without argname. */
extern int callee_2 (int, const char *, float); // { dg-line callee_2 }
int test_2 (int first, int second, float third)
{
return callee_2 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
/* { dg-begin-multiline-output "" }
return callee_2 (first, second, third);
^
{ dg-end-multiline-output "" } */
// { dg-message "initializing argument 2 of 'int callee_2\\(int, const char\\*, float\\)'" "" { target *-*-* } callee_2 }
/* { dg-begin-multiline-output "" }
extern int callee_2 (int, const char *, float);
^~~~~~~~
{ dg-end-multiline-output "" } */
}
/* defn, with argname. */
static int callee_3 (int one, const char *two, float three) // { dg-line callee_3 }
{
return callee_2 (one, two, three);
}
int test_3 (int first, int second, float third)
{
return callee_3 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
/* { dg-begin-multiline-output "" }
return callee_3 (first, second, third);
^
{ dg-end-multiline-output "" } */
// { dg-message "initializing argument 2 of 'int callee_3\\(int, const char\\*, float\\)'" "" { target *-*-* } callee_3 }
/* { dg-begin-multiline-output "" }
static int callee_3 (int one, const char *two, float three)
^~~~~~~~
{ dg-end-multiline-output "" } */
}
/* static member, with argname. */
struct s4 { static int member_1 (int one, const char *two, float three); };
int test_4 (int first, int second, float third)
{
return s4::member_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
/* { dg-begin-multiline-output "" }
return s4::member_1 (first, second, third);
^
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
struct s4 { static int member_1 (int one, const char *two, float three); };
^~~~~~~~
{ dg-end-multiline-output "" } */
}
/* non-static member, with argname. */
struct s5 { int member_1 (int one, const char *two, float three); };
int test_5 (int first, int second, float third)
{
s5 inst;
return inst.member_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
/* { dg-begin-multiline-output "" }
return inst.member_1 (first, second, third);
^
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
struct s5 { int member_1 (int one, const char *two, float three); };
^~~~~~~~
{ dg-end-multiline-output "" } */
}
/* non-static member, with argname, via a ptr. */
struct s6 { int member_1 (int one, const char *two, float three); };
int test_6 (int first, int second, float third, s6 *ptr)
{
return ptr->member_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
/* { dg-begin-multiline-output "" }
return ptr->member_1 (first, second, third);
^
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
struct s6 { int member_1 (int one, const char *two, float three); };
^~~~~~~~
{ dg-end-multiline-output "" } */
}
/* Template function. */
template <typename T>
int test_7 (int one, T two, float three);
int test_7 (int first, int second, float third)
{
return test_7 <const char *> (first, second, third); // { dg-error "no matching function" }
/* { dg-begin-multiline-output "" }
return test_7 <const char *> (first, second, third);
^
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
return test_7 <const char *> (first, second, third);
^
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
int test_7 (int one, T two, float three);
^~~~~~
{ dg-end-multiline-output "" } */
}
/* Template class, static function. */
template <typename T>
struct s8 { static int member_1 (int one, T two, float three); };
int test_8 (int first, int second, float third)
{
return s8 <const char *>::member_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
/* { dg-begin-multiline-output "" }
return s8 <const char *>::member_1 (first, second, third);
^
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
struct s8 { static int member_1 (int one, T two, float three); };
^~~~~~~~
{ dg-end-multiline-output "" } */
}
/* Template class, non-static function. */
template <typename T>
struct s9 { int member_1 (int one, T two, float three); };
int test_9 (int first, int second, float third)
{
s9 <const char *> inst;
return inst.member_1 (first, second, third); // { dg-error "invalid conversion from 'int' to 'const char\\*'" }
/* { dg-begin-multiline-output "" }
return inst.member_1 (first, second, third);
^
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
struct s9 { int member_1 (int one, T two, float three); };
^~~~~~~~
{ dg-end-multiline-output "" } */
}
// TODO: template callsite
/* { dg-options "-fdiagnostics-show-caret" } */
/* A collection of calls where argument 2 is of the wrong type.
TODO: we should highlight the second parameter of the callee, rather
than its name. */
/* decl, with argname. */
extern int callee_1 (int one, const char *two, float three); /* { dg-line callee_1 } */
int test_1 (int first, int second, float third)
{
return callee_1 (first, second, third); /* { dg-warning "passing argument 2 of 'callee_1' makes pointer from integer without a cast" } */
/* { dg-begin-multiline-output "" }
return callee_1 (first, second, third);
^~~~~~
{ dg-end-multiline-output "" } */
/* { dg-message "expected 'const char \\*' but argument is of type 'int'" "" { target *-*-* } callee_1 } */
/* { dg-begin-multiline-output "" }
extern int callee_1 (int one, const char *two, float three);
^~~~~~~~
{ dg-end-multiline-output "" } */
}
/* decl, without argname. */
extern int callee_2 (int, const char *, float); /* { dg-line callee_2 } */
int test_2 (int first, int second, float third)
{
return callee_2 (first, second, third); /* { dg-warning "passing argument 2 of 'callee_2' makes pointer from integer without a cast" } */
/* { dg-begin-multiline-output "" }
return callee_2 (first, second, third);
^~~~~~
{ dg-end-multiline-output "" } */
/* { dg-message "expected 'const char \\*' but argument is of type 'int'" "" { target *-*-* } callee_2 } */
/* { dg-begin-multiline-output "" }
extern int callee_2 (int, const char *, float);
^~~~~~~~
{ dg-end-multiline-output "" } */
}
/* defn, with argname. */
static int callee_3 (int one, const char *two, float three) /* { dg-line callee_3 } */
{
return callee_2 (one, two, three);
}
int test_3 (int first, int second, float third)
{
return callee_3 (first, second, third); // { dg-warning "passing argument 2 of 'callee_3' makes pointer from integer without a cast" }
/* { dg-begin-multiline-output "" }
return callee_3 (first, second, third);
^~~~~~
{ dg-end-multiline-output "" } */
/* { dg-message "expected 'const char \\*' but argument is of type 'int'" "" { target *-*-* } callee_3 } */
/* { dg-begin-multiline-output "" }
static int callee_3 (int one, const char *two, float three)
^~~~~~~~
{ dg-end-multiline-output "" } */
}
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