Enable deprecated-copy-dtor warning.

In C++11 a user declared destructor still requires the compiler to
implicitly default the copy constructor and copy assignment operator,
but this is deprecated. Note that a user declared destructor suppresses
the move constructor and move assignment operator; a user declared
destructor exists if any '~Foo' method declaration appears inside
'class Foo' (even if defaulted); if the copy and move operations are the
same then copy operations that take 'const Foo&' will do fine double
duty as move operations.

Clang seems to have an issue with this warning, in that it does not
appear to distinguish between compiler defaulted and user defaulted
destructors. As a result, it does not always warn when it should.
There may yet be places in the code where a move operation is desired
but may be suppressed because the implicitly defaulted  moves are not
declared because a destructor has been declared.

This wraps dawn and shaderc configs in 'third_party' so that their
headers will be included through '-isystem' in order to avoid the
warnings generated by including their headers.

Change-Id: I681524cd890d86305aa99b6b765a52113b4dfa4b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/280406
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
diff --git a/src/gpu/GrClip.h b/src/gpu/GrClip.h
index cc73c64..cbe0eb0 100644
--- a/src/gpu/GrClip.h
+++ b/src/gpu/GrClip.h
@@ -21,6 +21,11 @@
  */
 class GrClip {
 public:
+    GrClip() = default;
+    GrClip(const GrClip&) = default;
+    GrClip& operator=(const GrClip&) = default;
+    virtual ~GrClip() = default;
+
     virtual bool quickContains(const SkRect&) const = 0;
     virtual bool quickContains(const SkRRect& rrect) const {
         return this->quickContains(rrect.getBounds());
@@ -38,8 +43,6 @@
     virtual bool apply(GrRecordingContext*, GrRenderTargetContext*, bool useHWAA,
                        bool hasUserStencilSettings, GrAppliedClip*, SkRect* bounds) const = 0;
 
-    virtual ~GrClip() {}
-
     /**
      * This method quickly and conservatively determines whether the entire clip is equivalent to
      * intersection with a rrect. This will only return true if the rrect does not fully contain
diff --git a/src/gpu/GrDriverBugWorkarounds.cpp b/src/gpu/GrDriverBugWorkarounds.cpp
index e91623c..6902453 100644
--- a/src/gpu/GrDriverBugWorkarounds.cpp
+++ b/src/gpu/GrDriverBugWorkarounds.cpp
@@ -10,6 +10,9 @@
 #include "include/core/SkTypes.h"
 
 GrDriverBugWorkarounds::GrDriverBugWorkarounds() = default;
+GrDriverBugWorkarounds::GrDriverBugWorkarounds(const GrDriverBugWorkarounds&) = default;
+GrDriverBugWorkarounds& GrDriverBugWorkarounds::operator=(const GrDriverBugWorkarounds&) = default;
+GrDriverBugWorkarounds::~GrDriverBugWorkarounds() = default;
 
 GrDriverBugWorkarounds::GrDriverBugWorkarounds(
         const std::vector<int>& enabled_driver_bug_workarounds) {
@@ -37,5 +40,3 @@
     GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)
 #undef GPU_OP
 }
-
-GrDriverBugWorkarounds::~GrDriverBugWorkarounds() = default;
diff --git a/src/sksl/ir/SkSLIRNode.h b/src/sksl/ir/SkSLIRNode.h
index 52e5d9c..3c6616a 100644
--- a/src/sksl/ir/SkSLIRNode.h
+++ b/src/sksl/ir/SkSLIRNode.h
@@ -18,10 +18,10 @@
  * version of the program (all types determined, everything validated), ready for code generation.
  */
 struct IRNode {
-    IRNode(int offset)
-    : fOffset(offset) {}
-
-    virtual ~IRNode() {}
+    IRNode(int offset) : fOffset(offset) {}
+    IRNode(const IRNode&) = default;
+    IRNode& operator=(const IRNode&) = default;
+    virtual ~IRNode() = default;
 
 #ifdef SK_DEBUG
     virtual String description() const = 0;
diff --git a/src/sksl/ir/SkSLSymbol.h b/src/sksl/ir/SkSLSymbol.h
index 4ee4d3d..c6f6b7d 100644
--- a/src/sksl/ir/SkSLSymbol.h
+++ b/src/sksl/ir/SkSLSymbol.h
@@ -26,11 +26,7 @@
     };
 
     Symbol(int offset, Kind kind, StringFragment name)
-    : INHERITED(offset)
-    , fKind(kind)
-    , fName(name) {}
-
-    virtual ~Symbol() {}
+        : INHERITED(offset), fKind(kind), fName(name) {}
 
     Kind fKind;
     StringFragment fName;