mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-28 20:21:17 +08:00
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>
|
2015-10-02 Marek Polacek <polacek@redhat.com>
|
||||||
|
|
||||||
PR c/64249
|
PR c/64249
|
||||||
|
@ -5718,6 +5718,10 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type,
|
|||||||
tree rname = NULL_TREE;
|
tree rname = NULL_TREE;
|
||||||
bool objc_ok = false;
|
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)
|
if (errtype == ic_argpass)
|
||||||
{
|
{
|
||||||
tree selector;
|
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>
|
2015-10-02 Marek Polacek <polacek@redhat.com>
|
||||||
|
|
||||||
* c-c++-common/Wduplicated-cond-2.c: Skip until PR67819 is resolved.
|
* c-c++-common/Wduplicated-cond-2.c: Skip until PR67819 is resolved.
|
||||||
|
16
gcc/testsuite/gcc.dg/pr67730-1.c
Normal file
16
gcc/testsuite/gcc.dg/pr67730-1.c
Normal file
@ -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" } */
|
||||||
|
}
|
22
gcc/testsuite/gcc.dg/pr67730-2.c
Normal file
22
gcc/testsuite/gcc.dg/pr67730-2.c
Normal file
@ -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" } */
|
||||||
|
}
|
32
gcc/testsuite/gcc.dg/pr67730.h
Normal file
32
gcc/testsuite/gcc.dg/pr67730.h
Normal file
@ -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…
x
Reference in New Issue
Block a user