aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2020-05-19 23:18:09 +0200
committerMark Wielaard <mark@klomp.org>2020-05-22 23:21:56 +0200
commit45c50b6a63a120d3eb6957883c4c7b968c84d010 (patch)
tree1448d767725d0846fda35da6d62253fbde7d31e4 /gcc
parent72af65b91cc2a2eb726afe56af6b44d6c57bb10f (diff)
downloadgcc-45c50b6a63a120d3eb6957883c4c7b968c84d010.zip
gcc-45c50b6a63a120d3eb6957883c4c7b968c84d010.tar.gz
gcc-45c50b6a63a120d3eb6957883c4c7b968c84d010.tar.bz2
Suggest including <stdbool.h> for bool, true and false
Currently gcc suggests to use _Bool instead of bool and doesn't give any suggestions when true or false are used, but undefined. This patch makes it so that (for C99 or higher) a fixit hint is emitted to include <stdbool.h>. gcc/c-family/ChangeLog: * known-headers.cc (get_stdlib_header_for_name): Return "<stdbool.h>" for "bool", "true" or "false" when STDLIB_C and flag_isoc99. gcc/testsuite/ChangeLog: * gcc.dg/spellcheck-stdbool.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog6
-rw-r--r--gcc/c-family/known-headers.cc8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/spellcheck-stdbool.c17
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 50614cf..4218403 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,9 @@
+2020-05-22 Mark Wielaard <mark@klomp.org>
+
+ * known-headers.cc (get_stdlib_header_for_name): Return
+ "<stdbool.h>" for "bool", "true" or "false" when STDLIB_C and
+ flag_isoc99.
+
2020-05-20 Nathan Sidwell <nathan@acm.org>
* c-common.c (try_to_locate_new_include_insertion_point): Revert change.
diff --git a/gcc/c-family/known-headers.cc b/gcc/c-family/known-headers.cc
index a211668..183ce28 100644
--- a/gcc/c-family/known-headers.cc
+++ b/gcc/c-family/known-headers.cc
@@ -158,6 +158,14 @@ get_stdlib_header_for_name (const char *name, enum stdlib lib)
for (size_t i = 0; i < num_hints; i++)
if (strcmp (name, hints[i].name) == 0)
return hints[i].header[lib];
+
+ /* Only for C99 and higher. */
+ if (lib == STDLIB_C && flag_isoc99)
+ if (strcmp (name, "bool") == 0
+ || strcmp (name, "true") == 0
+ || strcmp (name, "false") == 0)
+ return "<stdbool.h>";
+
return NULL;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bedaf9a..cb3a2d1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2020-05-22 Mark Wielaard <mark@klomp.org>
+ * gcc.dg/spellcheck-stdbool.c: New test.
+
+2020-05-22 Mark Wielaard <mark@klomp.org>
+
* gcc.dg/analyzer/signal-exit.c: New testcase.
2020-05-22 Uroš Bizjak <ubizjak@gmail.com>
diff --git a/gcc/testsuite/gcc.dg/spellcheck-stdbool.c b/gcc/testsuite/gcc.dg/spellcheck-stdbool.c
new file mode 100644
index 0000000..01f12da
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/spellcheck-stdbool.c
@@ -0,0 +1,17 @@
+/* { dg-options "-std=c99" } */
+/* Missing <stdbool.h>. */
+
+bool b; /* { dg-error "unknown type name 'bool'" } */
+/* { dg-message "'bool' is defined in header '<stdbool.h>'; did you forget to '#include <stdbool.h>'?" "" { target *-*-* } .-1 } */
+
+int test_true (void)
+{
+ return true; /* { dg-error "'true' undeclared" } */
+ /* { dg-message "'true' is defined in header '<stdbool.h>'; did you forget to '#include <stdbool.h>'?" "" { target *-*-* } .-1 } */
+}
+
+int test_false (void)
+{
+ return false; /* { dg-error "'false' undeclared" } */
+ /* { dg-message "'false' is defined in header '<stdbool.h>'; did you forget to '#include <stdbool.h>'?" "" { target *-*-* } .-1 } */
+}