diff --git a/src/dmd/hdrgen.d b/src/dmd/hdrgen.d index 42795cd17d82..ae049fcaf89a 100644 --- a/src/dmd/hdrgen.d +++ b/src/dmd/hdrgen.d @@ -2759,7 +2759,8 @@ public: override void visit(TraitsExp e) { buf.writestring("__traits("); - buf.writestring(e.ident.toString()); + if (e.ident) + buf.writestring(e.ident.toString()); if (e.args) { foreach (arg; *e.args) diff --git a/src/dmd/parse.d b/src/dmd/parse.d index 1ed0f20c422f..88a4bb67ea24 100644 --- a/src/dmd/parse.d +++ b/src/dmd/parse.d @@ -3725,9 +3725,12 @@ final class Parser(AST) : Lexer case TOK.traits: if (AST.TraitsExp te = cast(AST.TraitsExp) parsePrimaryExp()) - t = new AST.TypeTraits(token.loc, te); - else - t = new AST.TypeError; + if (te.ident && te.args) + { + t = new AST.TypeTraits(token.loc, te); + break; + } + t = new AST.TypeError; break; case TOK.const_: diff --git a/test/fail_compilation/traits_alone.d b/test/fail_compilation/traits_alone.d new file mode 100644 index 000000000000..74dc9a844611 --- /dev/null +++ b/test/fail_compilation/traits_alone.d @@ -0,0 +1,2 @@ +//used to segfault +__traits