45 const DerivedArgList *Owner)
const {
46 const DerivedArgList &SynthesizedArgs = Owner ? *Owner : DAL;
47 const Arg *BaseArg = &A->getBaseArg();
49 switch (A->getOption().getID()) {
50 case options::OPT__SLASH_permissive:
51 DAL.append(SynthesizedArgs.MakeFlagArg(
52 BaseArg, Opts.getOption(options::OPT_fdelayed_template_parsing)));
53 DAL.append(SynthesizedArgs.MakeFlagArg(
54 BaseArg, Opts.getOption(options::OPT_fno_operator_names)));
56 case options::OPT__SLASH_permissive_:
57 DAL.append(SynthesizedArgs.MakeFlagArg(
58 BaseArg, Opts.getOption(options::OPT_fno_delayed_template_parsing)));
59 DAL.append(SynthesizedArgs.MakeFlagArg(
60 BaseArg, Opts.getOption(options::OPT_foperator_names)));
66 if (!A->getOption().matches(options::OPT__SLASH_O))
72 llvm::StringRef OptStr = A->getValue();
73 for (
size_t I = 0, E = OptStr.size(); I != E; ++I) {
74 const char &OptChar = *(OptStr.data() + I);
84 if (&OptChar != ExpandChar) {
89 DAL.append(SynthesizedArgs.MakeFlagArg(
90 BaseArg, Opts.getOption(options::OPT_O0)));
93 DAL.append(SynthesizedArgs.MakeJoinedArg(
94 BaseArg, Opts.getOption(options::OPT_O),
"s"));
95 }
else if (OptChar ==
'2' || OptChar ==
'x') {
96 DAL.append(SynthesizedArgs.MakeFlagArg(
97 BaseArg, Opts.getOption(options::OPT_fbuiltin)));
98 DAL.append(SynthesizedArgs.MakeJoinedArg(
99 BaseArg, Opts.getOption(options::OPT_O),
"3"));
101 if (SupportsForcingFramePointer &&
102 !DAL.hasArgNoClaim(options::OPT_fno_omit_frame_pointer))
103 DAL.append(SynthesizedArgs.MakeFlagArg(
104 BaseArg, Opts.getOption(options::OPT_fomit_frame_pointer)));
105 if (OptChar ==
'1' || OptChar ==
'2')
106 DAL.append(SynthesizedArgs.MakeFlagArg(
107 BaseArg, Opts.getOption(options::OPT_ffunction_sections)));
111 if (I + 1 != E && llvm::isDigit(OptStr[I + 1])) {
112 switch (OptStr[I + 1]) {
114 DAL.append(SynthesizedArgs.MakeFlagArg(
115 BaseArg, Opts.getOption(options::OPT_fno_inline)));
118 DAL.append(SynthesizedArgs.MakeFlagArg(
119 BaseArg, Opts.getOption(options::OPT_finline_hint_functions)));
123 DAL.append(SynthesizedArgs.MakeFlagArg(
124 BaseArg, Opts.getOption(options::OPT_finline_functions)));
134 if (I + 1 != E && OptStr[I + 1] ==
'-') {
136 DAL.append(SynthesizedArgs.MakeFlagArg(
137 BaseArg, Opts.getOption(options::OPT_fno_builtin)));
139 DAL.append(SynthesizedArgs.MakeFlagArg(
140 BaseArg, Opts.getOption(options::OPT_fbuiltin)));
144 DAL.append(SynthesizedArgs.MakeJoinedArg(
145 BaseArg, Opts.getOption(options::OPT_O),
"s"));
148 DAL.append(SynthesizedArgs.MakeJoinedArg(
149 BaseArg, Opts.getOption(options::OPT_O),
"3"));
152 bool OmitFramePointer =
true;
153 if (I + 1 != E && OptStr[I + 1] ==
'-') {
154 OmitFramePointer =
false;
157 if (SupportsForcingFramePointer) {
158 if (OmitFramePointer)
159 DAL.append(SynthesizedArgs.MakeFlagArg(
160 BaseArg, Opts.getOption(options::OPT_fomit_frame_pointer)));
162 DAL.append(SynthesizedArgs.MakeFlagArg(
163 BaseArg, Opts.getOption(options::OPT_fno_omit_frame_pointer)));