<div dir="ltr">The test in this commit doesn't pass. I've reverted this for now in c88390468cdd1de4283b2c5c7889f16c477791cd<div><br></div><div>Please run the tests you're adding before committing a change.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 2, 2020 at 10:12 AM Aaron Ballman via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Frank Derry Wanye<br>
Date: 2020-11-02T10:11:38-05:00<br>
New Revision: 43a38a65233039b5e71797a644d41a890f8d7f2b<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/43a38a65233039b5e71797a644d41a890f8d7f2b" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/43a38a65233039b5e71797a644d41a890f8d7f2b</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/43a38a65233039b5e71797a644d41a890f8d7f2b.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/43a38a65233039b5e71797a644d41a890f8d7f2b.diff</a><br>
<br>
LOG: Add a new altera kernel name restriction check to clang-tidy.<br>
<br>
The altera kernel name restriction check finds kernel files and include<br>
directives whose filename is "<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>", "Verilog.cl", or "VHDL.cl".<br>
Such kernel file names cause the Altera Offline Compiler to generate<br>
intermediate design files that have the same names as certain internal<br>
files, which leads to a compilation error.<br>
<br>
As per the "Guidelines for Naming the Kernel" section in the "Intel FPGA<br>
SDK for OpenCL Pro Edition: Programming Guide."<br>
<br>
Added: <br>
    clang-tools-extra/clang-tidy/altera/KernelNameRestrictionCheck.cpp<br>
    clang-tools-extra/clang-tidy/altera/KernelNameRestrictionCheck.h<br>
    clang-tools-extra/docs/clang-tidy/checks/altera-kernel-name-restriction.rst<br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a><br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/kernel.h<br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/other_Verilog.cl<br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/otherdir/<a href="http://vhdl.cl" rel="noreferrer" target="_blank">vhdl.cl</a><br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://otherthing.cl" rel="noreferrer" target="_blank">otherthing.cl</a><br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/dir/<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a><br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://kernel.cl/foo.h" rel="noreferrer" target="_blank">kernel.cl/foo.h</a><br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://verilog.cl/foo.h" rel="noreferrer" target="_blank">verilog.cl/foo.h</a><br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://vhdl.cl/foo.h" rel="noreferrer" target="_blank">vhdl.cl/foo.h</a><br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://some_kernel.cl" rel="noreferrer" target="_blank">some_kernel.cl</a><br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/somedir/<a href="http://verilog.cl" rel="noreferrer" target="_blank">verilog.cl</a><br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/thing.h<br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vERILOG.cl<br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/verilog.h<br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vhdl.CL<br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vhdl.h<br>
    clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://vhdl_number_two.cl" rel="noreferrer" target="_blank">vhdl_number_two.cl</a><br>
    clang-tools-extra/test/clang-tidy/checkers/altera-kernel-name-restriction.cpp<br>
<br>
Modified: <br>
    clang-tools-extra/clang-tidy/altera/AlteraTidyModule.cpp<br>
    clang-tools-extra/clang-tidy/altera/CMakeLists.txt<br>
    clang-tools-extra/docs/ReleaseNotes.rst<br>
    clang-tools-extra/docs/clang-tidy/checks/list.rst<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff  --git a/clang-tools-extra/clang-tidy/altera/AlteraTidyModule.cpp b/clang-tools-extra/clang-tidy/altera/AlteraTidyModule.cpp<br>
index d91f67ac1485..d3e906b673ce 100644<br>
--- a/clang-tools-extra/clang-tidy/altera/AlteraTidyModule.cpp<br>
+++ b/clang-tools-extra/clang-tidy/altera/AlteraTidyModule.cpp<br>
@@ -9,6 +9,7 @@<br>
 #include "../ClangTidy.h"<br>
 #include "../ClangTidyModule.h"<br>
 #include "../ClangTidyModuleRegistry.h"<br>
