[llvm-commits] [llvm] r61558 - in /llvm/trunk: include/llvm/Assembly/ lib/AsmParser/ lib/VMCore/ test/Assembler/ test/Feature/ test/Integer/ test/Linker/ test/Transforms/GlobalOpt/ test/Verifier/ tools/bugpoint/ tools/llvm-as/
Bill Wendling
isanbard at gmail.com
Sat Jan 3 17:28:48 PST 2009
On Jan 2, 2009, at 3:19 PM, Bill Wendling wrote:
> On Jan 1, 2009, at 11:01 PM, Chris Lattner wrote:
>> Author: lattner
>> Date: Fri Jan 2 01:01:27 2009
>> New Revision: 61558
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=61558&view=rev
>> Log:
>> Reimplement the old and horrible bison parser for .ll files with a
>> nice
>> and clean recursive descent parser.
>>
>> This change has a couple of ramifications:
>> 1. The parser code is about 400 lines shorter (in what we maintain,
>> not
>> including what is autogenerated).
>> 2. The code should be significantly faster than the old code
>> because we
>> don't have to work around bison's poor handling of datatypes with
>> ctors/dtors. This also makes the code much more resistant to memory
>> leaks.
>> 3. We now get caret diagnostics from the .ll parser, woo.
>> 4. The actual diagnostics emited from the parser are completely
>> different
>> so a bunch of testcases had to be updated.
>> 5. I now disallow "%ty = type opaque %ty = type i32". There was no
>> good
>> reason to support this, it was just an accident of the old
>> implementation. I have no reason to think that anyone is actually
>> using
>> this.
>> 6. The syntax for sticking a global variable has changed to make it
>> unambiguous. I don't think anyone is depending on this since only
>> clang
>> supports this and it is not solid yet, so I'm not worried about
>> anything
>> breaking.
>> 7. This gets rid of the last use of bison, and along with it
>> the .cvs files.
>> I'll prune this from the makefiles as a subsequent commit.
>>
>> There are a few minor cleanups that can be done after this commit
>> (suggestions
>> welcome!) but this passes dejagnu testing and is ready for its time
>> in the
>> limelight.
>>
> Hi Chris,
>
> I'm getting another strange error when LLVM self-hosts:
>
> /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/
> llvmgcc42~dst/Developer/usr/bin/llvm-g++-4.2 -I/Volumes/Sandbox/
> Buildbot/llvm/full-llvm/build/llvm.sh.build/include -I/Volumes/
> Sandbox/Buildbot/llvm/full-llvm/build/llvm.sh.build/tools/opt -I/
> Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/include -I/
> Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/tools/opt -
> D_DEBUG -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS
> -O3 -Woverloaded-virtual -pedantic -Wall -W -Wwrite-strings -Wno-
> long-long -Wunused -Wno-unused-parameter -fstrict-aliasing -Wstrict-
> aliasing -O3 -o /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/
> llvm.sh.build/Release/bin/opt /Volumes/Sandbox/Buildbot/llvm/full-
> llvm/build/llvm.sh.build/tools/opt/Release/AnalysisWrappers.o /
> Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.sh.build/tools/
> opt/Release/GraphPrinters.o /Volumes/Sandbox/Buildbot/llvm/full-llvm/
> build/llvm.sh.build/tools/opt/Release/PrintSCC.o /Volumes/Sandbox/
> Buildbot/llvm/full-llvm/build/llvm.sh.build/tools/opt/Release/opt.o
> -L/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.sh.build/
> Release/lib -lLLVMipo -lLLVMInstrumentation -lLLVMScalarOpts -
> lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -
> lLLVMBitWriter -lLLVMBitReader -lLLVMCore -lLLVMSupport -lLLVMSystem
> -lpthread -lm
> Undefined symbols:
> "llvm::PATypeHolder::get() const", referenced from:
> llvm::ELFWriter::EmitGlobal(llvm::GlobalVariable*) in
> libLLVMCodeGen.a(ELFWriter.o)
> ld: symbol(s) not found
> collect2: ld returned 1 exit status
> make[2]: *** [/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/
> llvm.sh.build/Release/bin/llc] Error 1
> make[1]: *** [llc/.makeall] Error 2
> make[1]: *** Waiting for unfinished jobs....
>
>
> It's probably some weird Makefile issue that's not resolved. This
> check in is my best guess as to what's causing it. Here's the full
> log file:
>
> http://bwendling.apple.com:8020/builders/full-llvm-OSX/builds/380/steps/shell/logs/stdio
>
> Do you have an idea of what's happening?
>
Some more information: When GCC builds LLVM first, there are many
definitions of llvm::PATypeHolder::get() hanging around:
$ nm -Am *.a | c++filt | grep PATypeHolder::get
libLLVMAnalysis.a:AliasAnalysis.o: 000021d0 (__TEXT,__textcoal_nt)
weak external llvm::PATypeHolder::get() const
...
libLLVMCodeGen.a:ELFWriter.o: (undefined [lazy bound])
external llvm::PATypeHolder::get() const
...
But when LLVM compiles itself, there are no definitions of
llvm::PATypeHolder::get():
$ nm -Am *.a | c++filt | grep PATypeHolder::get
libLLVMCodeGen.a:ELFWriter.o: (undefined) external
llvm::PATypeHolder::get() const
llvm::PATypeHolder::get() is defined like so in Type.h:
inline Type* PATypeHolder::get() const {
const Type *NewTy = Ty->getForwardedType();
if (!NewTy) return const_cast<Type*>(Ty);
return *const_cast<PATypeHolder*>(this) = NewTy;
}
Could it be something with the inliner going awry? Before the changes
in the parser, we got this:
$ nm -Am *.a | c++filt | grep PATypeHolder::get
libLLVMAsmParser.a:llvmAsmParser.o: 0001b1a0 (__TEXT,__textcoal_nt)
weak external llvm::PATypeHolder::get() const
libLLVMCodeGen.a:ELFWriter.o: (undefined) external
llvm::PATypeHolder::get() const
So the libLLVMAsmParser.a supplied the missing symbol -- probably
wrongly.
Thoughts? :-)
-bw
More information about the llvm-commits
mailing list