summaryrefslogtreecommitdiff
path: root/gpgscm
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2018-09-06 15:02:11 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2018-09-06 15:02:11 +0900
commitb2aba1bec151d6e6cbf66359a30ba2ff458fc138 (patch)
tree37b575c7a0958fa9ece1d86bf27d9f2d4713b18d /gpgscm
parent2148e19fbefa9c5d5cdc4982cd2043136c31fb64 (diff)
downloadlibgpg-error-b2aba1bec151d6e6cbf66359a30ba2ff458fc138.tar.gz
gpgscm: Suppress warnings for GCC > 6.
* tests/gpgscm/scheme.c (CASE): Use unused attribute for GCC > 6. (FALLTHROUGH): New for fallthrough. (Eval_Cycle): Use FALLTHROUGH. Remove not-needed comment of fallthrough. -- Since GCC combines C preprocessor macro expansion, the fallthrough comment doesn't work well to suppress warnings for -Wimplicit-fallthrough, near the macro CASE. To handle this problem, we use GCC's extension of unused label and fallthrough attributes. Signed-off-by: NIIBE Yutaka <gniibe@fsij.org> Cherry-picked from gnupg master commit of: 99c17b970bc0ca7e0cff7fe031c6f9feb05af3ff
Diffstat (limited to 'gpgscm')
-rw-r--r--gpgscm/scheme.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/gpgscm/scheme.c b/gpgscm/scheme.c
index 5102769..906e563 100644
--- a/gpgscm/scheme.c
+++ b/gpgscm/scheme.c
@@ -2992,13 +2992,23 @@ _Error_1(scheme *sc, const char *s, pointer a) {
/* Define a label OP and emit a case statement for OP. For use in the
* dispatch function. The slightly peculiar goto that is never
* executed avoids warnings about unused labels. */
+#if __GNUC__ > 6
+#define CASE(OP) OP: __attribute__((unused)); case OP
+#else
#define CASE(OP) case OP: if (0) goto OP; OP
+#endif
#else /* USE_THREADED_CODE */
#define s_thread_to(sc, a) s_goto(sc, a)
#define CASE(OP) case OP
#endif /* USE_THREADED_CODE */
+#if __GNUC__ > 6
+#define FALLTHROUGH __attribute__ ((fallthrough))
+#else
+#define FALLTHROUGH /* fallthrough */
+#endif
+
/* Return to the previous frame on the dump stack, setting the current
* value to A. */
#define s_return(sc, a) s_goto(sc, _s_return(sc, a, 0))
@@ -3559,7 +3569,7 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
putstr(sc,"\nEval: ");
s_thread_to(sc,OP_P0LIST);
}
- /* fall through */
+ FALLTHROUGH;
CASE(OP_REAL_EVAL):
#endif
if (is_symbol(sc->code)) { /* symbol */
@@ -3637,7 +3647,7 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
free_cons(sc, sc->args, &callsite, &sc->args);
sc->code = car(sc->args);
sc->args = cdr(sc->args);
- /* Fallthrough. */
+ FALLTHROUGH;
CASE(OP_APPLY): /* apply 'code' to 'args' */
#if USE_TRACING
@@ -3648,7 +3658,7 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
putstr(sc,"\nApply to: ");
s_thread_to(sc,OP_P0LIST);
}
- /* fall through */
+ FALLTHROUGH;
CASE(OP_REAL_APPLY):
#endif
#if USE_HISTORY
@@ -3729,12 +3739,11 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
s_thread_to(sc,OP_APPLY);
}
}
- /* Fallthrough. */
#else
CASE(OP_LAMBDA): /* lambda */
sc->value = sc->code;
- /* Fallthrough. */
#endif
+ FALLTHROUGH;
CASE(OP_LAMBDA1):
gc_disable(sc, 1);
@@ -4657,13 +4666,9 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
CASE(OP_NULLP): /* null? */
s_retbool(car(sc->args) == sc->NIL);
CASE(OP_NUMEQ): /* = */
- /* Fallthrough. */
CASE(OP_LESS): /* < */
- /* Fallthrough. */
CASE(OP_GRE): /* > */
- /* Fallthrough. */
CASE(OP_LEQ): /* <= */
- /* Fallthrough. */
CASE(OP_GEQ): /* >= */
switch(op) {
case OP_NUMEQ: comp_func=num_eq; break;
@@ -4752,9 +4757,7 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
s_return(sc,sc->value);
CASE(OP_WRITE): /* write */
- /* Fallthrough. */
CASE(OP_DISPLAY): /* display */
- /* Fallthrough. */
CASE(OP_WRITE_CHAR): /* write-char */
if(is_pair(cdr(sc->args))) {
if(cadr(sc->args)!=sc->outport) {
@@ -4902,9 +4905,7 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
s_return(sc,sc->outport);
CASE(OP_OPEN_INFILE): /* open-input-file */
- /* Fallthrough. */
CASE(OP_OPEN_OUTFILE): /* open-output-file */
- /* Fallthrough. */
CASE(OP_OPEN_INOUTFILE): /* open-input-output-file */ {
int prop=0;
pointer p;
@@ -4924,7 +4925,6 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
#if USE_STRING_PORTS
CASE(OP_OPEN_INSTRING): /* open-input-string */
- /* Fallthrough. */
CASE(OP_OPEN_INOUTSTRING): /* open-input-output-string */ {
int prop=0;
pointer p;
@@ -5005,7 +5005,6 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
s_thread_to(sc,OP_READ_INTERNAL);
CASE(OP_READ_CHAR): /* read-char */
- /* Fallthrough. */
CASE(OP_PEEK_CHAR): /* peek-char */ {
int c;
if(is_pair(sc->args)) {