src/util/CompilerWarning.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Copyright (c) 2021-2026 ChilliBits. All rights reserved. | ||
| 2 | |||
| 3 | #include "CompilerWarning.h" | ||
| 4 | |||
| 5 | #include <util/CodeLoc.h> | ||
| 6 | |||
| 7 | namespace spice::compiler { | ||
| 8 | |||
| 9 | /** | ||
| 10 | * Constructor: Used in case that the exact code position where the warning occurred is known | ||
| 11 | * | ||
| 12 | * @param codeLoc Code location, where the warning occurred | ||
| 13 | * @param type Type of the warning | ||
| 14 | * @param message Warning message suffix | ||
| 15 | */ | ||
| 16 | 1767 | CompilerWarning::CompilerWarning(const CodeLoc &codeLoc, const CompilerWarningType type, const std::string &message) { | |
| 17 |
7/14✓ Branch 3 → 4 taken 1767 times.
✗ Branch 3 → 34 not taken.
✓ Branch 4 → 5 taken 1767 times.
✗ Branch 4 → 29 not taken.
✓ Branch 5 → 6 taken 1767 times.
✗ Branch 5 → 27 not taken.
✓ Branch 6 → 7 taken 1767 times.
✗ Branch 6 → 25 not taken.
✓ Branch 7 → 8 taken 1767 times.
✗ Branch 7 → 23 not taken.
✓ Branch 8 → 9 taken 1767 times.
✗ Branch 8 → 21 not taken.
✓ Branch 9 → 10 taken 1767 times.
✗ Branch 9 → 19 not taken.
|
1767 | warningMessage = "[Warning] " + codeLoc.toPrettyString() + ": " + getMessagePrefix(type) + ": " + message; |
| 18 | 1767 | } | |
| 19 | |||
| 20 | /** | ||
| 21 | * Constructor: Used in case the exact code position where the warning occurred is not known | ||
| 22 | * | ||
| 23 | * @param type Type of the warning | ||
| 24 | * @param message Warning message suffix | ||
| 25 | */ | ||
| 26 | ✗ | CompilerWarning::CompilerWarning(CompilerWarningType type, const std::string &message) { | |
| 27 | ✗ | warningMessage = "[Warning] " + getMessagePrefix(type) + ": " + message; | |
| 28 | ✗ | } | |
| 29 | |||
| 30 | /** | ||
| 31 | * Print the compiler warning to the standard error output | ||
| 32 | */ | ||
| 33 | 156 | void CompilerWarning::print() const { std::cout << "\033[33m" << warningMessage << "\033[0m\n"; } | |
| 34 | |||
| 35 | /** | ||
| 36 | * Get the prefix of the warning message for a particular error | ||
| 37 | * | ||
| 38 | * @param warningType Type of the warning | ||
| 39 | * @return Prefix string for the warning type | ||
| 40 | */ | ||
| 41 | 1767 | std::string CompilerWarning::getMessagePrefix(CompilerWarningType warningType) { | |
| 42 |
18/21✓ Branch 2 → 3 taken 5 times.
✓ Branch 2 → 9 taken 2 times.
✓ Branch 2 → 15 taken 3 times.
✓ Branch 2 → 21 taken 1 time.
✓ Branch 2 → 27 taken 1 time.
✓ Branch 2 → 33 taken 2 times.
✓ Branch 2 → 39 taken 8 times.
✓ Branch 2 → 45 taken 1 time.
✓ Branch 2 → 51 taken 1 time.
✓ Branch 2 → 57 taken 77 times.
✓ Branch 2 → 63 taken 1023 times.
✓ Branch 2 → 69 taken 5 times.
✓ Branch 2 → 75 taken 2 times.
✓ Branch 2 → 81 taken 627 times.
✓ Branch 2 → 87 taken 1 time.
✓ Branch 2 → 93 taken 2 times.
✓ Branch 2 → 99 taken 1 time.
✓ Branch 2 → 105 taken 5 times.
✗ Branch 2 → 111 not taken.
✗ Branch 2 → 117 not taken.
✗ Branch 2 → 123 not taken.
|
1767 | switch (warningType) { |
| 43 | 5 | case UNUSED_FUNCTION: | |
| 44 |
1/2✓ Branch 5 → 6 taken 5 times.
✗ Branch 5 → 125 not taken.
|
10 | return "Unused function"; |
| 45 | 2 | case UNUSED_PROCEDURE: | |
| 46 |
1/2✓ Branch 11 → 12 taken 2 times.
✗ Branch 11 → 128 not taken.
|
4 | return "Unused procedure"; |
| 47 | 3 | case UNUSED_METHOD: | |
| 48 |
1/2✓ Branch 17 → 18 taken 3 times.
✗ Branch 17 → 131 not taken.
|
6 | return "Unused method"; |
| 49 | 1 | case UNUSED_STRUCT: | |
| 50 |
1/2✓ Branch 23 → 24 taken 1 time.
✗ Branch 23 → 134 not taken.
|
2 | return "Unused struct"; |
| 51 | 1 | case UNUSED_INTERFACE: | |
| 52 |
1/2✓ Branch 29 → 30 taken 1 time.
✗ Branch 29 → 137 not taken.
|
2 | return "Unused interface"; |
| 53 | 2 | case UNUSED_IMPORT: | |
| 54 |
1/2✓ Branch 35 → 36 taken 2 times.
✗ Branch 35 → 140 not taken.
|
4 | return "Unused import"; |
| 55 | 8 | case UNUSED_FIELD: | |
| 56 |
1/2✓ Branch 41 → 42 taken 8 times.
✗ Branch 41 → 143 not taken.
|
16 | return "Unused field"; |
| 57 | 1 | case UNUSED_ENUM_ITEM: | |
| 58 |
1/2✓ Branch 47 → 48 taken 1 time.
✗ Branch 47 → 146 not taken.
|
2 | return "Unused enum item"; |
| 59 | 1 | case UNUSED_ALIAS: | |
| 60 |
1/2✓ Branch 53 → 54 taken 1 time.
✗ Branch 53 → 149 not taken.
|
2 | return "Unused type alias"; |
| 61 | 77 | case UNUSED_VARIABLE: | |
| 62 |
1/2✓ Branch 59 → 60 taken 77 times.
✗ Branch 59 → 152 not taken.
|
154 | return "Unused variable"; |
| 63 | 1023 | case UNUSED_RETURN_VALUE: | |
| 64 |
1/2✓ Branch 65 → 66 taken 1023 times.
✗ Branch 65 → 155 not taken.
|
2046 | return "Unused return value"; |
| 65 | 5 | case UNREACHABLE_CODE: | |
| 66 |
1/2✓ Branch 71 → 72 taken 5 times.
✗ Branch 71 → 158 not taken.
|
10 | return "Unreachable code detected"; |
| 67 | 2 | case SHADOWED_VARIABLE: | |
| 68 |
1/2✓ Branch 77 → 78 taken 2 times.
✗ Branch 77 → 161 not taken.
|
4 | return "Shadowed variable"; |
| 69 | 627 | case IDENTITY_CAST: | |
| 70 |
1/2✓ Branch 83 → 84 taken 627 times.
✗ Branch 83 → 164 not taken.
|
1254 | return "Identity cast"; |
| 71 | 1 | case SINGLE_GENERIC_TYPE_CONDITION: | |
| 72 |
1/2✓ Branch 89 → 90 taken 1 time.
✗ Branch 89 → 167 not taken.
|
2 | return "Only one type condition"; |
| 73 | 2 | case INEFFECTIVE_GENERIC_TYPE_CONDITION: | |
| 74 |
1/2✓ Branch 95 → 96 taken 2 times.
✗ Branch 95 → 170 not taken.
|
4 | return "Ineffective type condition"; |
| 75 | 1 | case BOOL_ASSIGN_AS_CONDITION: | |
| 76 |
1/2✓ Branch 101 → 102 taken 1 time.
✗ Branch 101 → 173 not taken.
|
2 | return "Bool assignment as condition"; |
| 77 | 5 | case ASYNC_LAMBDA_CAPTURE_RULE_VIOLATION: | |
| 78 |
1/2✓ Branch 107 → 108 taken 5 times.
✗ Branch 107 → 176 not taken.
|
10 | return "Lambda violates async lambda capture rules"; |
| 79 | ✗ | case UNINSTALL_FAILED: | |
| 80 | ✗ | return "Uninstall failed"; | |
| 81 | ✗ | case VERIFIER_DISABLED: | |
| 82 | ✗ | return "Verifier disabled"; | |
| 83 | } | ||
| 84 | − | assert_fail("Unknown warning"); // GCOV_EXCL_LINE | |
| 85 | return "Unknown warning"; // GCOV_EXCL_LINE | ||
| 86 | } | ||
| 87 | |||
| 88 | } // namespace spice::compiler | ||
| 89 |