summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.be/8443e173-30ee-4e83-9228-9e11414e3432/bugs/37103a3d-740b-4a09-9147-60029ab88948/values2
-rw-r--r--clang-plugin/gsignal-checker.cpp2
-rw-r--r--tests/gsignal-connect.c24
-rw-r--r--tests/gsignal.head.c13
4 files changed, 39 insertions, 2 deletions
diff --git a/.be/8443e173-30ee-4e83-9228-9e11414e3432/bugs/37103a3d-740b-4a09-9147-60029ab88948/values b/.be/8443e173-30ee-4e83-9228-9e11414e3432/bugs/37103a3d-740b-4a09-9147-60029ab88948/values
index 4bf8b4e..cdae251 100644
--- a/.be/8443e173-30ee-4e83-9228-9e11414e3432/bugs/37103a3d-740b-4a09-9147-60029ab88948/values
+++ b/.be/8443e173-30ee-4e83-9228-9e11414e3432/bugs/37103a3d-740b-4a09-9147-60029ab88948/values
@@ -26,7 +26,7 @@
- "status": "open",
+ "status": "fixed",
diff --git a/clang-plugin/gsignal-checker.cpp b/clang-plugin/gsignal-checker.cpp
index 7ecf189..624edaa 100644
--- a/clang-plugin/gsignal-checker.cpp
+++ b/clang-plugin/gsignal-checker.cpp
@@ -336,7 +336,7 @@ _type_info_to_type (GITypeInfo *type_info,
return context.getSizeType ();
case GI_TYPE_TAG_UTF8:
case GI_TYPE_TAG_FILENAME:
- return context.getPointerType (context.CharTy);
+ return context.getPointerType (context.getConstType (context.CharTy));
case GI_TYPE_TAG_UNICHAR:
return context.getIntTypeForBitwidth (32, false);
/* Non-basic types */
diff --git a/tests/gsignal-connect.c b/tests/gsignal-connect.c
index dc63a53..6d34bd6 100644
--- a/tests/gsignal-connect.c
+++ b/tests/gsignal-connect.c
@@ -172,3 +172,27 @@
g_signal_connect (some_object, "invalid-signal",
(GCallback) object_notify_cb, NULL);
}
+
+/*
+ * Incorrect type for argument ‘key’ in signal handler for signal ‘GSettings::changed’. Expected ‘const char *’ but saw ‘gchar *’.
+ * (GCallback) settings_changed_cb, NULL);
+ * ^
+ * note: expanded from macro 'g_signal_connect'
+ * g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
+ * ^
+ */
+{
+ // Signal handler doesn't mark the key as 'const'.
+ GSettings *settings = g_malloc (5); // only checking the type
+ g_signal_connect (settings, "changed",
+ (GCallback) settings_changed_cb, NULL);
+}
+
+/*
+ * No error
+ */
+{
+ GSettings *settings = g_malloc (5); // only checking the type
+ g_signal_connect (settings, "changed",
+ (GCallback) settings_changed_const_cb, NULL);
+}
diff --git a/tests/gsignal.head.c b/tests/gsignal.head.c
index 8b6e1ac..e4f3026 100644
--- a/tests/gsignal.head.c
+++ b/tests/gsignal.head.c
@@ -77,6 +77,19 @@ object_notify_extra_parameter_cb (GObject *gobject, GParamSpec *pspec,
/* Something */
}
+static void
+settings_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
+{
+ /* Something */
+}
+
+static void
+settings_changed_const_cb (GSettings *settings, const gchar *key,
+ gpointer user_data)
+{
+ /* Something */
+}
+
int
main (void)
{