@@ -3096,21 +3096,39 @@ bool tools::shouldRecordCommandLine(const ToolChain &TC,
30963096
30973097void tools::renderCommonIntegerOverflowOptions (const ArgList &Args,
30983098 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+ }
31083128 }
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)
31143133 CmdArgs.push_back (" -fwrapv-pointer" );
3115- }
31163134}
0 commit comments