Skip to content

Instantly share code, notes, and snippets.

@jrfondren
Created September 22, 2021 05:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jrfondren/78b5d366e37a6a9c4b91e37751f25789 to your computer and use it in GitHub Desktop.
Save jrfondren/78b5d366e37a6a9c4b91e37751f25789 to your computer and use it in GitHub Desktop.
'alias this' names that cause dmd to segfault
#! /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" },
];
@jrfondren
Copy link
Author

require
init
ModuleInfo
keys
values
rehash
__ArrayPostblit
__ArrayDtor
_d_assert_fail
dup
__cmp
__equals
__switch
__switch_error
__ArrayCast

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment