[flang][cli] Add diagnostic flags to the CLI (#142022) · llvm/llvm-project@bf60aa1 (original) (raw)

`@@ -20,12 +20,10 @@

`

20

20

`#include "flang/Support/Version.h"

`

21

21

`#include "flang/Tools/TargetSetup.h"

`

22

22

`#include "flang/Version.inc"

`

23

``

`-

#include "clang/Basic/AllDiagnostics.h"

`

24

23

`#include "clang/Basic/DiagnosticDriver.h"

`

25

24

`#include "clang/Basic/DiagnosticOptions.h"

`

26

25

`#include "clang/Driver/CommonArgs.h"

`

27

26

`#include "clang/Driver/Driver.h"

`

28

``

`-

#include "clang/Driver/DriverDiagnostic.h"

`

29

27

`#include "clang/Driver/OptionUtils.h"

`

30

28

`#include "clang/Driver/Options.h"

`

31

29

`#include "llvm/ADT/StringRef.h"

`

`@@ -36,7 +34,6 @@

`

36

34

`#include "llvm/Option/OptTable.h"

`

37

35

`#include "llvm/Support/CodeGen.h"

`

38

36

`#include "llvm/Support/FileSystem.h"

`

39

``

`-

#include "llvm/Support/FileUtilities.h"

`

40

37

`#include "llvm/Support/Path.h"

`

41

38

`#include "llvm/Support/Process.h"

`

42

39

`#include "llvm/Support/raw_ostream.h"

`

`@@ -975,10 +972,23 @@ static bool parseSemaArgs(CompilerInvocation &res, llvm::opt::ArgList &args,

`

975

972

``

976

973

`/// Parses all diagnostics related arguments and populates the variables

`

977

974

`/// options accordingly. Returns false if new errors are generated.

`

``

975

`+

/// FC1 driver entry point for parsing diagnostic arguments.

`

978

976

`static bool parseDiagArgs(CompilerInvocation &res, llvm::opt::ArgList &args,

`

979

977

` clang::DiagnosticsEngine &diags) {

`

980

978

`unsigned numErrorsBefore = diags.getNumErrors();

`

981

979

``

``

980

`+

auto &features{res.getFrontendOpts().features};

`

``

981

`+

// The order of these flags (-pedantic -W -w) is important and is

`

``

982

`+

// chosen to match clang's behavior.

`

``

983

+

``

984

`+

// -pedantic

`

``

985

`+

if (args.hasArg(clang::driver::options::OPT_pedantic)) {

`

``

986

`+

features.WarnOnAllNonstandard();

`

``

987

`+

features.WarnOnAllUsage();

`

``

988

`+

res.setEnableConformanceChecks();

`

``

989

`+

res.setEnableUsageChecks();

`

``

990

`+

}

`

``

991

+

982

992

`// -Werror option

`

983

993

`// TODO: Currently throws a Diagnostic for anything other than -W,

`

984

994

`// this has to change when other -W's are supported.

`

`@@ -988,22 +998,26 @@ static bool parseDiagArgs(CompilerInvocation &res, llvm::opt::ArgList &args,

`

988

998

`for (const auto &wArg : wArgs) {

`

989

999

`if (wArg == "error") {

`

990

1000

` res.setWarnAsErr(true);

`

991

``

`-

} else {

`

992

``

`-

const unsigned diagID =

`

993

``

`-

diags.getCustomDiagID(clang::DiagnosticsEngine::Error,

`

994

``

`` -

"Only -Werror is supported currently.");

``

995

``

`-

diags.Report(diagID);

`

``

1001

`+

// -W(no-)

`

``

1002

`+

} else if (!features.ApplyCliOption(wArg)) {

`

``

1003

`+

const unsigned diagID = diags.getCustomDiagID(

`

``

1004

`+

clang::DiagnosticsEngine::Error, "Unknown diagnostic option: -W%0");

`

``

1005

`+

diags.Report(diagID) << wArg;

`

996

1006

` }

`

997

1007

` }

`

998

1008

` }

`

999

1009

``

1000

``

`` -

// Default to off for flang -fc1.

``

1001

``

`-

res.getFrontendOpts().showColors =

`

1002

``

`-

parseShowColorsArgs(args, /defaultDiagColor=/false);

`

1003

``

-

1004

``

`-

// Honor color diagnostics.

`

1005

``

`-

res.getDiagnosticOpts().ShowColors = res.getFrontendOpts().showColors;

`

``

1010

`+

// -w

`

``

1011

`+

if (args.hasArg(clang::driver::options::OPT_w)) {

`

``

1012

`+

features.DisableAllWarnings();

`

``

1013

`+

res.setDisableWarnings();

`

``

1014

`+

}

`

1006

1015

``

``

1016

`` +

// Default to off for flang -fc1.

``

``

1017

`+

bool showColors{parseShowColorsArgs(args, false)};

`

``

1018

`+

diags.getDiagnosticOptions().ShowColors = showColors;

`

``

1019

`+

res.getDiagnosticOpts().ShowColors = showColors;

`

``

1020

`+

res.getFrontendOpts().showColors = showColors;

`

1007

1021

`return diags.getNumErrors() == numErrorsBefore;

`

1008

1022

`}

`

1009

1023

``

`@@ -1078,16 +1092,6 @@ static bool parseDialectArgs(CompilerInvocation &res, llvm::opt::ArgList &args,

`

1078

1092

` Fortran::common::LanguageFeature::OpenACC);

`

1079

1093

` }

`

1080

1094

``

1081

``

`-

// -pedantic

`

1082

``

`-

if (args.hasArg(clang::driver::options::OPT_pedantic)) {

`

1083

``

`-

res.setEnableConformanceChecks();

`

1084

``

`-

res.setEnableUsageChecks();

`

1085

``

`-

}

`

1086

``

-

1087

``

`-

// -w

`

1088

``

`-

if (args.hasArg(clang::driver::options::OPT_w))

`

1089

``

`-

res.setDisableWarnings();

`

1090

``

-

1091

1095

`// -std=f2018

`

1092

1096

`// TODO: Set proper options when more fortran standards

`

1093

1097

`// are supported.

`

`@@ -1096,6 +1100,7 @@ static bool parseDialectArgs(CompilerInvocation &res, llvm::opt::ArgList &args,

`

1096

1100

`// We only allow f2018 as the given standard

`

1097

1101

`if (standard == "f2018") {

`

1098

1102

` res.setEnableConformanceChecks();

`

``

1103

`+

res.getFrontendOpts().features.WarnOnAllNonstandard();

`

1099

1104

` } else {

`

1100

1105

`const unsigned diagID =

`

1101

1106

` diags.getCustomDiagID(clang::DiagnosticsEngine::Error,

`

`@@ -1702,16 +1707,7 @@ void CompilerInvocation::setFortranOpts() {

`

1702

1707

`if (frontendOptions.needProvenanceRangeToCharBlockMappings)

`

1703

1708

` fortranOptions.needProvenanceRangeToCharBlockMappings = true;

`

1704

1709

``

1705

``

`-

if (getEnableConformanceChecks())

`

1706

``

`-

fortranOptions.features.WarnOnAllNonstandard();

`

1707

``

-

1708

``

`-

if (getEnableUsageChecks())

`

1709

``

`-

fortranOptions.features.WarnOnAllUsage();

`

1710

``

-

1711

``

`-

if (getDisableWarnings()) {

`

1712

``

`-

fortranOptions.features.DisableAllNonstandardWarnings();

`

1713

``

`-

fortranOptions.features.DisableAllUsageWarnings();

`

1714

``

`-

}

`

``

1710

`+

fortranOptions.features = frontendOptions.features;

`

1715

1711

`}

`

1716

1712

``

1717

1713

`std::unique_ptrFortran::semantics::SemanticsContext

`