<div dir="ltr">I have a patch I'd like to submit tomorrow which converts all of the global command option tables from C-style arrays to llvm ArrayRefs.<div><br></div><div>Actually they are still declared internally in each translation unit as C-style arrays, but the Option classes are updated so that they return ArrayRefs instead of raw pointers.  Previously there were two strategies:</div><div><br></div><div>1) Sometimes we'd return a const Option* and have a method on the class called GetNumDefinitions() so you could treat the pointer as an array.</div><div><br></div><div>2) Other times we'd return a const Option* and expect the caller to iterate until it reached a sentinel entry.</div><div><br></div><div>With the new approach, the two methods are merged and now the GetDefinitions() method only returns an ArrayRef<OptionDefinition>.</div><div><br></div><div>Since this carries with it its length, neither the GetNumDefinitions() method nor the sentinel entry are needed any more.  </div><div><br></div><div>Most of the old code compiled without modification, because ArrayRef can be treated with a similar syntax as arrays, except you'll get a nice assert if you index out of bounds.</div><div><br></div><div>An added bonus is that you can now iterate over them with ranged-based for syntax.</div><div><br></div><div>I can put it up for review if anyone would like, but as it is extremely mechanical there's not really much to see.</div></div>