diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-02-11 21:05:00 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-02-11 21:05:00 +0000 |
commit | 86c318f4962fb18383c184a380e294e2b5589456 (patch) | |
tree | 37594f81afbd01917ec6706c169d0fb222d2aa8c /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 7422074df096e7a21e3b02f1a6088edf2459a765 (diff) | |
download | llvm-86c318f4962fb18383c184a380e294e2b5589456.zip llvm-86c318f4962fb18383c184a380e294e2b5589456.tar.gz llvm-86c318f4962fb18383c184a380e294e2b5589456.tar.bz2 |
MS ABI: Add support for the -vm{b,g,s,m,v} flags
These flags control the inheritance model initially used by the
translation unit.
Differential Revision: http://llvm-reviews.chandlerc.com/D2741
llvm-svn: 201175
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 034730f..5320415 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1402,6 +1402,24 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, } } + if (Arg *A = Args.getLastArg(OPT_fms_memptr_rep_EQ)) { + LangOptions::PragmaMSPointersToMembersKind InheritanceModel = + llvm::StringSwitch<LangOptions::PragmaMSPointersToMembersKind>( + A->getValue()) + .Case("single", + LangOptions::PPTMK_FullGeneralitySingleInheritance) + .Case("multiple", + LangOptions::PPTMK_FullGeneralityMultipleInheritance) + .Case("virtual", + LangOptions::PPTMK_FullGeneralityVirtualInheritance) + .Default(LangOptions::PPTMK_BestCase); + if (InheritanceModel == LangOptions::PPTMK_BestCase) + Diags.Report(diag::err_drv_invalid_value) + << "-fms-memptr-rep=" << A->getValue(); + + Opts.setMSPointerToMemberRepresentationMethod(InheritanceModel); + } + // Check if -fopenmp is specified. Opts.OpenMP = Args.hasArg(OPT_fopenmp); |