add warn_once which will print any given warning message
authorNathan Binkert <binkertn@umich.edu>
Thu, 16 Nov 2006 21:18:21 +0000 (13:18 -0800)
committerNathan Binkert <binkertn@umich.edu>
Thu, 16 Nov 2006 21:18:21 +0000 (13:18 -0800)
only once.

--HG--
extra : convert_revision : b64bb495c1bd0c4beb3db6ca28fad5af4d05ef8e

src/base/misc.hh

index 87faf20e6b05b9abe6dc0198b82201cd6290b5c4..1c5720ce198cc781a37dd5c80e804021d66f078c 100644 (file)
@@ -76,6 +76,19 @@ void __warn(const std::string&, cp::ArgList &, const char*, const char*, int);
 #define warn(args...) \
     __warn__(args, cp::ArgListNull())
 
+// Only print the warning message the first time it is seen.  This
+// doesn't check the warning string itself, it just only lets one
+// warning come from the statement. So, even if the arguments change
+// and that would have resulted in a different warning message,
+// subsequent messages would still be supressed.
+#define warn_once(args...) do {                     \
+        static bool once = false;                   \
+        if (!once) {                                \
+            __warn__(args, cp::ArgListNull());      \
+            once = true;                            \
+        }                                           \
+    } while (0)
+
 //
 // assert() that prints out the current cycle
 //