[cfe-dev] problem with clang application
Nobin Mathew
nobin.mathew at gmail.com
Sat Jun 19 07:25:52 PDT 2010
Is there any problem in this code fragment
scope.sm.createMainFileID(File, SourceLocation());
scope.pp->EnterMainSourceFile();
IdentifierTable identitab(scope.lang);
MinimalAction action(*(scope.pp));
Parser parse(*(scope.pp), action);
parse.ParseTranslationUnit();
identitab.PrintStats();
I am not able to find the problem in the library, any help?
-Nobin
On Sat, Jun 19, 2010 at 3:27 PM, Nobin Mathew <nobin.mathew at gmail.com> wrote:
> Hi,
>
> I am building an application using clang libraries, I running to a
> problem, it will be very helpful if somebody can give some directions.
>
> #./a.out /home/nmathew/Desktop/algorithms/array.cpp gives
>
> In file included from /home/nmathew/Desktop/algorithms/array.cpp:1:
> In file included from /usr/include/c++/4.4.3/iostream:39:
> In file included from /usr/include/c++/4.4.3/ostream:39:
> In file included from /usr/include/c++/4.4.3/ios:38:
> In file included from /usr/include/c++/4.4.3/iosfwd:40:
> /usr/include/c++/4.4.3/bits/stringfwd.h:49:48: error: unknown type
> name 'char_traits'
> a.out: TextDiagnosticPrinter.cpp:293: void
> clang::TextDiagnosticPrinter::EmitCaretDiagnostic(clang::SourceLocation,
> clang::SourceRange*, unsigned int, const clang::SourceManager&, const
> clang::FixItHint*, unsigned int, unsigned int, unsigned int, unsigned
> int, unsigned int): Assertion `LangOpts && "Unexpected diagnostic
> outside source file processing"' failed.
> Stack dump:
> 0. /usr/include/c++/4.4.3/bits/stringfwd.h:49:48: current parser token
> 'char_traits'
>
>
>
>
> My Include search directories are below.
>
> #include "..." search starts here:
> #include <...> search starts here:
> /usr/include/linux
> /usr/lib/gcc/i686-redhat-linux/4.4.3/include
> /usr/include/c++/4.4.3
> /usr/include/c++/4.4.3/backward
> /usr/include/c++/4.4.3/i686-redhat-linux
> /usr/local/include
> /usr/include
> End of search list.
>
> and char_traits.h is in /usr/include/c++/4.4.3/bits/, I am using
> Fedora 12 32 bit system.
>
>
>
> my files are
>
> #cat tut01_pp.cpp
>
>
> #include "PPContext.h"
>
> int main(int argc, char *argv[])
> {
> if (argc != 2)
> {
> cerr << "No File input " << endl;
> return 0;
> }
> PPContext scope;
> scope.headers.PrintStats();
> const FileEntry *File = scope.fm.getFile(argv[1]);
> if(!File)
> {
> cerr << "File Open Failed\t" << argv[1] << endl;
> return 0;
> }
> scope.sm.createMainFileID(File, SourceLocation());
> scope.pp->EnterMainSourceFile();
> IdentifierTable identitab(scope.lang);
> MinimalAction action(*(scope.pp));
> Parser parse(*(scope.pp), action);
> parse.ParseTranslationUnit();
> identitab.PrintStats();
>
> return 0;
> }
>
>
> #cat PPContext.h
>
>
> #ifndef PP_CONTEXT
> #define PP_CONTEXT
>
> #include <iostream>
> #include <string>
> using namespace std;
>
> #include <llvm/Support/raw_ostream.h>
>
> #include <clang/Basic/Diagnostic.h>
> #include <clang/Basic/TargetInfo.h>
> #include <clang/Basic/TargetOptions.h>
> #include <clang/Basic/FileManager.h>
> #include <clang/Basic/SourceManager.h>
> #include <clang/Lex/Preprocessor.h>
> #include <clang/Lex/HeaderSearch.h>
> #include <clang/Frontend/Utils.h>
> #include <clang/Frontend/TextDiagnosticPrinter.h>
> #include <clang/Frontend/DiagnosticOptions.h>
> #include <clang/Frontend/HeaderSearchOptions.h>
> #include <clang/Parse/Action.h>
> #include <clang/Parse/Parser.h>
> #include "llvm/System/Host.h"
> using namespace clang;
> using namespace llvm;
>
> struct PPContext {
> PPContext():tdp(ost, options), diag(&tdp), sm(diag), headers(fm)
> {
>
> TargetOptions target_options;
> target_options.Triple = sys::getHostTriple();
> target_options.CXXABI = "itanium";
> target = TargetInfo::CreateTargetInfo(diag, target_options);
> lang.CPlusPlus = 1;
> pp = new Preprocessor(diag, lang, *target, sm, headers);
> headeropts.EnvIncPath = "/usr/include/linux";
> headeropts.CXXEnvIncPath =
> "/usr/lib/gcc/i686-redhat-linux/4.4.3/include/";
> headeropts.Verbose = 1;
> ApplyHeaderSearchOptions(headers, headeropts, lang,
> llvm::Triple(target_options.Triple));
> };
> ~PPContext()
> {
> delete pp;
> delete target;
> };
>
> llvm::raw_stdout_ostream ost;
> const DiagnosticOptions options;
> TextDiagnosticPrinter tdp;
> Diagnostic diag;
> LangOptions lang;
> SourceManager sm;
> FileManager fm;
> HeaderSearch headers;
> TargetInfo *target;
> Preprocessor *pp;
> HeaderSearchOptions headeropts;
> };
> #endif //#ifndef PP_CONTEXT
>
>
> #cat array.cpp
>
> #include <iostream>
> #include "array.hpp"
>
> using namespace std;
>
>
>
> template <class gen>
> ARRAY<gen>::ARRAY()
> {
> size = MAX;
> ptr = (gen (*)[MAX])new gen[size];
> }
>
> template <class gen>
> ARRAY<gen>::ARRAY(int array_size)
> {
> size = array_size;
> ptr = (gen (*)[])new gen[size];
> }
>
> template <class gen>
> ARRAY<gen>::~ARRAY()
> {
> delete (gen (*)[MAX])ptr;
> }
>
> template <class gen>
> int ARRAY<gen>::getsize()
> {
> return size;
> }
>
> template <class gen>
> ARRAY<gen>::ARRAY(const ARRAY &orig)
> {
> ptr = (gen (*)[MAX])new gen[orig.size];
> memcpy(ptr, orig.ptr, sizeof(gen)*orig.size);
> size = orig.size;
> }
>
> template <class gen>
> gen& ARRAY<gen>::operator [](unsigned int index)
> {
> return *ptr[index];
> }
>
> int main(void)
> {
> ARRAY <int> intarray;
> intarray[8] = 16;
> return 0;
> }
>
>
> thanks
> Nobin
>
More information about the cfe-dev
mailing list