Instead of adding stdlib we just prototype malloc correctly.
[oota-llvm.git] / tools / llvm-as / as.cpp
index 594feb8dd8366d36eb708079c48fe3a220286765..c9bd3b4e08c05a6d7bc5ebb71b66a1fdb40d5216 100644 (file)
@@ -6,40 +6,58 @@
 //   as [options]      - Read LLVM assembly from stdin, write bytecode to stdout
 //   as [options] x.ll - Read LLVM assembly from the x.ll file, write bytecode
 //                       to the x.bc file.
-//
+// 
 //===------------------------------------------------------------------------===
 
 #include "llvm/Module.h"
 #include "llvm/Assembly/Parser.h"
 #include "llvm/Bytecode/Writer.h"
+#include "llvm/Analysis/Verifier.h"
 #include "Support/CommandLine.h"
 #include "Support/Signals.h"
 #include <fstream>
 #include <memory>
+using std::cerr;
+using std::string;
+
+static cl::opt<string> 
+InputFilename(cl::Positional, cl::desc("<input .llvm file>"), cl::init("-"));
+
+static cl::opt<string>
+OutputFilename("o", cl::desc("Override output filename"),
+               cl::value_desc("filename"));
+
+static cl::opt<bool>
+Force("f", cl::desc("Overwrite output files"));
 
-cl::String InputFilename ("", "Parse <arg> file, compile to bytecode", 0, "-");
-cl::String OutputFilename("o", "Override output filename", cl::NoFlags, "");
-cl::Flag   Force         ("f", "Overwrite output files", cl::NoFlags, false);
-cl::Flag   DumpAsm       ("d", "Print assembly as parsed", cl::Hidden, false);
+static cl::opt<bool>
+DumpAsm("d", cl::desc("Print assembly as parsed"), cl::Hidden);
 
 int main(int argc, char **argv) {
   cl::ParseCommandLineOptions(argc, argv, " llvm .ll -> .bc assembler\n");
 
-  ostream *Out = 0;
+  std::ostream *Out = 0;
   try {
     // Parse the file now...
     std::auto_ptr<Module> M(ParseAssemblyFile(InputFilename));
     if (M.get() == 0) {
-      cerr << "assembly didn't read correctly.\n";
+      cerr << argv[0] << ": assembly didn't read correctly.\n";
       return 1;
     }
+
+    if (verifyModule(*M.get())) {
+      cerr << argv[0] << ": assembly parsed, but does not verify as correct!\n";
+      return 1;
+    }
+
   
     if (DumpAsm) cerr << "Here's the assembly:\n" << M.get();
 
     if (OutputFilename != "") {   // Specified an output filename?
       if (!Force && std::ifstream(OutputFilename.c_str())) {
         // If force is not specified, make sure not to overwrite a file!
-        cerr << "Error opening '" << OutputFilename << "': File exists!\n"
+        cerr << argv[0] << ": error opening '" << OutputFilename
+             << "': file exists!\n"
              << "Use -f command line argument to force output\n";
         return 1;
       }
@@ -47,7 +65,7 @@ int main(int argc, char **argv) {
     } else {
       if (InputFilename == "-") {
        OutputFilename = "-";
-       Out = &cout;
+       Out = &std::cout;
       } else {
        std::string IFN = InputFilename;
        int Len = IFN.length();
@@ -61,7 +79,8 @@ int main(int argc, char **argv) {
 
         if (!Force && std::ifstream(OutputFilename.c_str())) {
           // If force is not specified, make sure not to overwrite a file!
-          cerr << "Error opening '" << OutputFilename << "': File exists!\n"
+          cerr << argv[0] << ": error opening '" << OutputFilename
+               << "': file exists!\n"
                << "Use -f command line argument to force output\n";
           return 1;
         }
@@ -74,17 +93,17 @@ int main(int argc, char **argv) {
     }
   
     if (!Out->good()) {
-      cerr << "Error opening " << OutputFilename << "!\n";
+      cerr << argv[0] << ": error opening " << OutputFilename << "!\n";
       return 1;
     }
    
     WriteBytecodeToFile(M.get(), *Out);
   } catch (const ParseException &E) {
-    cerr << E.getMessage() << endl;
+    cerr << argv[0] << ": " << E.getMessage() << "\n";
     return 1;
   }
 
-  if (Out != &cout) delete Out;
+  if (Out != &std::cout) delete Out;
   return 0;
 }