I was considering that. Stylistically do we want virtual and override or just override? I borrowed code from Chromium for a plugin to detect these cases so I can pretty easily do either.<br><br><div class="gmail_quote">On Sun, Sep 16, 2012 at 12:54 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> /llvm/trunk/include/llvm/TableGen/Record.h<br>
MIME-Version: 1.0<br>
Content-Type: text/plain; charset="utf-8"<br>
Content-Transfer-Encoding: 7bit<br>
<br>
Might it be more useful to add a C++11 compatibility macro<br>
for 'override'?<br>
From: Craig Topper<br>
Sent: 9/16/2012 12:42 AM<br>
To: <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
Subject: [llvm-commits] [llvm] r163996<br>
- /llvm/trunk/include/llvm/TableGen/Record.h<br>
Author: ctopper<br>
Date: Sun Sep 16 02:39:55 2012<br>
New Revision: 163996<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=163996&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=163996&view=rev</a><br>
Log:<br>
Add explicit virtual keywords for methods that override base class.<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/TableGen/Record.h<br>
<br>
Modified: llvm/trunk/include/llvm/TableGen/Record.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TableGen/Record.h?rev=163996&r1=163995&r2=163996&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TableGen/Record.h?rev=163996&r1=163995&r2=163996&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/include/llvm/TableGen/Record.h (original)<br>
+++ llvm/trunk/include/llvm/TableGen/Record.h Sun Sep 16 02:39:55 2012<br>
@@ -152,9 +152,9 @@<br>
   virtual Init *convertValue(   VarInit *VI) { return RecTy::convertValue(VI);}<br>
   virtual Init *convertValue( FieldInit *FI) { return RecTy::convertValue(FI);}<br>
<br>
-  std::string getAsString() const { return "bit"; }<br>
+  virtual std::string getAsString() const { return "bit"; }<br>
<br>
-  bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
+  virtual bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
     return RHS->baseClassOf(this);<br>
   }<br>
   virtual bool baseClassOf(const BitRecTy    *RHS) const { return true; }<br>
@@ -195,9 +195,9 @@<br>
   virtual Init *convertValue(   VarInit *VI) { return RecTy::convertValue(VI);}<br>
   virtual Init *convertValue( FieldInit *FI) { return RecTy::convertValue(FI);}<br>
<br>
-  std::string getAsString() const;<br>
+  virtual std::string getAsString() const;<br>
<br>
-  bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
+  virtual bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
     return RHS->baseClassOf(this);<br>
   }<br>
   virtual bool baseClassOf(const BitRecTy    *RHS) const { return Size == 1; }<br>
@@ -237,9 +237,9 @@<br>
   virtual Init *convertValue(   VarInit *VI) { return RecTy::convertValue(VI);}<br>
   virtual Init *convertValue( FieldInit *FI) { return RecTy::convertValue(FI);}<br>
<br>
-  std::string getAsString() const { return "int"; }<br>
+  virtual std::string getAsString() const { return "int"; }<br>
<br>
-  bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
+  virtual bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
     return RHS->baseClassOf(this);<br>
   }<br>
<br>
@@ -278,9 +278,9 @@<br>
   virtual Init *convertValue(   VarInit *VI) { return RecTy::convertValue(VI);}<br>
   virtual Init *convertValue( FieldInit *FI) { return RecTy::convertValue(FI);}<br>
<br>
-  std::string getAsString() const { return "string"; }<br>
+  virtual std::string getAsString() const { return "string"; }<br>
<br>
-  bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
+  virtual bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
     return RHS->baseClassOf(this);<br>
   }<br>
<br>
@@ -322,9 +322,9 @@<br>
   virtual Init *convertValue(   VarInit *VI) { return RecTy::convertValue(VI);}<br>
   virtual Init *convertValue( FieldInit *FI) { return RecTy::convertValue(FI);}<br>
<br>
-  std::string getAsString() const;<br>
+  virtual std::string getAsString() const;<br>
<br>
-  bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
+  virtual bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
     return RHS->baseClassOf(this);<br>
   }<br>
<br>
@@ -363,9 +363,9 @@<br>
   virtual Init *convertValue(   VarInit *VI) { return RecTy::convertValue(VI);}<br>
   virtual Init *convertValue( FieldInit *FI) { return RecTy::convertValue(FI);}<br>
