diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index c5f38762a5d61e..388a29261a7204 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5311,6 +5311,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, if (Freestanding) CmdArgs.push_back("-ffreestanding"); + Args.AddLastArg(CmdArgs, options::OPT_fno_knr_functions); + // This is a coarse approximation of what llvm-gcc actually does, both // -fasynchronous-unwind-tables and -fnon-call-exceptions interact in more // complicated ways. diff --git a/clang/test/Driver/no-knr-functions.c b/clang/test/Driver/no-knr-functions.c index 99f397d38d6261..5ebcc8916be674 100644 --- a/clang/test/Driver/no-knr-functions.c +++ b/clang/test/Driver/no-knr-functions.c @@ -7,5 +7,9 @@ // RUN: not %clang -fknr-functions -x c %s 2>&1 | FileCheck --check-prefixes=POS %s // RUN: not %clang -fknr-functions -std=c89 -x c %s 2>&1 | FileCheck --check-prefixes=POS %s +// Ensure that the driver flag is actually accepted though. +// RUN: %clang -fno-knr-functions -### %s 2>&1 | FileCheck --check-prefixes=ACCEPTED %s + // NONO: error: unknown argument: '-fno-no-knr-functions' // POS: error: unknown argument: '-fknr-functions' +// ACCEPTED-NOT: warning: argument unused during compilation: '-fno-knr-functions'