+#include "KernelNameRestrictionCheck.h"<br>
 #include "StructPackAlignCheck.h"<br>
<br>
 using namespace clang::ast_matchers;<br>
@@ -20,6 +21,8 @@ namespace altera {<br>
 class AlteraModule : public ClangTidyModule {<br>
 public:<br>
   void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {<br>
+    CheckFactories.registerCheck<KernelNameRestrictionCheck>(<br>
+        "altera-kernel-name-restriction");<br>
     CheckFactories.registerCheck<StructPackAlignCheck>(<br>
         "altera-struct-pack-align");<br>
   }<br>
<br>
diff  --git a/clang-tools-extra/clang-tidy/altera/CMakeLists.txt b/clang-tools-extra/clang-tidy/altera/CMakeLists.txt<br>
index ed28d9f4892d..8ab5cc1aa4ad 100644<br>
--- a/clang-tools-extra/clang-tidy/altera/CMakeLists.txt<br>
+++ b/clang-tools-extra/clang-tidy/altera/CMakeLists.txt<br>
@@ -5,6 +5,7 @@ set(LLVM_LINK_COMPONENTS<br>
<br>
 add_clang_library(clangTidyAlteraModule<br>
   AlteraTidyModule.cpp<br>
+  KernelNameRestrictionCheck.cpp<br>
   StructPackAlignCheck.cpp<br>
<br>
   LINK_LIBS<br>
<br>
diff  --git a/clang-tools-extra/clang-tidy/altera/KernelNameRestrictionCheck.cpp b/clang-tools-extra/clang-tidy/altera/KernelNameRestrictionCheck.cpp<br>
new file mode 100644<br>
index 000000000000..eb49977cbedb<br>
--- /dev/null<br>
+++ b/clang-tools-extra/clang-tidy/altera/KernelNameRestrictionCheck.cpp<br>
@@ -0,0 +1,107 @@<br>
+//===--- KernelNameRestrictionCheck.cpp - clang-tidy ----------------------===//<br>
+//<br>
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.<br>
+// See <a href="https://llvm.org/LICENSE.txt" rel="noreferrer" target="_blank">https://llvm.org/LICENSE.txt</a> for license information.<br>
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#include "KernelNameRestrictionCheck.h"<br>
+#include "clang/Frontend/CompilerInstance.h"<br>
+#include "clang/Lex/PPCallbacks.h"<br>
+#include "clang/Lex/Preprocessor.h"<br>
+#include <string><br>
+#include <vector><br>
+<br>
+using namespace clang::ast_matchers;<br>
+<br>
+namespace clang {<br>
+namespace tidy {<br>
+namespace altera {<br>
+<br>
+namespace {<br>
+<br>
+class KernelNameRestrictionPPCallbacks : public PPCallbacks {<br>
+public:<br>
+  explicit KernelNameRestrictionPPCallbacks(ClangTidyCheck &Check,<br>
+                                            const SourceManager &SM)<br>
+      : Check(Check), SM(SM) {}<br>
+<br>
+  void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok,<br>
+                          StringRef FileName, bool IsAngled,<br>
+                          CharSourceRange FileNameRange, const FileEntry *File,<br>
+                          StringRef SearchPath, StringRef RelativePath,<br>
+                          const Module *Imported,<br>
+                          SrcMgr::CharacteristicKind FileType) override;<br>
+<br>
+  void EndOfMainFile() override;<br>
+<br>
+private:<br>
+  /// Returns true if the name of the file with path FilePath is '<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>',<br>
+  /// '<a href="http://verilog.cl" rel="noreferrer" target="_blank">verilog.cl</a>', or '<a href="http://vhdl.cl" rel="noreferrer" target="_blank">vhdl.cl</a>'. The file name check is case insensitive.<br>
+  bool FileNameIsRestricted(StringRef FilePath);<br>
+<br>
+  struct IncludeDirective {<br>
+    SourceLocation Loc; // Location in the include directive.<br>
+    StringRef FileName; // Filename as a string.<br>
+  };<br>
+<br>
+  std::vector<IncludeDirective> IncludeDirectives;<br>
+  ClangTidyCheck &Check;<br>
+  const SourceManager &SM;<br>
+};<br>
+<br>
+} // namespace<br>
+<br>
+void KernelNameRestrictionCheck::registerPPCallbacks(const SourceManager &SM,<br>
+                                                     Preprocessor *PP,<br>
+                                                     Preprocessor *) {<br>
+  PP->addPPCallbacks(<br>
+      std::make_unique<KernelNameRestrictionPPCallbacks>(*this, SM));<br>
+}<br>
+<br>
+void KernelNameRestrictionPPCallbacks::InclusionDirective(<br>
+    SourceLocation HashLoc, const Token &, StringRef FileName, bool,<br>
+    CharSourceRange, const FileEntry *, StringRef, StringRef, const Module *,<br>
+    SrcMgr::CharacteristicKind) {<br>
+  IncludeDirective ID = {HashLoc, FileName};<br>
+  IncludeDirectives.push_back(std::move(ID));<br>
+}<br>
+<br>
+bool KernelNameRestrictionPPCallbacks::FileNameIsRestricted(<br>
+    StringRef FileName) {<br>
+  return FileName.equals_lower("<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>") ||<br>
+         FileName.equals_lower("<a href="http://verilog.cl" rel="noreferrer" target="_blank">verilog.cl</a>") ||<br>
+         FileName.equals_lower("<a href="http://vhdl.cl" rel="noreferrer" target="_blank">vhdl.cl</a>");<br>
+}<br>
+<br>
+void KernelNameRestrictionPPCallbacks::EndOfMainFile() {<br>
+<br>
+  // Check main file for restricted names.<br>
+  const FileEntry *Entry = SM.getFileEntryForID(SM.getMainFileID());<br>
+  StringRef FileName = llvm::sys::path::filename(Entry->getName());<br>
+  if (FileNameIsRestricted(FileName))<br>
+    Check.diag(SM.getLocForStartOfFile(SM.getMainFileID()),<br>
+               "compiling '%0' may cause additional compilation errors due "<br>
+               "to the name of the kernel source file; consider renaming the "<br>
+               "included kernel source file")<br>
+        << FileName;<br>
+<br>
+  if (IncludeDirectives.empty())<br>
+    return;<br>
+<br>
+  // Check included files for restricted names.<br>
+  for (const IncludeDirective &ID : IncludeDirectives) {<br>
+    StringRef FileName = llvm::sys::path::filename(ID.FileName);<br>
+    if (FileNameIsRestricted(FileName))<br>
+      Check.diag(ID.Loc,<br>
+                 "including '%0' may cause additional compilation errors due "<br>
+                 "to the name of the kernel source file; consider renaming the "<br>
+                 "included kernel source file")<br>
+          << FileName;<br>
+  }<br>
+}<br>
+<br>
+} // namespace altera<br>
+} // namespace tidy<br>
+} // namespace clang<br>
<br>
diff  --git a/clang-tools-extra/clang-tidy/altera/KernelNameRestrictionCheck.h b/clang-tools-extra/clang-tidy/altera/KernelNameRestrictionCheck.h<br>
new file mode 100644<br>
index 000000000000..cf91ca1fd4c0<br>
--- /dev/null<br>
+++ b/clang-tools-extra/clang-tidy/altera/KernelNameRestrictionCheck.h<br>
@@ -0,0 +1,35 @@<br>
+//===--- KernelNameRestrictionCheck.h - clang-tidy --------------*- C++ -*-===//<br>
+//<br>
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.<br>
+// See <a href="https://llvm.org/LICENSE.txt" rel="noreferrer" target="_blank">https://llvm.org/LICENSE.txt</a> for license information.<br>
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ALTERA_KERNEL_NAME_RESTRICTION_CHECK_H<br>
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ALTERA_KERNEL_NAME_RESTRICTION_CHECK_H<br>
+<br>
+#include "../ClangTidyCheck.h"<br>
+<br>
+namespace clang {<br>
+namespace tidy {<br>
+namespace altera {<br>
+<br>
+/// Finds kernel files and include directives whose filename is `<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>`,<br>
+/// `Verilog.cl`, or `VHDL.cl`.<br>
+///<br>
+/// For the user-facing documentation see:<br>
+/// <a href="http://clang.llvm.org/extra/clang-tidy/checks/altera-kernel-name-restriction.html" rel="noreferrer" target="_blank">http://clang.llvm.org/extra/clang-tidy/checks/altera-kernel-name-restriction.html</a><br>
+class KernelNameRestrictionCheck : public ClangTidyCheck {<br>
+public:<br>
+  KernelNameRestrictionCheck(StringRef Name, ClangTidyContext *Context)<br>
+      : ClangTidyCheck(Name, Context) {}<br>
+  void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP,<br>
+                           Preprocessor *) override;<br>
+};<br>
+<br>
+} // namespace altera<br>
+} // namespace tidy<br>
+} // namespace clang<br>
+<br>
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ALTERA_KERNEL_NAME_RESTRICTION_CHECK_H<br>
<br>
diff  --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst<br>
index 9a182d534615..a5f1502f51c8 100644<br>
--- a/clang-tools-extra/docs/ReleaseNotes.rst<br>
+++ b/clang-tools-extra/docs/ReleaseNotes.rst<br>
@@ -85,6 +85,12 @@ New modules<br>
 New checks<br>
 ^^^^^^^^^^<br>
<br>
+- New :doc:`altera-kernel-name-restriction<br>
+  <clang-tidy/checks/kernel-name-restriction>` check.<br>
+<br>
+  Finds kernel files and include directives whose filename is `<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>`,<br>
+  `Verilog.cl`, or `VHDL.cl`.<br>
+<br>
 - New :doc:`altera-struct-pack-align<br>
   <clang-tidy/checks/altera-struct-pack-align>` check.<br>
<br>
<br>
diff  --git a/clang-tools-extra/docs/clang-tidy/checks/altera-kernel-name-restriction.rst b/clang-tools-extra/docs/clang-tidy/checks/altera-kernel-name-restriction.rst<br>
new file mode 100644<br>
index 000000000000..86cc10bef957<br>
--- /dev/null<br>
+++ b/clang-tools-extra/docs/clang-tidy/checks/altera-kernel-name-restriction.rst<br>
@@ -0,0 +1,15 @@<br>
+.. title:: clang-tidy - altera-kernel-name-restriction<br>
+<br>
+altera-kernel-name-restriction<br>
+==============================<br>
+<br>
+Finds kernel files and include directives whose filename is `<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>`,<br>
+`Verilog.cl`, or `VHDL.cl`. The check is case insensitive.<br>
+<br>
+Such kernel file names cause the offline compiler to generate intermediate<br>
+design files that have the same names as certain internal files, which<br>
+leads to a compilation error.<br>
+<br>
+Based on the `Guidelines for Naming the Kernel` section in the<br>
+`Intel FPGA SDK for OpenCL Pro Edition: Programming Guide<br>
+<<a href="https://www.intel.com/content/www/us/en/programmable/documentation/mwh1391807965224.html#ewa1412973930963" rel="noreferrer" target="_blank">https://www.intel.com/content/www/us/en/programmable/documentation/mwh1391807965224.html#ewa1412973930963</a>>`_.<br>
<br>
diff  --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst<br>
index ec0e200b91d1..5e2bb0c67ef2 100644<br>
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst<br>
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst<br>
@@ -30,6 +30,7 @@ Clang-Tidy Checks<br>
    `abseil-time-comparison <abseil-time-comparison.html>`_, "Yes"<br>
    `abseil-time-subtraction <abseil-time-subtraction.html>`_, "Yes"<br>
    `abseil-upgrade-duration-conversions <abseil-upgrade-duration-conversions.html>`_, "Yes"<br>
+   `altera-kernel-name-restriction <altera-kernel-name-restriction.html>`_,<br>
    `altera-struct-pack-align <altera-struct-pack-align.html>`_,<br>
    `android-cloexec-accept <android-cloexec-accept.html>`_, "Yes"<br>
    `android-cloexec-accept4 <android-cloexec-accept4.html>`_,<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a> b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a><br>
new file mode 100644<br>
index 000000000000..cb6da8c213f8<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a><br>
@@ -0,0 +1 @@<br>
+const int KERNELINT = 1;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/kernel.h b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/kernel.h<br>
new file mode 100644<br>
index 000000000000..83a4de7f84e4<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/kernel.h<br>
@@ -0,0 +1 @@<br>
+const int KERNELINT3 = 1;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/other_Verilog.cl b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/other_Verilog.cl<br>
new file mode 100644<br>
index 000000000000..4ca87e32e7d5<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/other_Verilog.cl<br>
@@ -0,0 +1 @@<br>
+const int OTHERVERILOGINT = 2;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/otherdir/<a href="http://vhdl.cl" rel="noreferrer" target="_blank">vhdl.cl</a> b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/otherdir/<a href="http://vhdl.cl" rel="noreferrer" target="_blank">vhdl.cl</a><br>
new file mode 100644<br>
index 000000000000..65d4eeb09ec3<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/otherdir/<a href="http://vhdl.cl" rel="noreferrer" target="_blank">vhdl.cl</a><br>
@@ -0,0 +1 @@<br>
+const int OTHERDIRVHDLINT = 3;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://otherthing.cl" rel="noreferrer" target="_blank">otherthing.cl</a> b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://otherthing.cl" rel="noreferrer" target="_blank">otherthing.cl</a><br>
new file mode 100644<br>
index 000000000000..1e26850d5c7d<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://otherthing.cl" rel="noreferrer" target="_blank">otherthing.cl</a><br>
@@ -0,0 +1 @@<br>
+const int OTHERTHINGINT = 1;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/dir/<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a> b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/dir/<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a><br>
new file mode 100644<br>
index 000000000000..9d259fe3303d<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/dir/<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a><br>
@@ -0,0 +1 @@<br>
+const int SOMEDIRKERNELINT = 1;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://kernel.cl/foo.h" rel="noreferrer" target="_blank">kernel.cl/foo.h</a> b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://kernel.cl/foo.h" rel="noreferrer" target="_blank">kernel.cl/foo.h</a><br>
new file mode 100644<br>
index 000000000000..b8a781ea004b<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://kernel.cl/foo.h" rel="noreferrer" target="_blank">kernel.cl/foo.h</a><br>
@@ -0,0 +1 @@<br>
+int SOME_KERNEL_FOO_INT = 0;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://verilog.cl/foo.h" rel="noreferrer" target="_blank">verilog.cl/foo.h</a> b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://verilog.cl/foo.h" rel="noreferrer" target="_blank">verilog.cl/foo.h</a><br>
new file mode 100644<br>
index 000000000000..edcfb8b43e9c<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://verilog.cl/foo.h" rel="noreferrer" target="_blank">verilog.cl/foo.h</a><br>
@@ -0,0 +1 @@<br>
+int SOME_VERILOG_FOO_INT = 0;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://vhdl.cl/foo.h" rel="noreferrer" target="_blank">vhdl.cl/foo.h</a> b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://vhdl.cl/foo.h" rel="noreferrer" target="_blank">vhdl.cl/foo.h</a><br>
new file mode 100644<br>
index 000000000000..94e738edd4ff<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/some/<a href="http://vhdl.cl/foo.h" rel="noreferrer" target="_blank">vhdl.cl/foo.h</a><br>
@@ -0,0 +1 @@<br>
+int SOME_VHDL_FOO_INT = 0;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://some_kernel.cl" rel="noreferrer" target="_blank">some_kernel.cl</a> b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://some_kernel.cl" rel="noreferrer" target="_blank">some_kernel.cl</a><br>
new file mode 100644<br>
index 000000000000..76c4aa22103e<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://some_kernel.cl" rel="noreferrer" target="_blank">some_kernel.cl</a><br>
@@ -0,0 +1 @@<br>
+const int SOMEKERNELINT = 1;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/somedir/<a href="http://verilog.cl" rel="noreferrer" target="_blank">verilog.cl</a> b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/somedir/<a href="http://verilog.cl" rel="noreferrer" target="_blank">verilog.cl</a><br>
new file mode 100644<br>
index 000000000000..0566afdf11ca<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/somedir/<a href="http://verilog.cl" rel="noreferrer" target="_blank">verilog.cl</a><br>
@@ -0,0 +1 @@<br>
+const int SOMEDIRVERILOGINT = 2;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/thing.h b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/thing.h<br>
new file mode 100644<br>
index 000000000000..a5c40de98c8b<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/thing.h<br>
@@ -0,0 +1 @@<br>
+const int THINGINT = 1;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vERILOG.cl b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vERILOG.cl<br>
new file mode 100644<br>
index 000000000000..eb9a947dc967<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vERILOG.cl<br>
@@ -0,0 +1 @@<br>
+const int VERILOGINT2 = 2;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/verilog.h b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/verilog.h<br>
new file mode 100644<br>
index 000000000000..701e21a96dd6<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/verilog.h<br>
@@ -0,0 +1 @@<br>
+const int VERILOGINT3 = 2;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vhdl.CL b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vhdl.CL<br>
new file mode 100644<br>
index 000000000000..1585c7e86c7b<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vhdl.CL<br>
@@ -0,0 +1 @@<br>
+const int VHDLINT2 = 3;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vhdl.h b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vhdl.h<br>
new file mode 100644<br>
index 000000000000..59d2001977b2<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/vhdl.h<br>
@@ -0,0 +1 @@<br>
+const int VHDLINT3 = 3;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://vhdl_number_two.cl" rel="noreferrer" target="_blank">vhdl_number_two.cl</a> b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://vhdl_number_two.cl" rel="noreferrer" target="_blank">vhdl_number_two.cl</a><br>
new file mode 100644<br>
index 000000000000..c196407d4b5f<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/altera-kernel-name-restriction/<a href="http://vhdl_number_two.cl" rel="noreferrer" target="_blank">vhdl_number_two.cl</a><br>
@@ -0,0 +1 @@<br>
+const int VHDLNUMBERTWOINT = 3;<br>
<br>
diff  --git a/clang-tools-extra/test/clang-tidy/checkers/altera-kernel-name-restriction.cpp b/clang-tools-extra/test/clang-tidy/checkers/altera-kernel-name-restriction.cpp<br>
new file mode 100644<br>
index 000000000000..2dbfb1236523<br>
--- /dev/null<br>
+++ b/clang-tools-extra/test/clang-tidy/checkers/altera-kernel-name-restriction.cpp<br>
@@ -0,0 +1,50 @@<br>
+// RUN: %check_clang_tidy %s altera-kernel-name-restriction %t -- -- -I%S/Inputs/altera-kernel-name-restriction<br>
+<br>
+// These are the banned kernel filenames, and should trigger warnings<br>
+#include "<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>"<br>
+// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: including '<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>' may cause additional compilation errors due to the name of the kernel source file; consider renaming the included kernel source file [altera-kernel-name-restriction]<br>
+#include "Verilog.cl"<br>
+// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: including 'Verilog.cl' may cause additional compilation errors due to the name of the kernel source file; consider renaming the included kernel source file [altera-kernel-name-restriction]<br>
+#include "VHDL.cl"<br>
+// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: including 'VHDL.cl' may cause additional compilation errors due to the name of the kernel source file; consider renaming the included kernel source file [altera-kernel-name-restriction]<br>
+<br>
+// The warning should be triggered regardless of capitalization<br>
+#include "KERNEL.cl"<br>
+// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: including 'KERNEL.cl' may cause additional compilation errors due to the name of the kernel source file; consider renaming the included kernel source file [altera-kernel-name-restriction]<br>
+#include "vERILOG.cl"<br>
+// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: including 'vERILOG.cl' may cause additional compilation errors due to the name of the kernel source file; consider renaming the included kernel source file [altera-kernel-name-restriction]<br>
+#include "vhdl.CL"<br>
+// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: including 'vhdl.CL' may cause additional compilation errors due to the name of the kernel source file; consider renaming the included kernel source file [altera-kernel-name-restriction]<br>
+<br>
+// The warning should be triggered if the names are within a directory<br>
+#include "some/dir/<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>"<br>
+// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: including '<a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>' may cause additional compilation errors due to the name of the kernel source file; consider renaming the included kernel source file [altera-kernel-name-restriction]<br>
+#include "somedir/<a href="http://verilog.cl" rel="noreferrer" target="_blank">verilog.cl</a>"<br>
+// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: including '<a href="http://verilog.cl" rel="noreferrer" target="_blank">verilog.cl</a>' may cause additional compilation errors due to the name of the kernel source file; consider renaming the included kernel source file [altera-kernel-name-restriction]<br>
+#include "otherdir/<a href="http://vhdl.cl" rel="noreferrer" target="_blank">vhdl.cl</a>"<br>
+// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: including '<a href="http://vhdl.cl" rel="noreferrer" target="_blank">vhdl.cl</a>' may cause additional compilation errors due to the name of the kernel source file; consider renaming the included kernel source file [altera-kernel-name-restriction]<br>
+<br>
+// There are no FIX-ITs for the altera-kernel-name-restriction lint check<br>
+<br>
+// The following include directives shouldn't trigger the warning<br>
+#include "<a href="http://otherthing.cl" rel="noreferrer" target="_blank">otherthing.cl</a>"<br>
+#include "thing.h"<br>
+<br>
+// It doesn't make sense to have kernel.h, verilog.h, or vhdl.h as filenames<br>
+// without the corresponding .cl files, but the Altera Programming Guide doesn't<br>
+// explicitly forbid it.<br>
+#include "kernel.h"<br>
+#include "verilog.h"<br>
+#include "vhdl.h"<br>
+<br>
+// The files can still have the forbidden names in them, so long as they're not<br>
+// the entire file name, and are not the kernel source file name.<br>
+#include "<a href="http://some_kernel.cl" rel="noreferrer" target="_blank">some_kernel.cl</a>"<br>
+#include "other_Verilog.cl"<br>
+#include "<a href="http://vhdl_number_two.cl" rel="noreferrer" target="_blank">vhdl_number_two.cl</a>"<br>
+<br>
+// Naming a directory <a href="http://kernel.cl" rel="noreferrer" target="_blank">kernel.cl</a>, <a href="http://verilog.cl" rel="noreferrer" target="_blank">verilog.cl</a>, or <a href="http://vhdl.cl" rel="noreferrer" target="_blank">vhdl.cl</a> is not explicitly<br>
+// forbidden in the Altera Programming Guide either.<br>
+#include "some/<a href="http://kernel.cl/foo.h" rel="noreferrer" target="_blank">kernel.cl/foo.h</a>"<br>
+#include "some/<a href="http://verilog.cl/foo.h" rel="noreferrer" target="_blank">verilog.cl/foo.h</a>"<br>
+#include "some/<a href="http://vhdl.cl/foo.h" rel="noreferrer" target="_blank">vhdl.cl/foo.h</a>"<br>
<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>