Anastasia updated this revision to Diff 305723.
Anastasia added a comment.

Added full diff.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91534/new/

https://reviews.llvm.org/D91534

Files:
  clang/docs/DiagnosticsReference.rst
  clang/include/clang/Basic/DiagnosticParseKinds.td
  clang/lib/Parse/ParsePragma.cpp
  clang/test/Headers/opencl-c-header.cl
  clang/test/Parser/opencl-pragma.cl
  clang/test/SemaOpenCL/extension-begin.cl
  clang/test/SemaOpenCL/extension-version.cl

Index: clang/test/SemaOpenCL/extension-version.cl
===================================================================
--- clang/test/SemaOpenCL/extension-version.cl
+++ clang/test/SemaOpenCL/extension-version.cl
@@ -7,7 +7,11 @@
 // RUN: %clang_cc1 -x cl -cl-std=CL1.1 %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
 // RUN: %clang_cc1 -x cl -cl-std=CL1.2 %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
 // RUN: %clang_cc1 -x cl -cl-std=CL2.0 %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
-// RUN: %clang_cc1 -x cl -cl-std=clc++ %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -DTEST_CORE_FEATURES
+// RUN: %clang_cc1 -x cl -cl-std=clc++ %s -verify -triple spir-unknown-unknown -Wpedantic-core-features -Wpedantic-redundant-pragma -DTEST_CORE_FEATURES -DTEST_REDUNDANT_PRAGMA
+
+#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ == 200) && !(defined(TEST_CORE_FEATURES) || defined(TEST_REDUNDANT_PRAGMA))
+// expected-no-diagnostics
+#endif
 
 // Extensions in all versions
 #ifndef __opencl_c_int64
@@ -167,14 +171,14 @@
 #endif
 #pragma OPENCL EXTENSION cl_amd_media_ops2 : enable
 
-// FIXME: This pragma is meaningless and it doesn't add any functionality.
+// This pragma is meaningless and it doesn't add any functionality.
 // However we will probably need to keep it for backward compatibility.
 // In which case there is no need to guard its use by any version or a target
 // setting as it does absolutely nothing anyway.
-// The warning diagnostic should change however to something like -
-// - pragma has no effect.
 #pragma OPENCL EXTENSION cl_khr_depth_images : enable
-// expected-warning@-1{{unknown OpenCL extension 'cl_khr_depth_images' - ignoring}}
+#if defined(TEST_REDUNDANT_PRAGMA)
+// expected-warning@-2{{OpenCL extension pragma 'cl_khr_depth_images' has no effect - ignoring}}
+#endif
 
 #if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 120)
 #ifndef cl_intel_subgroups
Index: clang/test/SemaOpenCL/extension-begin.cl
===================================================================
--- clang/test/SemaOpenCL/extension-begin.cl
+++ clang/test/SemaOpenCL/extension-begin.cl
@@ -18,8 +18,8 @@
 
 #pragma OPENCL EXTENSION my_ext : enable
 #ifndef IMPLICIT_INCLUDE
-// expected-warning@-2 {{unknown OpenCL extension 'my_ext' - ignoring}}
-// expected-warning@+2 {{unknown OpenCL extension 'my_ext' - ignoring}}
+// expected-warning@-2 {{unknown OpenCL extension pragma 'my_ext' - ignoring}}
+// expected-warning@+2 {{unknown OpenCL extension pragma 'my_ext' - ignoring}}
 #endif // IMPLICIT_INCLUDE
 #pragma OPENCL EXTENSION my_ext : disable
 
Index: clang/test/Parser/opencl-pragma.cl
===================================================================
--- clang/test/Parser/opencl-pragma.cl
+++ clang/test/Parser/opencl-pragma.cl
@@ -2,7 +2,7 @@
 
 #pragma OPENCL EXTENSION cl_khr_fp16 : enable
 
-#pragma OPENCL EXTENSION cl_no_such_extension : disable /* expected-warning {{unknown OpenCL extension 'cl_no_such_extension' - ignoring}} */
+#pragma OPENCL EXTENSION cl_no_such_extension : disable /* expected-warning {{unknown OpenCL extension pragma 'cl_no_such_extension' - ignoring}} */
 
 #pragma OPENCL EXTENSION all : disable
 #pragma OPENCL EXTENSION all : enable /* expected-warning {{expected 'disable' - ignoring}} */
