[PATCH] D90928: [OpenCL] Add assertions to extension lookup

Erik Tomusk via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Nov 6 03:34:36 PST 2020


erik2020 created this revision.
erik2020 added a reviewer: ldrumm.
erik2020 added a project: clang.
Herald added subscribers: cfe-commits, dexonsmith, Anastasia, yaxunl.
erik2020 requested review of this revision.

Calling any of the `OpenCLOptions::is*()` functions (except `isKnown()`) with an unknown extension string results in a seg fault. This patch adds assertions to catch these conditions.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90928

Files:
  clang/include/clang/Basic/OpenCLOptions.h


Index: clang/include/clang/Basic/OpenCLOptions.h
===================================================================
--- clang/include/clang/Basic/OpenCLOptions.h
+++ clang/include/clang/Basic/OpenCLOptions.h
@@ -37,12 +37,14 @@
   }
 
   bool isEnabled(llvm::StringRef Ext) const {
+    assert(OptMap.find(Ext) != OptMap.end() && "Unknown extension.");
     return OptMap.find(Ext)->second.Enabled;
   }
 
   // Is supported as either an extension or an (optional) core feature for
   // OpenCL version \p CLVer.
   bool isSupported(llvm::StringRef Ext, const LangOptions &LO) const {
+    assert(OptMap.find(Ext) != OptMap.end() && "Unknown extension.");
     // In C++ mode all extensions should work at least as in v2.0.
     auto CLVer = LO.OpenCLCPlusPlus ? 200 : LO.OpenCLVersion;
     auto I = OptMap.find(Ext)->getValue();
@@ -52,6 +54,7 @@
   // Is supported (optional) OpenCL core features for OpenCL version \p CLVer.
   // For supported extension, return false.
   bool isSupportedCore(llvm::StringRef Ext, const LangOptions &LO) const {
+    assert(OptMap.find(Ext) != OptMap.end() && "Unknown extension.");
     // In C++ mode all extensions should work at least as in v2.0.
     auto CLVer = LO.OpenCLCPlusPlus ? 200 : LO.OpenCLVersion;
     auto I = OptMap.find(Ext)->getValue();
@@ -61,6 +64,7 @@
   // Is supported OpenCL extension for OpenCL version \p CLVer.
   // For supported (optional) core feature, return false.
   bool isSupportedExtension(llvm::StringRef Ext, const LangOptions &LO) const {
+    assert(OptMap.find(Ext) != OptMap.end() && "Unknown extension.");
     // In C++ mode all extensions should work at least as in v2.0.
     auto CLVer = LO.OpenCLCPlusPlus ? 200 : LO.OpenCLVersion;
     auto I = OptMap.find(Ext)->getValue();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90928.303401.patch
Type: text/x-patch
Size: 1766 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201106/a0492067/attachment.bin>


More information about the cfe-commits mailing list