[flang] Fix compilation warning in check-directive-structure.h
authorTim Keith <tkeith@nvidia.com>
Thu, 6 Aug 2020 01:03:40 +0000 (18:03 -0700)
committerTim Keith <tkeith@nvidia.com>
Thu, 6 Aug 2020 01:03:41 +0000 (18:03 -0700)
Clang 9 gets the following warning after revision `D85104`.
```
../../flang/lib/Semantics/check-directive-structure.h:36:7: error: 'Fortran::semantics::DirectiveStructureChecker<llvm::omp::Directive, llvm::omp::Clause, Fortran::parser::OmpClause, 77>' has virtual functions but non-virtual destructor [-Werror,-Wnon-virtual-dtor]
```

The fix is the make the destructor virtual. Neither it nor the
constructor need to be public, so make them protected.

Differential Revision: https://reviews.llvm.org/D85383

flang/lib/Semantics/check-directive-structure.h

index a5de056..6755e47 100644 (file)
@@ -34,13 +34,13 @@ template <typename C, std::size_t ClauseEnumSize> struct DirectiveClauses {
 // typename PC is the parser class defined in parse-tree.h for the clauses.
 template <typename D, typename C, typename PC, std::size_t ClauseEnumSize>
 class DirectiveStructureChecker : public virtual BaseChecker {
-public:
+protected:
   DirectiveStructureChecker(SemanticsContext &context,
       std::unordered_map<D, DirectiveClauses<C, ClauseEnumSize>>
           directiveClausesMap)
       : context_{context}, directiveClausesMap_(directiveClausesMap) {}
+  virtual ~DirectiveStructureChecker() {}
 
-protected:
   struct DirectiveContext {
     DirectiveContext(parser::CharBlock source, D d)
         : directiveSource{source}, directive{d} {}