Index: clang/test/Headers/opencl-c-header.cl
===================================================================
--- clang/test/Headers/opencl-c-header.cl
+++ clang/test/Headers/opencl-c-header.cl
@@ -90,7 +90,7 @@
 #if defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ >= CL_VERSION_1_2)
 // expected-no-diagnostics
 #else //__OPENCL_C_VERSION__
-// expected-warning@+2{{unknown OpenCL extension 'cl_intel_planar_yuv' - ignoring}}
+// expected-warning@+2{{unknown OpenCL extension pragma 'cl_intel_planar_yuv' - ignoring}}
 #endif //__OPENCL_C_VERSION__
 #pragma OPENCL EXTENSION cl_intel_planar_yuv : enable
 
Index: clang/lib/Parse/ParsePragma.cpp
===================================================================
--- clang/lib/Parse/ParsePragma.cpp
+++ clang/lib/Parse/ParsePragma.cpp
@@ -786,9 +786,17 @@
     if (Name != Actions.getCurrentOpenCLExtension())
       PP.Diag(NameLoc, diag::warn_pragma_begin_end_mismatch);
     Actions.setCurrentOpenCLExtension("");
-  } else if (!Opt.isKnown(Name))
-    PP.Diag(NameLoc, diag::warn_pragma_unknown_extension) << Ident;
-  else if (Opt.isSupportedExtension(Name, getLangOpts()))
+  } else if (!Opt.isKnown(Name)) {
+    // The pragmas in this list do nothing but are kept mainly for backward
+    // compatibility. Pragmas from new extensions should not be added here.
+    // If the pragma does nothing it should not be added until its
+    // functionality is determined.
+    StringRef DeprecatedPragmas{"cl_khr_depth_images,"};
+    if (DeprecatedPragmas.find(Name) != StringRef::npos)
+      PP.Diag(NameLoc, diag::warn_pragma_deprecated_extension) << Ident;
+    else
+      PP.Diag(NameLoc, diag::warn_pragma_unknown_extension) << Ident;
+  } else if (Opt.isSupportedExtension(Name, getLangOpts()))
     Opt.enable(Name, State == Enable);
   else if (Opt.isSupportedCore(Name, getLangOpts()))
     PP.Diag(NameLoc, diag::warn_pragma_extension_is_core) << Ident;
Index: clang/include/clang/Basic/DiagnosticParseKinds.td
===================================================================
--- clang/include/clang/Basic/DiagnosticParseKinds.td
+++ clang/include/clang/Basic/DiagnosticParseKinds.td
@@ -1231,7 +1231,9 @@
 def warn_pragma_begin_end_mismatch : Warning<
   "OpenCL extension end directive mismatches begin directive - ignoring">, InGroup<IgnoredPragmas>;
 def warn_pragma_unknown_extension : Warning<
-  "unknown OpenCL extension %0 - ignoring">, InGroup<IgnoredPragmas>;
+  "unknown OpenCL extension pragma %0 - ignoring">, InGroup<IgnoredPragmas>;
+def warn_pragma_deprecated_extension : Warning<
+  "OpenCL extension pragma %0 has no effect - ignoring">, InGroup<DiagGroup<"pedantic-redundant-pragma">>, DefaultIgnore;
 def warn_pragma_unsupported_extension : Warning<
   "unsupported OpenCL extension %0 - ignoring">, InGroup<IgnoredPragmas>;
 def warn_pragma_extension_is_core : Warning<
Index: clang/docs/DiagnosticsReference.rst
===================================================================
--- clang/docs/DiagnosticsReference.rst
+++ clang/docs/DiagnosticsReference.rst
@@ -10393,6 +10393,15 @@
 +----------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
+-Wpedantic-redundant-pragma
+------------------------
+**Diagnostic text:**
+
++----------------------------------------------------------------------------------------------------------------------------------------------------------------+
+|:warning:`warning:` |nbsp| :diagtext:`OpenCL extension pragma` |nbsp| :placeholder:`A` |nbsp| :diagtext:`has no effect - ignoring`|
++----------------------------------------------------------------------------------------------------------------------------------------------------------------+
+
+
 -Wpessimizing-move
 ------------------
 **Diagnostic text:**
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to