mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-24 11:24:05 +08:00
Add test coverage for _Pragma (PR preprocessor 69126, 69543, 69558)
We had some regressions in the ability for _Pragma to disable a warning (PR preprocessor/69126, PR preprocessor/69543, PR preprocessor/69558). This patch attempts to add more test coverage for this, for the various combinations of: - various warnings: -Wunused-variable -Wuninitialized -Wdeprecated-declarations - various combinations of location of _Pragma relative to location of the warning: - _Pragma is in a macro, warning isn't a macro - neither is in a macro - _Pragma isnt't in a macro, warning is in a macro - in different macros - both in the same macro - C vs C++ frontend. It adds some XFAILs: - pr69543-1.c for C++ (fixed in the followup patch) - pr69543-3.c for both C and C++ - pr69543-4.c for both C and C++ - pr69558.c for C++ (moving it from gcc.dg to c-c++-common, marking it as xfail for C++ for now) gcc/testsuite/ChangeLog: PR preprocessor/69126 PR preprocessor/69543 PR preprocessor/69558 * c-c++-common/pr69126.c (MACRO_1, test_1): New. (f): Rename to... (test_2): ...this, and add leading comment. (MACRO_3, test_3): New. (MACRO_4A, MACRO_4B, test_4): New. (MACRO): Rename to... (MACRO_5): ...this. (g): Rename to... (test_5): ...this, updating for renaming of MACRO, and add leading comment. * c-c++-common/pr69543-1.c: New. * c-c++-common/pr69543-2.c: New. * c-c++-common/pr69543-3.c: New. * c-c++-common/pr69543-4.c: New. * c-c++-common/pr69558-1.c: New. * c-c++-common/pr69558-2.c: New. * c-c++-common/pr69558-3.c: New. * c-c++-common/pr69558-4.c: New. * gcc.dg/pr69558.c: Move to... * c-c++-common/pr69558.c: ...here. Add dg-bogus directives, with xfail for c++. From-SVN: r233637
This commit is contained in:
parent
5f6dd5930f
commit
1d3121af3a
@ -1,3 +1,30 @@
|
||||
2016-02-23 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR preprocessor/69126
|
||||
PR preprocessor/69543
|
||||
PR preprocessor/69558
|
||||
* c-c++-common/pr69126.c (MACRO_1, test_1): New.
|
||||
(f): Rename to...
|
||||
(test_2): ...this, and add leading comment.
|
||||
(MACRO_3, test_3): New.
|
||||
(MACRO_4A, MACRO_4B, test_4): New.
|
||||
(MACRO): Rename to...
|
||||
(MACRO_5): ...this.
|
||||
(g): Rename to...
|
||||
(test_5): ...this, updating for renaming of MACRO, and
|
||||
add leading comment.
|
||||
* c-c++-common/pr69543-1.c: New.
|
||||
* c-c++-common/pr69543-2.c: New.
|
||||
* c-c++-common/pr69543-3.c: New.
|
||||
* c-c++-common/pr69543-4.c: New.
|
||||
* c-c++-common/pr69558-1.c: New.
|
||||
* c-c++-common/pr69558-2.c: New.
|
||||
* c-c++-common/pr69558-3.c: New.
|
||||
* c-c++-common/pr69558-4.c: New.
|
||||
* gcc.dg/pr69558.c: Move to...
|
||||
* c-c++-common/pr69558.c: ...here. Add dg-bogus directives, with
|
||||
xfail for c++.
|
||||
|
||||
2016-02-23 Thomas Schwinge <thomas@codesourcery.com>
|
||||
|
||||
* c-c++-common/goacc/kernels-counter-vars-function-scope.c: Adjust
|
||||
|
@ -1,7 +1,16 @@
|
||||
/* { dg-options "-Wunused-variable" } */
|
||||
|
||||
/* Verify that ignoring -Wunused-variable works, for various placements
|
||||
of the variable and the _Pragma. */
|
||||
|
||||
/* Test 1: the _Pragma is in a macro, but the affected code isn't. */
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
int f()
|
||||
|
||||
#define MACRO_1 \
|
||||
_Pragma("GCC diagnostic ignored \"-Wunused-variable\"")
|
||||
|
||||
int test_1()
|
||||
{
|
||||
_Pragma("GCC diagnostic ignored \"-Wunused-variable\"")
|
||||
int x;
|
||||
@ -9,14 +18,62 @@ int f()
|
||||
}
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#define MACRO \
|
||||
_Pragma("GCC diagnostic ignored \"-Wunused-variable\"") \
|
||||
int x;
|
||||
|
||||
int g()
|
||||
/* Test 2: neither the _Pragma nor the affected code are in a macro. */
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
int test_2()
|
||||
{
|
||||
MACRO;
|
||||
_Pragma("GCC diagnostic ignored \"-Wunused-variable\"")
|
||||
int x;
|
||||
return 0;
|
||||
}
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
|
||||
/* Test 3: the _Pragma isn't in a macro, but the affected code is. */
|
||||
|
||||
#define MACRO_3 \
|
||||
int x;
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
int test_3()
|
||||
{
|
||||
_Pragma("GCC diagnostic ignored \"-Wunused-variable\"")
|
||||
MACRO_3
|
||||
return 0;
|
||||
}
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
|
||||
/* Test 4: the _Pragma and the affected code are in different macros. */
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#define MACRO_4A \
|
||||
_Pragma("GCC diagnostic ignored \"-Wunused-variable\"")
|
||||
|
||||
#define MACRO_4B \
|
||||
int x;
|
||||
|
||||
int test_4()
|
||||
{
|
||||
MACRO_4A;
|
||||
MACRO_4B
|
||||
return 0;
|
||||
}
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
|
||||
/* Test 5: both the _Pragma and the affected code are in the same macro. */
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#define MACRO_5 \
|
||||
_Pragma("GCC diagnostic ignored \"-Wunused-variable\"") \
|
||||
int x;
|
||||
|
||||
int test_5()
|
||||
{
|
||||
MACRO_5;
|
||||
return 0;
|
||||
}
|
||||
#pragma GCC diagnostic pop
|
||||
|
21
gcc/testsuite/c-c++-common/pr69543-1.c
Normal file
21
gcc/testsuite/c-c++-common/pr69543-1.c
Normal file
@ -0,0 +1,21 @@
|
||||
/* { dg-options "-Wuninitialized" } */
|
||||
|
||||
/* Verify disabling a warning, where the _Pragma is within
|
||||
a macro, but the affected code is *not* in a macro. */
|
||||
|
||||
/* TODO: XFAIL: why does g++ still emit a warning here? (works for C). */
|
||||
|
||||
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
|
||||
_Pragma ("GCC diagnostic push") \
|
||||
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
|
||||
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
|
||||
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
|
||||
_Pragma ("GCC diagnostic pop")
|
||||
|
||||
void test (char yylval)
|
||||
{
|
||||
char *yyvsp;
|
||||
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
|
||||
*++yyvsp = yylval; /* { dg-bogus "used uninitialized" "" { xfail { c++ } } } */
|
||||
YY_IGNORE_MAYBE_UNINITIALIZED_END
|
||||
}
|
14
gcc/testsuite/c-c++-common/pr69543-2.c
Normal file
14
gcc/testsuite/c-c++-common/pr69543-2.c
Normal file
@ -0,0 +1,14 @@
|
||||
/* { dg-options "-Wuninitialized" } */
|
||||
|
||||
/* Verify disabling a warning, where both the _Pragma and the
|
||||
affected code are *not* in a macro. */
|
||||
|
||||
void test (char yylval)
|
||||
{
|
||||
char *yyvsp;
|
||||
_Pragma ("GCC diagnostic push")
|
||||
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
|
||||
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
|
||||
*++yyvsp = yylval;
|
||||
_Pragma ("GCC diagnostic pop")
|
||||
}
|
20
gcc/testsuite/c-c++-common/pr69543-3.c
Normal file
20
gcc/testsuite/c-c++-common/pr69543-3.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* { dg-options "-Wuninitialized" } */
|
||||
|
||||
/* Verify disabling a warning, where the _Pragma is in regular code,
|
||||
but the affected code is within a macro. */
|
||||
|
||||
/* TODO: XFAIL: both C and C++ erroneously fail to suppress the warning
|
||||
The warning is reported at the macro definition location, rather than
|
||||
the macro expansion location. */
|
||||
|
||||
#define WARNABLE_CODE *++yyvsp = yylval; /* { dg-bogus "used uninitialized" "" { xfail *-*-* } } */
|
||||
|
||||
void test (char yylval)
|
||||
{
|
||||
char *yyvsp; /* { dg-bogus "declared here" "" { xfail *-*-* } } */
|
||||
_Pragma ("GCC diagnostic push")
|
||||
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
|
||||
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
|
||||
WARNABLE_CODE
|
||||
_Pragma ("GCC diagnostic pop")
|
||||
}
|
25
gcc/testsuite/c-c++-common/pr69543-4.c
Normal file
25
gcc/testsuite/c-c++-common/pr69543-4.c
Normal file
@ -0,0 +1,25 @@
|
||||
/* { dg-options "-Wuninitialized" } */
|
||||
|
||||
/* Verify disabling a warning, where both the _Pragma and the
|
||||
affected code are within (different) macros. */
|
||||
|
||||
/* TODO: XFAIL: both C and C++ erroneously fail to suppress the warning
|
||||
The warning is reported at the macro definition location, rather than
|
||||
the macro expansion location. */
|
||||
|
||||
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
|
||||
_Pragma ("GCC diagnostic push") \
|
||||
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
|
||||
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
|
||||
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
|
||||
_Pragma ("GCC diagnostic pop")
|
||||
|
||||
#define WARNABLE_CODE *++yyvsp = yylval; /* { dg-bogus "used uninitialized" "" { xfail *-*-* } } */
|
||||
|
||||
void test (char yylval)
|
||||
{
|
||||
char *yyvsp; /* { dg-bogus "declared here" "" { xfail *-*-* } } */
|
||||
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
|
||||
WARNABLE_CODE
|
||||
YY_IGNORE_MAYBE_UNINITIALIZED_END
|
||||
}
|
21
gcc/testsuite/c-c++-common/pr69558-1.c
Normal file
21
gcc/testsuite/c-c++-common/pr69558-1.c
Normal file
@ -0,0 +1,21 @@
|
||||
/* PR c/69558 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wdeprecated-declarations" } */
|
||||
|
||||
/* Verify disabling -Wdeprecated-declarations, where the _Pragma is in a
|
||||
macro, but the affected code is *not* in a macro. */
|
||||
|
||||
#define A \
|
||||
_Pragma ("GCC diagnostic push") \
|
||||
_Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
|
||||
#define B \
|
||||
_Pragma ("GCC diagnostic pop")
|
||||
|
||||
__attribute__((deprecated)) void foo (void);
|
||||
|
||||
void bar (void)
|
||||
{
|
||||
A
|
||||
foo ();
|
||||
B
|
||||
}
|
16
gcc/testsuite/c-c++-common/pr69558-2.c
Normal file
16
gcc/testsuite/c-c++-common/pr69558-2.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* PR c/69558 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wdeprecated-declarations" } */
|
||||
|
||||
/* Verify disabling -Wdeprecated-declarations, where neither the _Pragma nor
|
||||
the affected code are in macros. */
|
||||
|
||||
__attribute__((deprecated)) void foo (void);
|
||||
|
||||
void bar (void)
|
||||
{
|
||||
_Pragma ("GCC diagnostic push")
|
||||
_Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
|
||||
foo ();
|
||||
_Pragma ("GCC diagnostic pop")
|
||||
}
|
19
gcc/testsuite/c-c++-common/pr69558-3.c
Normal file
19
gcc/testsuite/c-c++-common/pr69558-3.c
Normal file
@ -0,0 +1,19 @@
|
||||
/* PR c/69558 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wdeprecated-declarations" } */
|
||||
|
||||
/* Verify disabling -Wdeprecated-declarations, where the _Pragma is not
|
||||
in a macro, but the affected code *is*. */
|
||||
|
||||
#define C \
|
||||
foo ();
|
||||
|
||||
__attribute__((deprecated)) void foo (void);
|
||||
|
||||
void bar (void)
|
||||
{
|
||||
_Pragma ("GCC diagnostic push")
|
||||
_Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
|
||||
C
|
||||
_Pragma ("GCC diagnostic pop")
|
||||
}
|
23
gcc/testsuite/c-c++-common/pr69558-4.c
Normal file
23
gcc/testsuite/c-c++-common/pr69558-4.c
Normal file
@ -0,0 +1,23 @@
|
||||
/* PR c/69558 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wdeprecated-declarations" } */
|
||||
|
||||
/* Verify disabling -Wdeprecated-declarations, where the _Pragma and the
|
||||
affected code are in different macros. */
|
||||
|
||||
#define A \
|
||||
_Pragma ("GCC diagnostic push") \
|
||||
_Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
|
||||
#define B \
|
||||
_Pragma ("GCC diagnostic pop")
|
||||
#define C \
|
||||
foo ();
|
||||
|
||||
__attribute__((deprecated)) void foo (void);
|
||||
|
||||
void bar (void)
|
||||
{
|
||||
A
|
||||
C
|
||||
B
|
||||
}
|
@ -2,6 +2,8 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wdeprecated-declarations" } */
|
||||
|
||||
/* TODO: XFAIL for g++ (works for C). */
|
||||
|
||||
#define A \
|
||||
_Pragma ("GCC diagnostic push") \
|
||||
_Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
|
||||
@ -9,9 +11,9 @@
|
||||
_Pragma ("GCC diagnostic pop")
|
||||
#define C(x) \
|
||||
A \
|
||||
static inline void bar (void) { x (); } \
|
||||
static inline void bar (void) { x (); } /* { dg-bogus "in definition of|deprecated" "" { xfail { c++ } } } */ \
|
||||
B
|
||||
|
||||
__attribute__((deprecated)) void foo (void); /* { dg-bogus "declared here" } */
|
||||
__attribute__((deprecated)) void foo (void); /* { dg-bogus "declared here" "" { xfail { c++ } } } */
|
||||
|
||||
C (foo) /* { dg-bogus "is deprecated" } */
|
||||
C (foo) /* { dg-bogus "is deprecated" "" { xfail { c++ } } } */
|
Loading…
Reference in New Issue
Block a user