diff options
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 3c0ba31..7b8554c 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -2814,6 +2814,38 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, if (Args.hasArg(OPT_fapply_global_visibility_to_externs)) Opts.SetVisibilityForExternDecls = 1; + if (Args.hasArg(OPT_fvisibility_from_dllstorageclass)) { + Opts.VisibilityFromDLLStorageClass = 1; + + // Translate dllexport defintions to default visibility, by default. + if (Arg *O = Args.getLastArg(OPT_fvisibility_dllexport_EQ)) + Opts.setDLLExportVisibility(parseVisibility(O, Args, Diags)); + else + Opts.setDLLExportVisibility(DefaultVisibility); + + // Translate defintions without an explict DLL storage class to hidden + // visibility, by default. + if (Arg *O = Args.getLastArg(OPT_fvisibility_nodllstorageclass_EQ)) + Opts.setNoDLLStorageClassVisibility(parseVisibility(O, Args, Diags)); + else + Opts.setNoDLLStorageClassVisibility(HiddenVisibility); + + // Translate dllimport external declarations to default visibility, by + // default. + if (Arg *O = Args.getLastArg(OPT_fvisibility_externs_dllimport_EQ)) + Opts.setExternDeclDLLImportVisibility(parseVisibility(O, Args, Diags)); + else + Opts.setExternDeclDLLImportVisibility(DefaultVisibility); + + // Translate external declarations without an explicit DLL storage class + // to hidden visibility, by default. + if (Arg *O = Args.getLastArg(OPT_fvisibility_externs_nodllstorageclass_EQ)) + Opts.setExternDeclNoDLLStorageClassVisibility( + parseVisibility(O, Args, Diags)); + else + Opts.setExternDeclNoDLLStorageClassVisibility(HiddenVisibility); + } + if (Args.hasArg(OPT_ftrapv)) { Opts.setSignedOverflowBehavior(LangOptions::SOB_Trapping); // Set the handler, if one is specified. |