From: Justin Holewinski Date: Thu, 17 Jul 2014 11:23:29 +0000 (+0000) Subject: [TABLEGEN] Do not crash on intrinsics with names longer than 40 characters X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=df50f4150b2486e2e1b5eff752ccd3274c3a7f0a;p=oota-llvm.git [TABLEGEN] Do not crash on intrinsics with names longer than 40 characters Differential Revision: http://reviews.llvm.org/D4537 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213253 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/TableGen/intrinsic-long-name.td b/test/TableGen/intrinsic-long-name.td new file mode 100644 index 00000000000..6b9ba018e38 --- /dev/null +++ b/test/TableGen/intrinsic-long-name.td @@ -0,0 +1,32 @@ +// RUN: llvm-tblgen -gen-intrinsic %s | FileCheck %s +// XFAIL: vg_leak + +class IntrinsicProperty; + +class ValueType { + string Namespace = "MVT"; + int Size = size; + int Value = value; +} + +class LLVMType { + ValueType VT = vt; +} + +class Intrinsic param_types = []> { + string LLVMName = name; + bit isTarget = 0; + string TargetPrefix = ""; + list RetTypes = []; + list ParamTypes = param_types; + list Properties = []; +} + +def iAny : ValueType<0, 254>; +def llvm_anyint_ty : LLVMType; + +// Make sure we generate the long name without crashing +// CHECK: this_is_a_really_long_intrinsic_name_but_we_should_still_not_crash // llvm.this.is.a.really.long.intrinsic.name.but.we.should.still.not.crash +def int_foo : Intrinsic<"llvm.foo", [llvm_anyint_ty]>; +def int_this_is_a_really_long_intrinsic_name_but_we_should_still_not_crash : Intrinsic<"llvm.this.is.a.really.long.intrinsic.name.but.we.should.still.not.crash", [llvm_anyint_ty]>; + diff --git a/utils/TableGen/IntrinsicEmitter.cpp b/utils/TableGen/IntrinsicEmitter.cpp index 430ef32896d..34358c41a74 100644 --- a/utils/TableGen/IntrinsicEmitter.cpp +++ b/utils/TableGen/IntrinsicEmitter.cpp @@ -129,8 +129,9 @@ void IntrinsicEmitter::EmitEnumInfo(const std::vector &Ints, for (unsigned i = 0, e = Ints.size(); i != e; ++i) { OS << " " << Ints[i].EnumName; OS << ((i != e-1) ? ", " : " "); - OS << std::string(40-Ints[i].EnumName.size(), ' ') - << "// " << Ints[i].Name << "\n"; + if (Ints[i].EnumName.size() < 40) + OS << std::string(40-Ints[i].EnumName.size(), ' '); + OS << " // " << Ints[i].Name << "\n"; } OS << "#endif\n\n"; }