diff options
-rw-r--r-- | .be/8443e173-30ee-4e83-9228-9e11414e3432/bugs/37103a3d-740b-4a09-9147-60029ab88948/values | 2 | ||||
-rw-r--r-- | clang-plugin/gsignal-checker.cpp | 2 | ||||
-rw-r--r-- | tests/gsignal-connect.c | 24 | ||||
-rw-r--r-- | tests/gsignal.head.c | 13 |
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) { |