re PR c/67730 (No warning when returning NULL in void function)
PR c/67730 * c-typeck.c (convert_for_assignment): Use the expansion point location throughout. * gcc.dg/pr67730-1.c: New test. * gcc.dg/pr67730-2.c: New test. * gcc.dg/pr67730.h: New test. From-SVN: r228408
This commit is contained in:
parent
12651878c6
commit
1c7485afda
|
@ -1,3 +1,9 @@
|
|||
2015-10-02 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/67730
|
||||
* c-typeck.c (convert_for_assignment): Use the expansion point
|
||||
location throughout.
|
||||
|
||||
2015-10-02 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/64249
|
||||
|
|
|
@ -5718,6 +5718,10 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type,
|
|||
tree rname = NULL_TREE;
|
||||
bool objc_ok = false;
|
||||
|
||||
/* Use the expansion point location to handle cases such as user's
|
||||
function returning a wrong-type macro defined in a system header. */
|
||||
location = expansion_point_location_if_in_system_header (location);
|
||||
|
||||
if (errtype == ic_argpass)
|
||||
{
|
||||
tree selector;
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2015-10-02 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/67730
|
||||
* gcc.dg/pr67730-1.c: New test.
|
||||
* gcc.dg/pr67730-2.c: New test.
|
||||
* gcc.dg/pr67730.h: New test.
|
||||
|
||||
2015-10-02 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
* c-c++-common/Wduplicated-cond-2.c: Skip until PR67819 is resolved.
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
/* PR c/67730 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wc++-compat" } */
|
||||
|
||||
#include "pr67730.h"
|
||||
|
||||
extern void bar (unsigned char *);
|
||||
|
||||
unsigned char *
|
||||
f (void *p)
|
||||
{
|
||||
unsigned char *uc = ONEP; /* { dg-warning "request for implicit conversion" } */
|
||||
uc = ONEP; /* { dg-warning "request for implicit conversion" } */
|
||||
bar (ONEP); /* { dg-warning "request for implicit conversion" } */
|
||||
return ONEP; /* { dg-warning "request for implicit conversion" } */
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
/* PR c/67730 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "" } */
|
||||
|
||||
#include "pr67730.h"
|
||||
|
||||
extern void bar (int);
|
||||
|
||||
int
|
||||
fn1 (void)
|
||||
{
|
||||
int a = NULL; /* { dg-warning "initialization makes integer from pointer" } */
|
||||
a = NULL; /* { dg-warning "assignment makes integer from pointer" } */
|
||||
bar (NULL); /* { dg-warning "passing argument 1" } */
|
||||
return NULL; /* { dg-warning "return makes integer from pointer" } */
|
||||
}
|
||||
|
||||
int
|
||||
fn2 (void)
|
||||
{
|
||||
RETURN; /* { dg-warning "return makes integer from pointer" } */
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
#pragma GCC system_header
|
||||
#define NULL (void *) 0
|
||||
#define ONEP (void *) 1
|
||||
#define RETURN return NULL
|
||||
|
||||
extern void sysbar (unsigned char *);
|
||||
|
||||
unsigned char *
|
||||
sysfn1 (void *p)
|
||||
{
|
||||
unsigned char *uc = ONEP;
|
||||
uc = ONEP;
|
||||
sysbar (ONEP);
|
||||
return ONEP;
|
||||
}
|
||||
|
||||
extern void sysbar2 (int);
|
||||
|
||||
int
|
||||
sysfn2 (void)
|
||||
{
|
||||
int a = NULL;
|
||||
a = NULL;
|
||||
sysbar2 (NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
sysfn3 (void)
|
||||
{
|
||||
RETURN;
|
||||
}
|
Loading…
Reference in New Issue