Pedantically warn about // comments in gnu89 mode
authorAaron Ballman <aaron@aaronballman.com>
Thu, 5 May 2022 18:33:55 +0000 (14:33 -0400)
committerAaron Ballman <aaron@aaronballman.com>
Thu, 5 May 2022 18:35:47 +0000 (14:35 -0400)
GCC warns with a pedantic warning when -std=gnu89, but Clang would only
diagnose in -std=c89 mode. Clang now matches the GCC behavior in both
modes.

Fixes #18427

clang/docs/ReleaseNotes.rst
clang/include/clang/Basic/LangStandards.def
clang/test/Lexer/c90.c
clang/test/Sema/gnu89.c

index 87e4df5..090b4c6 100644 (file)
@@ -147,6 +147,9 @@ Bug Fixes
   because there is no way to fully qualify the enumerator name, so this
   "extension" was unintentional and useless. This fixes
   `Issue 42372 <https://github.com/llvm/llvm-project/issues/42372>`_.
+- Now correctly diagnose use of ``//`` comments in ``gnu89`` mode (which
+  matches the behavior of GCC) in addition to ``c89`` mode. This fixes
+  `Issue 18427 <https://github.com/llvm/llvm-project/issues/18427>`_.
 
 Improvements to Clang's diagnostics
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
index 323032f..d4e42b4 100644 (file)
@@ -46,7 +46,7 @@ LANGSTANDARD(c94, "iso9899:199409",
 
 LANGSTANDARD(gnu89, "gnu89",
              C, "ISO C 1990 with GNU extensions",
-             LineComment | Digraphs | GNUMode)
+             Digraphs | GNUMode)
 LANGSTANDARD_ALIAS(gnu89, "gnu90")
 
 // C99-ish modes
index 8752404..39ffdc1 100644 (file)
@@ -1,5 +1,7 @@
 /* RUN: %clang_cc1 -std=c90 -fsyntax-only %s -verify -pedantic-errors
  */
+/* RUN: %clang_cc1 -std=gnu89 -fsyntax-only %s -verify -pedantic-errors
+ */
 
 enum { cast_hex = (long) (
       0x0p-1   /* expected-error {{hexadecimal floating constants are a C99 feature}} */
index 1be717f..d96d353 100644 (file)
@@ -1,5 +1,6 @@
-// RUN: %clang_cc1 %s -std=gnu89 -pedantic -fsyntax-only -verify
+/* RUN: %clang_cc1 %s -std=gnu89 -pedantic -fsyntax-only -verify
+ */
 
 int f(int restrict);
 
-void main(void) {} // expected-warning {{return type of 'main' is not 'int'}} expected-note {{change return type to 'int'}}
+void main(void) {} /* expected-warning {{return type of 'main' is not 'int'}} expected-note {{change return type to 'int'}} */