@@ -3098,21 +3098,39 @@ bool tools::shouldRecordCommandLine(const ToolChain &TC,
30983098
30993099void tools::renderCommonIntegerOverflowOptions (const ArgList &Args,
31003100 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+ }
31103130 }
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)
31163135 CmdArgs.push_back (" -fwrapv-pointer" );
3117- }
31183136}
0 commit comments