From f991372ea8468c734e634093e8c26087f9a899bd Mon Sep 17 00:00:00 2001 From: Boris Carvajal Date: Thu, 6 May 2021 18:58:17 -0400 Subject: [PATCH] Fix Issue 21898 - Qualifier ignored in alias definition if parentheses are not present --- src/dmd/dsymbolsem.d | 7 +++++-- test/compilable/test21898.d | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 test/compilable/test21898.d diff --git a/src/dmd/dsymbolsem.d b/src/dmd/dsymbolsem.d index 2988f26cdf58..1d55bb5be38b 100644 --- a/src/dmd/dsymbolsem.d +++ b/src/dmd/dsymbolsem.d @@ -6536,8 +6536,11 @@ void aliasInstanceSemantic(TemplateInstance tempinst, Scope* sc, TemplateDeclara TemplateTypeParameter ttp = (*tempdecl.parameters)[0].isTemplateTypeParameter(); Type ta = tempinst.tdtypes[0].isType(); - Declaration d = new AliasDeclaration(tempinst.loc, ttp.ident, ta.addMod(tempdecl.onemember.isAliasDeclaration.type.mod)); - d.storage_class |= STC.templateparameter; + auto ad = tempdecl.onemember.isAliasDeclaration(); + + // Note: qualifiers can be in both 'ad.type.mod' and 'ad.storage_class' + Declaration d = new AliasDeclaration(tempinst.loc, ttp.ident, ta.addMod(ad.type.mod)); + d.storage_class |= STC.templateparameter | ad.storage_class; d.dsymbolSemantic(sc); paramscope.pop(); diff --git a/test/compilable/test21898.d b/test/compilable/test21898.d new file mode 100644 index 000000000000..9ac18b8cb6b4 --- /dev/null +++ b/test/compilable/test21898.d @@ -0,0 +1,7 @@ +// https://issues.dlang.org/show_bug.cgi?id=21898 + +alias Works(T) = immutable(T); +alias Fails(T) = immutable T; + +static assert(is(Works!int == immutable int)); +static assert(is(Fails!int == immutable int));