-
-
Save jrfondren/78b5d366e37a6a9c4b91e37751f25789 to your computer and use it in GitHub Desktop.
'alias this' names that cause dmd to segfault
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env dub | |
/++ dub.sdl: | |
stringImportPaths "." | |
+/ | |
import std; | |
void main() { | |
enum data = import(__FILE__).splitLines.find("__EOF__").drop(1).join("\n"); | |
foreach (m; data.matchAll(regex(`"([^"\n]+)"`))) { | |
auto keyword = m[1]; | |
auto file = File("test.d", "w"); | |
file.write(format!q"EOF | |
struct S { | |
private int %s; | |
alias %s this; | |
} | |
void main() { | |
import std.stdio : writeln; | |
writeln(S()); | |
} | |
EOF"(keyword, keyword)); | |
file.close; | |
auto result = execute(["dmd", "test.d"]); | |
if (result.status != 0 && !result.output.canFind("Error:")) | |
writeln(keyword); | |
} | |
} | |
__EOF__ | |
immutable Msgtable[] msgtable = | |
[ | |
{ "IUnknown" }, | |
{ "Object" }, | |
{ "object" }, | |
{ "string" }, | |
{ "wstring" }, | |
{ "dstring" }, | |
{ "max" }, | |
{ "min" }, | |
{ "This", "this" }, | |
{ "_super", "super" }, | |
{ "ctor", "__ctor" }, | |
{ "dtor", "__dtor" }, | |
{ "__xdtor", "__xdtor" }, | |
{ "__fieldDtor", "__fieldDtor" }, | |
{ "__aggrDtor", "__aggrDtor" }, | |
{ "cppdtor", "__cppdtor" }, | |
{ "ticppdtor", "__ticppdtor" }, | |
{ "postblit", "__postblit" }, | |
{ "__xpostblit", "__xpostblit" }, | |
{ "__fieldPostblit", "__fieldPostblit" }, | |
{ "__aggrPostblit", "__aggrPostblit" }, | |
{ "classInvariant", "__invariant" }, | |
{ "unitTest", "__unitTest" }, | |
{ "require", "__require" }, | |
{ "ensure", "__ensure" }, | |
{ "capture", "__capture" }, | |
{ "this2", "__this" }, | |
{ "_init", "init" }, | |
{ "__sizeof", "sizeof" }, | |
{ "__xalignof", "alignof" }, | |
{ "_mangleof", "mangleof" }, | |
{ "stringof" }, | |
{ "_tupleof", "tupleof" }, | |
{ "length" }, | |
{ "remove" }, | |
{ "ptr" }, | |
{ "array" }, | |
{ "funcptr" }, | |
{ "dollar", "__dollar" }, | |
{ "ctfe", "__ctfe" }, | |
{ "offset" }, | |
{ "offsetof" }, | |
{ "ModuleInfo" }, | |
{ "ClassInfo" }, | |
{ "classinfo" }, | |
{ "typeinfo" }, | |
{ "outer" }, | |
{ "Exception" }, | |
{ "RTInfo" }, | |
{ "Throwable" }, | |
{ "Error" }, | |
{ "withSym", "__withSym" }, | |
{ "result", "__result" }, | |
{ "returnLabel", "__returnLabel" }, | |
{ "line" }, | |
{ "empty", "" }, | |
{ "p" }, | |
{ "q" }, | |
{ "__vptr" }, | |
{ "__monitor" }, | |
{ "gate", "__gate" }, | |
{ "__c_long" }, | |
{ "__c_ulong" }, | |
{ "__c_longlong" }, | |
{ "__c_ulonglong" }, | |
{ "__c_long_double" }, | |
{ "__c_wchar_t" }, | |
{ "__c_complex_float" }, | |
{ "__c_complex_double" }, | |
{ "__c_complex_real" }, | |
{ "cpp_type_info_ptr", "__cpp_type_info_ptr" }, | |
{ "_assert", "assert" }, | |
{ "_unittest", "unittest" }, | |
{ "_body", "body" }, | |
{ "printf" }, | |
{ "scanf" }, | |
{ "TypeInfo" }, | |
{ "TypeInfo_Class" }, | |
{ "TypeInfo_Interface" }, | |
{ "TypeInfo_Struct" }, | |
{ "TypeInfo_Enum" }, | |
{ "TypeInfo_Pointer" }, | |
{ "TypeInfo_Vector" }, | |
{ "TypeInfo_Array" }, | |
{ "TypeInfo_StaticArray" }, | |
{ "TypeInfo_AssociativeArray" }, | |
{ "TypeInfo_Function" }, | |
{ "TypeInfo_Delegate" }, | |
{ "TypeInfo_Tuple" }, | |
{ "TypeInfo_Const" }, | |
{ "TypeInfo_Invariant" }, | |
{ "TypeInfo_Shared" }, | |
{ "TypeInfo_Wild", "TypeInfo_Inout" }, | |
{ "elements" }, | |
{ "_arguments_typeinfo" }, | |
{ "_arguments" }, | |
{ "_argptr" }, | |
{ "destroy" }, | |
{ "xopEquals", "__xopEquals" }, | |
{ "xopCmp", "__xopCmp" }, | |
{ "xtoHash", "__xtoHash" }, | |
{ "LINE", "__LINE__" }, | |
{ "FILE", "__FILE__" }, | |
{ "MODULE", "__MODULE__" }, | |
{ "FUNCTION", "__FUNCTION__" }, | |
{ "PRETTY_FUNCTION", "__PRETTY_FUNCTION__" }, | |
{ "DATE", "__DATE__" }, | |
{ "TIME", "__TIME__" }, | |
{ "TIMESTAMP", "__TIMESTAMP__" }, | |
{ "VENDOR", "__VENDOR__" }, | |
{ "VERSIONX", "__VERSION__" }, | |
{ "EOFX", "__EOF__" }, | |
{ "nan" }, | |
{ "infinity" }, | |
{ "dig" }, | |
{ "epsilon" }, | |
{ "mant_dig" }, | |
{ "max_10_exp" }, | |
{ "max_exp" }, | |
{ "min_10_exp" }, | |
{ "min_exp" }, | |
{ "min_normal" }, | |
{ "re" }, | |
{ "im" }, | |
{ "C" }, | |
{ "D" }, | |
{ "Windows" }, | |
{ "System" }, | |
{ "Objective" }, | |
{ "exit" }, | |
{ "success" }, | |
{ "failure" }, | |
{ "keys" }, | |
{ "values" }, | |
{ "rehash" }, | |
{ "future", "__future" }, | |
{ "property" }, | |
{ "nogc" }, | |
{ "live" }, | |
{ "safe" }, | |
{ "trusted" }, | |
{ "system" }, | |
{ "disable" }, | |
// For inline assembler | |
{ "___out", "out" }, | |
{ "___in", "in" }, | |
{ "__int", "int" }, | |
{ "_dollar", "$" }, | |
{ "__LOCAL_SIZE" }, | |
// For operator overloads | |
{ "uadd", "opPos" }, | |
{ "neg", "opNeg" }, | |
{ "com", "opCom" }, | |
{ "add", "opAdd" }, | |
{ "add_r", "opAdd_r" }, | |
{ "sub", "opSub" }, | |
{ "sub_r", "opSub_r" }, | |
{ "mul", "opMul" }, | |
{ "mul_r", "opMul_r" }, | |
{ "div", "opDiv" }, | |
{ "div_r", "opDiv_r" }, | |
{ "mod", "opMod" }, | |
{ "mod_r", "opMod_r" }, | |
{ "eq", "opEquals" }, | |
{ "cmp", "opCmp" }, | |
{ "iand", "opAnd" }, | |
{ "iand_r", "opAnd_r" }, | |
{ "ior", "opOr" }, | |
{ "ior_r", "opOr_r" }, | |
{ "ixor", "opXor" }, | |
{ "ixor_r", "opXor_r" }, | |
{ "shl", "opShl" }, | |
{ "shl_r", "opShl_r" }, | |
{ "shr", "opShr" }, | |
{ "shr_r", "opShr_r" }, | |
{ "ushr", "opUShr" }, | |
{ "ushr_r", "opUShr_r" }, | |
{ "cat", "opCat" }, | |
{ "cat_r", "opCat_r" }, | |
{ "assign", "opAssign" }, | |
{ "addass", "opAddAssign" }, | |
{ "subass", "opSubAssign" }, | |
{ "mulass", "opMulAssign" }, | |
{ "divass", "opDivAssign" }, | |
{ "modass", "opModAssign" }, | |
{ "andass", "opAndAssign" }, | |
{ "orass", "opOrAssign" }, | |
{ "xorass", "opXorAssign" }, | |
{ "shlass", "opShlAssign" }, | |
{ "shrass", "opShrAssign" }, | |
{ "ushrass", "opUShrAssign" }, | |
{ "catass", "opCatAssign" }, | |
{ "postinc", "opPostInc" }, | |
{ "postdec", "opPostDec" }, | |
{ "index", "opIndex" }, | |
{ "indexass", "opIndexAssign" }, | |
{ "slice", "opSlice" }, | |
{ "sliceass", "opSliceAssign" }, | |
{ "call", "opCall" }, | |
{ "_cast", "opCast" }, | |
{ "opIn" }, | |
{ "opIn_r" }, | |
{ "opStar" }, | |
{ "opDot" }, | |
{ "opDispatch" }, | |
{ "opDollar" }, | |
{ "opUnary" }, | |
{ "opIndexUnary" }, | |
{ "opSliceUnary" }, | |
{ "opBinary" }, | |
{ "opBinaryRight" }, | |
{ "opOpAssign" }, | |
{ "opIndexOpAssign" }, | |
{ "opSliceOpAssign" }, | |
{ "pow", "opPow" }, | |
{ "pow_r", "opPow_r" }, | |
{ "powass", "opPowAssign" }, | |
{ "classNew", "new" }, | |
{ "classDelete", "delete" }, | |
// For foreach | |
{ "apply", "opApply" }, | |
{ "applyReverse", "opApplyReverse" }, | |
// Ranges | |
{ "Fempty", "empty" }, | |
{ "Ffront", "front" }, | |
{ "Fback", "back" }, | |
{ "FpopFront", "popFront" }, | |
{ "FpopBack", "popBack" }, | |
// For internal functions | |
{ "aaLen", "_aaLen" }, | |
{ "aaKeys", "_aaKeys" }, | |
{ "aaValues", "_aaValues" }, | |
{ "aaRehash", "_aaRehash" }, | |
{ "monitorenter", "_d_monitorenter" }, | |
{ "monitorexit", "_d_monitorexit" }, | |
{ "criticalenter", "_d_criticalenter2" }, | |
{ "criticalexit", "_d_criticalexit" }, | |
{ "__ArrayPostblit" }, | |
{ "__ArrayDtor" }, | |
{ "_d_delThrowable" }, | |
{ "_d_assert_fail" }, | |
{ "dup" }, | |
{ "_aaApply" }, | |
{ "_aaApply2" }, | |
// For pragma's | |
{ "Pinline", "inline" }, | |
{ "lib" }, | |
{ "linkerDirective" }, | |
{ "mangle" }, | |
{ "msg" }, | |
{ "startaddress" }, | |
{ "crt_constructor" }, | |
{ "crt_destructor" }, | |
// For special functions | |
{ "tohash", "toHash" }, | |
{ "tostring", "toString" }, | |
{ "getmembers", "getMembers" }, | |
// Special functions | |
{ "__alloca", "alloca" }, | |
{ "main" }, | |
{ "WinMain" }, | |
{ "DllMain" }, | |
{ "CMain", "_d_cmain" }, | |
{ "rt_init" }, | |
{ "__cmp" }, | |
{ "__equals"}, | |
{ "__switch"}, | |
{ "__switch_error"}, | |
{ "__ArrayCast"}, | |
{ "_d_HookTraceImpl" }, | |
{ "_d_arraysetlengthTImpl"}, | |
{ "_d_arraysetlengthT"}, | |
{ "_d_arraysetlengthTTrace"}, | |
// varargs implementation | |
{ "stdc" }, | |
{ "stdarg" }, | |
{ "va_start" }, | |
// Builtin functions | |
{ "std" }, | |
{ "core" }, | |
{ "etc" }, | |
{ "attribute" }, | |
{ "math" }, | |
{ "sin" }, | |
{ "cos" }, | |
{ "tan" }, | |
{ "_sqrt", "sqrt" }, | |
{ "_pow", "pow" }, | |
{ "atan2" }, | |
{ "rint" }, | |
{ "ldexp" }, | |
{ "rndtol" }, | |
{ "exp" }, | |
{ "expm1" }, | |
{ "exp2" }, | |
{ "yl2x" }, | |
{ "yl2xp1" }, | |
{ "log" }, | |
{ "log2" }, | |
{ "log10" }, | |
{ "round" }, | |
{ "floor" }, | |
{ "trunc" }, | |
{ "fmax" }, | |
{ "fmin" }, | |
{ "fma" }, | |
{ "isnan" }, | |
{ "isInfinity" }, | |
{ "isfinite" }, | |
{ "ceil" }, | |
{ "copysign" }, | |
{ "fabs" }, | |
{ "toPrec" }, | |
{ "simd" }, | |
{ "__prefetch"}, | |
{ "__simd_sto"}, | |
{ "__simd"}, | |
{ "__simd_ib"}, | |
{ "bitop" }, | |
{ "bsf" }, | |
{ "bsr" }, | |
{ "btc" }, | |
{ "btr" }, | |
{ "bts" }, | |
{ "bswap" }, | |
{ "volatile"}, | |
{ "volatileLoad"}, | |
{ "volatileStore"}, | |
{ "_popcnt"}, | |
{ "inp"}, | |
{ "inpl"}, | |
{ "inpw"}, | |
{ "outp"}, | |
{ "outpl"}, | |
{ "outpw"}, | |
// Traits | |
{ "isAbstractClass" }, | |
{ "isArithmetic" }, | |
{ "isAssociativeArray" }, | |
{ "isFinalClass" }, | |
{ "isTemplate" }, | |
{ "isPOD" }, | |
{ "isDeprecated" }, | |
{ "isDisabled" }, | |
{ "isFuture" }, | |
{ "isNested" }, | |
{ "isFloating" }, | |
{ "isIntegral" }, | |
{ "isScalar" }, | |
{ "isStaticArray" }, | |
{ "isUnsigned" }, | |
{ "isVirtualFunction" }, | |
{ "isVirtualMethod" }, | |
{ "isAbstractFunction" }, | |
{ "isFinalFunction" }, | |
{ "isOverrideFunction" }, | |
{ "isStaticFunction" }, | |
{ "isModule" }, | |
{ "isPackage" }, | |
{ "isRef" }, | |
{ "isOut" }, | |
{ "isLazy" }, | |
{ "hasMember" }, | |
{ "identifier" }, | |
{ "getProtection" }, | |
{ "getVisibility" }, | |
{ "parent" }, | |
{ "child" }, | |
{ "getMember" }, | |
{ "getOverloads" }, | |
{ "getVirtualFunctions" }, | |
{ "getVirtualMethods" }, | |
{ "classInstanceSize" }, | |
{ "allMembers" }, | |
{ "derivedMembers" }, | |
{ "isSame" }, | |
{ "compiles" }, | |
{ "getAliasThis" }, | |
{ "getAttributes" }, | |
{ "getFunctionAttributes" }, | |
{ "getFunctionVariadicStyle" }, | |
{ "getParameterStorageClasses" }, | |
{ "getLinkage" }, | |
{ "getUnitTests" }, | |
{ "getVirtualIndex" }, | |
{ "getPointerBitmap" }, | |
{ "getCppNamespaces" }, | |
{ "isReturnOnStack" }, | |
{ "isZeroInit" }, | |
{ "getTargetInfo" }, | |
{ "getLocation" }, | |
{ "hasPostblit" }, | |
{ "hasCopyConstructor" }, | |
{ "isCopyable" }, | |
{ "toType" }, | |
// For C++ mangling | |
{ "allocator" }, | |
{ "basic_string" }, | |
{ "basic_istream" }, | |
{ "basic_ostream" }, | |
{ "basic_iostream" }, | |
{ "char_traits" }, | |
// Compiler recognized UDA's | |
{ "udaGNUAbiTag", "gnuAbiTag" }, | |
{ "udaSelector", "selector" }, | |
{ "udaOptional", "optional"}, | |
// C names, for undefined identifier error messages | |
{ "NULL" }, | |
{ "TRUE" }, | |
{ "FALSE" }, | |
{ "unsigned" }, | |
{ "wchar_t" }, | |
// for C compiler | |
{ "__tag" }, | |
{ "dllimport" }, | |
{ "dllexport" }, | |
{ "vector_size" }, | |
{ "__func__" }, | |
{ "noreturn" }, | |
]; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
require
init
ModuleInfo
keys
values
rehash
__ArrayPostblit
__ArrayDtor
_d_assert_fail
dup
__cmp
__equals
__switch
__switch_error
__ArrayCast