<br>
-  std::string getAsString() const { return "dag"; }<br>
+  virtual std::string getAsString() const { return "dag"; }<br>
<br>
-  bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
+  virtual bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
     return RHS->baseClassOf(this);<br>
   }<br>
<br>
@@ -407,9 +407,9 @@<br>
   virtual Init *convertValue(   VarInit *VI) { return RecTy::convertValue(VI);}<br>
   virtual Init *convertValue( FieldInit *FI) { return RecTy::convertValue(FI);}<br>
<br>
-  std::string getAsString() const;<br>
+  virtual std::string getAsString() const;<br>
<br>
-  bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
+  virtual bool typeIsConvertibleTo(const RecTy *RHS) const {<br>
     return RHS->baseClassOf(this);<br>
   }<br>
   virtual bool baseClassOf(const BitRecTy    *RHS) const { return false; }<br>
@@ -758,7 +758,8 @@<br>
<br>
   Record *getElementAsRecord(unsigned i) const;<br>
<br>
-  Init *convertInitListSlice(const std::vector<unsigned> &Elements) const;<br>
+  virtual Init *<br>
+    convertInitListSlice(const std::vector<unsigned> &Elements) const;<br>
<br>
   virtual Init *convertInitializerTo(RecTy *Ty) const {<br>
     return Ty->convertValue(const_cast<ListInit *>(this));<br>
@@ -849,8 +850,8 @@<br>
     return UnOpInit::get(getOpcode(), *Operands.begin(), getType());<br>
   }<br>
<br>
-  int getNumOperands() const { return 1; }<br>
-  Init *getOperand(int i) const {<br>
+  virtual int getNumOperands() const { return 1; }<br>
+  virtual Init *getOperand(int i) const {<br>
     assert(i == 0 && "Invalid operand id for unary operator");<br>
     return getOperand();<br>
   }<br>
@@ -860,7 +861,7 @@<br>
<br>
   // Fold - If possible, fold this to a simpler init.  Return this if not<br>
   // possible to fold.<br>
-  Init *Fold(Record *CurRec, MultiClass *CurMultiClass) const;<br>
+  virtual Init *Fold(Record *CurRec, MultiClass *CurMultiClass) const;<br>
<br>
   virtual Init *resolveReferences(Record &R, const RecordVal *RV) const;<br>
<br>
@@ -893,8 +894,8 @@<br>
     return BinOpInit::get(getOpcode(), Operands[0], Operands[1], getType());<br>
   }<br>
<br>
-  int getNumOperands() const { return 2; }<br>
-  Init *getOperand(int i) const {<br>
+  virtual int getNumOperands() const { return 2; }<br>
+  virtual Init *getOperand(int i) const {<br>
     assert((i == 0 || i == 1) && "Invalid operand id for binary operator");<br>
     if (i == 0) {<br>
       return getLHS();<br>
@@ -909,7 +910,7 @@<br>
<br>
   // Fold - If possible, fold this to a simpler init.  Return this if not<br>
   // possible to fold.<br>
-  Init *Fold(Record *CurRec, MultiClass *CurMultiClass) const;<br>
+  virtual Init *Fold(Record *CurRec, MultiClass *CurMultiClass) const;<br>
<br>
   virtual Init *resolveReferences(Record &R, const RecordVal *RV) const;<br>
<br>
@@ -945,8 +946,8 @@<br>
                            getType());<br>
   }<br>
<br>
-  int getNumOperands() const { return 3; }<br>
-  Init *getOperand(int i) const {<br>
+  virtual int getNumOperands() const { return 3; }<br>
+  virtual Init *getOperand(int i) const {<br>
     assert((i == 0 || i == 1 || i == 2) &&<br>
            "Invalid operand id for ternary operator");<br>
     if (i == 0) {<br>
@@ -965,7 +966,7 @@<br>
<br>
   // Fold - If possible, fold this to a simpler init.  Return this if not<br>
   // possible to fold.<br>
-  Init *Fold(Record *CurRec, MultiClass *CurMultiClass) const;<br>
+  virtual Init *Fold(Record *CurRec, MultiClass *CurMultiClass) const;<br>
<br>
   virtual bool isComplete() const { return false; }<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>~Craig<br>