Implement initial support for function attributes, including parser, printer,
resolver support.

Still TODO are verifier support (to make sure you don't use an attribute for a
function in another module) and the TODO in ModuleParser::finalizeModule that I
will handle in the next patch.

PiperOrigin-RevId: 209361648
diff --git a/lib/IR/Module.cpp b/lib/IR/Module.cpp
index 5a33d26..36b892a 100644
--- a/lib/IR/Module.cpp
+++ b/lib/IR/Module.cpp
@@ -21,13 +21,13 @@
 Module::Module(MLIRContext *context) : context(context) {}
 
 /// Look up a function with the specified name, returning null if no such
-/// name exists.
+/// name exists.  Function names never include the @ on them.
 Function *Module::getNamedFunction(StringRef name) {
   return getNamedFunction(Identifier::get(name, context));
 }
 
 /// Look up a function with the specified name, returning null if no such
-/// name exists.
+/// name exists.  Function names never include the @ on them.
 Function *Module::getNamedFunction(Identifier name) {
   auto it = symbolTable.find(name);
   return it != symbolTable.end() ? it->second : nullptr;