https://github.com/ccrownhill updated https://github.com/llvm/llvm-project/pull/98016
>From 5dd2bb12dee26ba93d927ad1cd99fa610f9ace97 Mon Sep 17 00:00:00 2001 From: ccrownhill <ckronbich...@proton.me> Date: Mon, 8 Jul 2024 11:42:37 +0100 Subject: [PATCH 1/4] fix bug that undefined internal is a warning only for -pedantic-errors --- clang/include/clang/Basic/DiagnosticSemaKinds.td | 2 +- clang/test/Sema/undefined_internal.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 clang/test/Sema/undefined_internal.c diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 44fd51ec9abc9..ae3dbedd01693 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -6013,7 +6013,7 @@ def note_deleted_assign_field : Note< "because field %2 is of %select{reference|const-qualified}4 type %3">; // These should be errors. -def warn_undefined_internal : Warning< +def warn_undefined_internal : ExtWarn< "%select{function|variable}0 %q1 has internal linkage but is not defined">, InGroup<DiagGroup<"undefined-internal">>; def err_undefined_internal_type : Error< diff --git a/clang/test/Sema/undefined_internal.c b/clang/test/Sema/undefined_internal.c new file mode 100644 index 0000000000000..1b6c3a4b76e05 --- /dev/null +++ b/clang/test/Sema/undefined_internal.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -pedantic-errors + +static void f(void); // expected-error {{function 'f' has internal linkage but is not defined}} + +int main(void) +{ + f; + // expected-note@-1 {{used here}} + // expected-warning@-2 {{expression result unused}} +} + >From 9e679ac9c2c669b595d361516b7e499e0b0457ba Mon Sep 17 00:00:00 2001 From: ccrownhill <ckronbich...@proton.me> Date: Wed, 10 Jul 2024 12:06:28 +0100 Subject: [PATCH 2/4] add to change of undefined_internal to error for -pedantic-errors to release notes --- clang/docs/ReleaseNotes.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 838cb69f647ee..a4146aeee25de 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -554,6 +554,9 @@ Attribute Changes in Clang Improvements to Clang's diagnostics ----------------------------------- +- Clang now emits an error instead of a warning for `undefined_internal` + when compiling with `-pedantic-errors` to conform to the C standard + - Clang now applies syntax highlighting to the code snippets it prints. >From b553d87a675cac5d60df2b1fdc586d6b7af6b687 Mon Sep 17 00:00:00 2001 From: ccrownhill <ckronbich...@proton.me> Date: Wed, 10 Jul 2024 19:04:17 +0200 Subject: [PATCH 3/4] add more tests for undefined internals --- ...undefined_internal.c => undefined-internal-basic.c} | 0 clang/test/Sema/undefined-internal-generic-selection.c | 10 ++++++++++ clang/test/Sema/undefined-internal-sizeof.c | 10 ++++++++++ clang/test/Sema/undefined-internal-typeof.c | 10 ++++++++++ 4 files changed, 30 insertions(+) rename clang/test/Sema/{undefined_internal.c => undefined-internal-basic.c} (100%) create mode 100644 clang/test/Sema/undefined-internal-generic-selection.c create mode 100644 clang/test/Sema/undefined-internal-sizeof.c create mode 100644 clang/test/Sema/undefined-internal-typeof.c diff --git a/clang/test/Sema/undefined_internal.c b/clang/test/Sema/undefined-internal-basic.c similarity index 100% rename from clang/test/Sema/undefined_internal.c rename to clang/test/Sema/undefined-internal-basic.c diff --git a/clang/test/Sema/undefined-internal-generic-selection.c b/clang/test/Sema/undefined-internal-generic-selection.c new file mode 100644 index 0000000000000..0a2b4b61e68e7 --- /dev/null +++ b/clang/test/Sema/undefined-internal-generic-selection.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -pedantic-errors + +// expected-no-diagnostics + +static int f(void); + +int main(void) +{ + int x = _Generic(f(), int: 10, short: 20); +} diff --git a/clang/test/Sema/undefined-internal-sizeof.c b/clang/test/Sema/undefined-internal-sizeof.c new file mode 100644 index 0000000000000..f609473b1341c --- /dev/null +++ b/clang/test/Sema/undefined-internal-sizeof.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -pedantic-errors + +// expected-no-diagnostics + +static int f(void); + +int main(void) +{ + int x = sizeof f(); +} diff --git a/clang/test/Sema/undefined-internal-typeof.c b/clang/test/Sema/undefined-internal-typeof.c new file mode 100644 index 0000000000000..51c682ef7e942 --- /dev/null +++ b/clang/test/Sema/undefined-internal-typeof.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c23 -pedantic-errors + +// expected-no-diagnostics + +static int f(void); + +int main(void) +{ + typeof(f()) x; +} >From 72a5f4084167b9c1930adbd3756450e5e908b674 Mon Sep 17 00:00:00 2001 From: ccrownhill <ckronbich...@proton.me> Date: Thu, 11 Jul 2024 10:17:58 +0200 Subject: [PATCH 4/4] cover alignof as well as illegal _Generic case for undefined_internal error test --- clang/test/Sema/undefined-internal-alignof.c | 10 ++++++++++ clang/test/Sema/undefined-internal-generic-selection.c | 10 ++++++---- ...ternal-typeof.c => undefined-internal-typeof-c23.c} | 0 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 clang/test/Sema/undefined-internal-alignof.c rename clang/test/Sema/{undefined-internal-typeof.c => undefined-internal-typeof-c23.c} (100%) diff --git a/clang/test/Sema/undefined-internal-alignof.c b/clang/test/Sema/undefined-internal-alignof.c new file mode 100644 index 0000000000000..7083857b67cf9 --- /dev/null +++ b/clang/test/Sema/undefined-internal-alignof.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -pedantic-errors + +static void f(void); // expected-no-error + +int main(void) +{ + int i = _Alignof(f); + // expected-error@-1 {{'_Alignof' applied to an expression is a GNU extension}} + // expected-error@-2 {{invalid application of 'alignof' to a function type}} +} diff --git a/clang/test/Sema/undefined-internal-generic-selection.c b/clang/test/Sema/undefined-internal-generic-selection.c index 0a2b4b61e68e7..db5e33fff769b 100644 --- a/clang/test/Sema/undefined-internal-generic-selection.c +++ b/clang/test/Sema/undefined-internal-generic-selection.c @@ -1,10 +1,12 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s -pedantic-errors -// expected-no-diagnostics - -static int f(void); +static void *f(void); // expected-error {{function 'f' has internal linkage but is not defined}} int main(void) { - int x = _Generic(f(), int: 10, short: 20); + int j = _Generic(&f, void *(*)(void): 10, default: 20); + // expected-no-diagnostic@-1 + + void *k = _Generic(&f, void *(*)(void): f(), default: 20); + // expected-note@-1 {{used here}} } diff --git a/clang/test/Sema/undefined-internal-typeof.c b/clang/test/Sema/undefined-internal-typeof-c23.c similarity index 100% rename from clang/test/Sema/undefined-internal-typeof.c rename to clang/test/Sema/undefined-internal-typeof-c23.c _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits