@@ -3098,21 +3098,39 @@ bool tools::shouldRecordCommandLine(const ToolChain &TC,
3098
3098
3099
3099
void tools::renderCommonIntegerOverflowOptions (const ArgList &Args,
3100
3100
ArgStringList &CmdArgs) {
3101
- // -fno-strict-overflow implies -fwrapv if it isn't disabled, but
3102
- // -fstrict-overflow won't turn off an explicitly enabled -fwrapv.
3103
- bool StrictOverflow = Args.hasFlag (options::OPT_fstrict_overflow,
3104
- options::OPT_fno_strict_overflow, true );
3105
- if (Arg *A = Args.getLastArg (options::OPT_fwrapv, options::OPT_fno_wrapv)) {
3106
- if (A->getOption ().matches (options::OPT_fwrapv))
3107
- CmdArgs.push_back (" -fwrapv" );
3108
- } else if (!StrictOverflow) {
3109
- CmdArgs.push_back (" -fwrapv" );
3101
+ bool use_fwrapv = false ;
3102
+ bool use_fwrapv_pointer = false ;
3103
+ for (const Arg *A : Args.filtered (
3104
+ options::OPT_fstrict_overflow, options::OPT_fno_strict_overflow,
3105
+ options::OPT_fwrapv, options::OPT_fno_wrapv,
3106
+ options::OPT_fwrapv_pointer, options::OPT_fno_wrapv_pointer)) {
3107
+ A->claim ();
3108
+ switch (A->getOption ().getID ()) {
3109
+ case options::OPT_fstrict_overflow:
3110
+ use_fwrapv = false ;
3111
+ use_fwrapv_pointer = false ;
3112
+ break ;
3113
+ case options::OPT_fno_strict_overflow:
3114
+ use_fwrapv = true ;
3115
+ use_fwrapv_pointer = true ;
3116
+ break ;
3117
+ case options::OPT_fwrapv:
3118
+ use_fwrapv = true ;
3119
+ break ;
3120
+ case options::OPT_fno_wrapv:
3121
+ use_fwrapv = false ;
3122
+ break ;
3123
+ case options::OPT_fwrapv_pointer:
3124
+ use_fwrapv_pointer = true ;
3125
+ break ;
3126
+ case options::OPT_fno_wrapv_pointer:
3127
+ use_fwrapv_pointer = false ;
3128
+ break ;
3129
+ }
3110
3130
}
3111
- if (Arg *A = Args.getLastArg (options::OPT_fwrapv_pointer,
3112
- options::OPT_fno_wrapv_pointer)) {
3113
- if (A->getOption ().matches (options::OPT_fwrapv_pointer))
3114
- CmdArgs.push_back (" -fwrapv-pointer" );
3115
- } else if (!StrictOverflow) {
3131
+
3132
+ if (use_fwrapv)
3133
+ CmdArgs.push_back (" -fwrapv" );
3134
+ if (use_fwrapv_pointer)
3116
3135
CmdArgs.push_back (" -fwrapv-pointer" );
3117
- }
3118
3136
}
0 commit comments