[cfe-dev] [llvm-dev] problem (and fix) with -fms-extensions

Mark Kettenis via cfe-dev cfe-dev at lists.llvm.org
Thu May 18 03:06:55 PDT 2017


> Date: Fri, 12 May 2017 08:53:53 -0700
> From: Reid Kleckner via llvm-dev <llvm-dev at lists.llvm.org>
> 
> Moving to cfe-dev to discuss clang things.
> 
> I think we already have _WCHAR_T_DEFINED for this:
>   if (LangOpts.MicrosoftExt) {
>     if (LangOpts.WChar) {
>       // wchar_t supported as a keyword.
>       Builder.defineMacro("_WCHAR_T_DEFINED");
>       Builder.defineMacro("_NATIVE_WCHAR_T_DEFINED");
>     }
>   }

Unfortunately those aren't defined if you use -fms-extensions in C
mode as LangOpts.WChar is false in that case.

> On Thu, May 11, 2017 at 11:04 AM, Marc Espie via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
> 
> > I've tried to build something that wanted ms-extensions on OpenBSD.
> > Long story short, didn't work so well, because all system includes
> > lead to
> >
> > <machine/_types.h>
> > #ifndef __cplusplus
> > typedef int                     __wchar_t;
> > #endif
> >
> > and since ms-extensions includes __char_t as a built-in, this did fail
> > abysmally.
> >
> > It would be simple to fix in OpenBSD, assuming clang did tell us it
> > was using ms-extensions.
> >
> > Would something like this be appropriate ? macro name subject to approval
> > of course.
> >
> >
> > Index: lib/Frontend/InitPreprocessor.cpp
> > ===================================================================
> > RCS file: /build/data/openbsd/cvs/src/gnu/llvm/tools/clang/lib/
> > Frontend/InitPreprocessor.cpp,v
> > retrieving revision 1.1.1.4
> > diff -u -p -r1.1.1.4 InitPreprocessor.cpp
> > --- lib/Frontend/InitPreprocessor.cpp   14 Mar 2017 08:07:56 -0000
> > 1.1.1.4
> > +++ lib/Frontend/InitPreprocessor.cpp   11 May 2017 17:54:41 -0000
> > @@ -366,6 +366,8 @@ static void InitializeStandardPredefined
> >    else
> >      Builder.defineMacro("__STDC_HOSTED__");
> >
> > +  if (LangOpts.MicrosoftMode)
> > +    Builder.defineMacro("__ms_extensions__", 1);
> >    if (!LangOpts.CPlusPlus) {
> >      if (LangOpts.C11)
> >        Builder.defineMacro("__STDC_VERSION__", "201112L");
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > llvm-dev at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> >
> >
> 
> --001a114190de613d6d054f55b675
> Content-Type: text/html; charset="UTF-8"
> Content-Transfer-Encoding: quoted-printable
> 
> <div dir=3D"ltr"><div>Moving to cfe-dev to discuss clang things.<br></div><=
> div><br></div><div>I think we already have=C2=A0_WCHAR_T_DEFINED for this:<=
> /div><div><div>=C2=A0 if (LangOpts.MicrosoftExt) {</div><div>=C2=A0 =C2=A0 =
> if (LangOpts.WChar) {</div><div>=C2=A0 =C2=A0 =C2=A0 // wchar_t supported a=
> s a keyword.</div><div>=C2=A0 =C2=A0 =C2=A0 Builder.defineMacro("_WCHA=
> R_T_DEFINED");</div><div>=C2=A0 =C2=A0 =C2=A0 Builder.defineMacro(&quo=
> t;_NATIVE_WCHAR_T_DEFINED");</div><div>=C2=A0 =C2=A0 }</div><div>=C2=
> =A0 }</div></div></div><div class=3D"gmail_extra"><br><div class=3D"gmail_q=
> uote">On Thu, May 11, 2017 at 11:04 AM, Marc Espie via llvm-dev <span dir=
> =3D"ltr"><<a href=3D"mailto:llvm-dev at lists.llvm.org" target=3D"_blank">l=
> lvm-dev at lists.llvm.org</a>></span> wrote:<br><blockquote class=3D"gmail_=
> quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1=
> ex">I've tried to build something that wanted ms-extensions on OpenBSD.=
> <br>
> Long story short, didn't work so well, because all system includes<br>
> lead to<br>
> <br>
> <machine/_types.h><br>
> #ifndef __cplusplus<br>
> typedef int=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
> =C2=A0 =C2=A0__wchar_t;<br>
> #endif<br>
> <br>
> and since ms-extensions includes __char_t as a built-in, this did fail<br>
> abysmally.<br>
> <br>
> It would be simple to fix in OpenBSD, assuming clang did tell us it<br>
> was using ms-extensions.<br>
> <br>
> Would something like this be appropriate ? macro name subject to approval<b=
> r>
> of course.<br>
> <br>
> <br>
> Index: lib/Frontend/InitPreprocessor.<wbr>cpp<br>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D<wbr>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<wbr>=3D=3D=3D=3D=3D=3D=3D<br>
> RCS file: /build/data/openbsd/cvs/src/<wbr>gnu/llvm/tools/clang/lib/<wbr>Fr=
> ontend/InitPreprocessor.cpp,<wbr>v<br>
> retrieving revision 1.1.1.4<br>
> diff -u -p -r1.1.1.4 InitPreprocessor.cpp<br>
> --- lib/Frontend/InitPreprocessor.<wbr>cpp=C2=A0 =C2=A014 Mar 2017 08:07:56=
>  -0000=C2=A0 =C2=A0 =C2=A0 1.1.1.4<br>
> +++ lib/Frontend/InitPreprocessor.<wbr>cpp=C2=A0 =C2=A011 May 2017 17:54:41=
>  -0000<br>
> @@ -366,6 +366,8 @@ static void InitializeStandardPredefined<br>
> =C2=A0 =C2=A0else<br>
> =C2=A0 =C2=A0 =C2=A0Builder.defineMacro("__STDC_<wbr>HOSTED__");<=
> br>
> <br>
> +=C2=A0 if (LangOpts.MicrosoftMode)<br>
> +=C2=A0 =C2=A0 Builder.defineMacro("__ms_<wbr>extensions__", 1);<=
> br>
> =C2=A0 =C2=A0if (!LangOpts.CPlusPlus) {<br>
> =C2=A0 =C2=A0 =C2=A0if (LangOpts.C11)<br>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0Builder.defineMacro("__STDC_<wbr>VERSION__&=
> quot;, "201112L");<br>
> <br>______________________________<wbr>_________________<br>
> LLVM Developers mailing list<br>
> <a href=3D"mailto:llvm-dev at lists.llvm.org">llvm-dev at lists.llvm.org</a><br>
> <a href=3D"http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel=3D"=
> noreferrer" target=3D"_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/li=
> stinfo/llvm-dev</a><br>
> <br></blockquote></div><br></div>
> 
> --001a114190de613d6d054f55b675--
> 
> --===============0097119953384729711==
> Content-Type: text/plain; charset="utf-8"
> MIME-Version: 1.0
> Content-Transfer-Encoding: base64
> Content-Disposition: inline
> 
> X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTExWTSBEZXZl
> bG9wZXJzIG1haWxpbmcgbGlzdApsbHZtLWRldkBsaXN0cy5sbHZtLm9yZwpodHRwOi8vbGlzdHMu
> bGx2bS5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL2xsdm0tZGV2Cg==
> 
> --===============0097119953384729711==--
> 



More information about the cfe-dev mailing list