Split ScarinessScore between its "storage" (POD), and an initializing object.
authorFilipe Cabecinhas <me@filcab.net>
Tue, 30 Aug 2016 17:08:47 +0000 (17:08 +0000)
committerFilipe Cabecinhas <me@filcab.net>
Tue, 30 Aug 2016 17:08:47 +0000 (17:08 +0000)
Summary:
This is needed so we can use it for D23672 on VS2013, since this VS
version doesn't support unrestricted unions, and doesn't allow us to
uses an object without a trivial default constructor inside a union.

Reviewers: kcc, samsonov

Subscribers: kubabrecka, llvm-commits

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

llvm-svn: 280110

compiler-rt/lib/asan/asan_scariness_score.h

index 492eb56..7f15714 100644 (file)
 #include "sanitizer_common/sanitizer_libc.h"
 
 namespace __asan {
-class ScarinessScore {
- public:
-  ScarinessScore() {
+struct ScarinessScoreBase {
+  void Clear() {
     descr[0] = 0;
+    score = 0;
   }
   void Scare(int add_to_score, const char *reason) {
     if (descr[0])
@@ -52,16 +52,23 @@ class ScarinessScore {
       Printf("SCARINESS: %d (%s)\n", score, descr);
   }
   static void PrintSimple(int score, const char *descr) {
-    ScarinessScore SS;
-    SS.Scare(score, descr);
-    SS.Print();
+    ScarinessScoreBase SSB;
+    SSB.Clear();
+    SSB.Scare(score, descr);
+    SSB.Print();
   }
 
  private:
-  int score = 0;
+  int score;
   char descr[1024];
 };
 
+struct ScarinessScore : ScarinessScoreBase {
+  ScarinessScore() {
+    Clear();
+  }
+};
+
 }  // namespace __asan
 
 #endif  // ASAN_SCARINESS_SCORE_H