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/include/mlir/IR/Module.h b/include/mlir/IR/Module.h
index f6c543b..38c4ef8 100644
--- a/include/mlir/IR/Module.h
+++ b/include/mlir/IR/Module.h
@@ -60,14 +60,14 @@
   // Interfaces for working with the symbol table.
 
   /// 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 *getNamedFunction(StringRef name);
   const Function *getNamedFunction(StringRef name) const {
     return const_cast<Module *>(this)->getNamedFunction(name);
   }
 
   /// 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 *getNamedFunction(Identifier name);
 
   const Function *getNamedFunction(Identifier name) const {