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