summaryrefslogtreecommitdiff
path: root/command_line/C++_Parser/Src/Library/StdTargetWarningHelpers-cc.c
blob: c1f378d151b73ca53b0114c110861074e0376188 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "parser.h"

PExtraWarningC pExtraWarningC = {0};
Pragma warningPragmas[] = {
        &pExtraWarningC.warn_largeargs, "warn_largeargs", 0,
        &pExtraWarningC.warn_padding, "warn_padding", 0,
        &pExtraWarningC.warn_resultnotused, "warn_resultnotused", 0,
        &pExtraWarningC.warn_ptr_int_conv, "warn_ptr_int_conv", 0,
        &pExtraWarningC.warn_no_side_effect, "warn_no_side_effect", 0,
        0, 0, 0
};

int TargetSetWarningFlags(short val, Boolean set) {
    switch (val) {
        case 'Ip': pWarningC.warn_illpragma = set; break;
        case 'Ed': pWarningC.warn_emptydecl = set; break;
        case 'Pu': pWarningC.warn_possunwant = set; break;
        case 'Uv': pWarningC.warn_unusedvar = set; break;
        case 'Ua': pWarningC.warn_unusedarg = set; break;
        case 'Ec': pWarningC.warn_extracomma = set; break;
        case 'Pd': pWarningC.pedantic = set; break;
        case 'Hv': pWarningC.warn_hidevirtual = set; break;
        case 'Ic': pWarningC.warn_implicitconv = set; break;
        case 'Ni': pWarningC.warn_notinlined = set; break;
        case 'Sc': pWarningC.warn_structclass = set; break;
        case 'Pa': pExtraWarningC.warn_padding = set ? PR_ON : PR_OFF; break;
        case 'Nu': pExtraWarningC.warn_resultnotused = set ? PR_ON : PR_OFF; break;
        case 'Se': pExtraWarningC.warn_no_side_effect = set ? PR_ON : PR_OFF; break;
        case 'PI': pExtraWarningC.warn_ptr_int_conv = set ? PR_ON : PR_OFF; break;
        case 'La': pExtraWarningC.warn_largeargs = set ? PR_ON : PR_OFF; break;
        case 'We': pWarningC.warningerrors = set; break;
        case 'Cp': pFrontEndC.checkprotos = set; break;
        default: return 0;
    }

    return 1;
}

void TargetDisplayWarningOptions(Handle txt) {
    HPrintF(txt, "C language warning options:\n");

    if (pWarningC.warn_illpragma)
        HPrintF(txt, "\t- illegal pragmas\n");
    if (pWarningC.warn_emptydecl)
        HPrintF(txt, "\t- empty declarations\n");
    if (pWarningC.warn_possunwant)
        HPrintF(txt, "\t- possible unwanted effects\n");
    if (pWarningC.warn_unusedvar)
        HPrintF(txt, "\t- unused variables\n");
    if (pWarningC.warn_unusedarg)
        HPrintF(txt, "\t- unused arguments\n");
    if (pWarningC.warn_extracomma)
        HPrintF(txt, "\t- extra commas\n");
    if (pWarningC.pedantic)
        HPrintF(txt, "\t- pedantic\n");
    if (pWarningC.warn_hidevirtual)
        HPrintF(txt, "\t- hidden virtual functions\n");
    if (pWarningC.warn_implicitconv)
        HPrintF(txt, "\t- implicit conversions\n");
    if (pWarningC.warn_notinlined)
        HPrintF(txt, "\t- 'inline' not performed\n");
    if (pWarningC.warn_structclass)
        HPrintF(txt, "\t- struct/class conflict\n");
    if (pExtraWarningC.warn_largeargs == 1)
        HPrintF(txt, "\t- large args passed to unprototyped functions\n");
    if (pExtraWarningC.warn_padding == 1)
        HPrintF(txt, "\t- padding added between struct members\n");
    if (pExtraWarningC.warn_resultnotused == 1)
        HPrintF(txt, "\t- result of non-void function call not used\n");
    if (pExtraWarningC.warn_no_side_effect == 1)
        HPrintF(txt, "\t- use of expressions as statements without side effects\n");
    if (pExtraWarningC.warn_ptr_int_conv == 1)
        HPrintF(txt, "\t- implicit integer/pointer conversions\n");
    if (pFrontEndC.checkprotos)
        HPrintF(txt, "\t- checking prototypes\n");

    if (pWarningC.warningerrors)
        HPrintF(txt, "\t- warnings are errors\n");
    else
        HPrintF(txt, "\t- warnings are not errors\n");
}