> +++ llvm/lib/VMCore/AsmWriter.cpp Sat Apr 28 08:44:59 2007 > @@ -926,7 +926,7 @@ > assert(0 && "Invalid alias linkage"); > } > > - const GlobalValue *Aliasee = GA->getAliasee(); > + const Constant *Aliasee = dyn_cast_or_null<Constant>(GA- > >getAliasee()); > assert(Aliasee && "Aliasee cannot be null");
You can drop the dyn_cast_or_null > > if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(Aliasee)) { > @@ -940,9 +940,15 @@ > Out << getLLVMName(F->getName(), GlobalPrefix); > else > Out << "@\"\""; > - } else > - assert(0 && "Unsupported aliasee"); > - > + } else { > + const ConstantExpr *CE = 0; > + if ((CE = dyn_cast<ConstantExpr>(Aliasee)) && > + (CE->getOpcode() == Instruction::BitCast)) { > + writeOperand(CE, false); > + } else > + assert(0 && "Unsupported aliasee"); > + } This can use the new getAliaseeGlobal() method. > bool GlobalAlias::isDeclaration() const { > - return (Aliasee && Aliasee->isDeclaration()); > + const GlobalValue* AV = dyn_cast_or_null<const GlobalValue> > (getAliasee()); > + return (AV && AV->isDeclaration()); > } What does it mean for an alias to be a declaration? I'd be fine with them always returning true or false. What code calls GlobalValue::isDeclaration? > +void GlobalAlias::setAliasee(Constant *Aliasee) > { > - // FIXME: Some checks? > - Aliasee = GV; > + if (Aliasee) { > + assert(Aliasee->getType() == getType() && > + "Alias and aliasee types should match!"); > + setOperand(0, Aliasee); > + } > } With this code, setAliasee(0) is a noop - that is a bug. -Chris _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits