Warn on /align if used without /driver
authorRui Ueyama <ruiu@google.com>
Wed, 13 Nov 2019 04:43:25 +0000 (13:43 +0900)
committerRui Ueyama <ruiu@google.com>
Thu, 14 Nov 2019 04:13:07 +0000 (13:13 +0900)
/align is not supposed to be used without /driver, so it makes sense
to warn if only /align is passed. MSVC link.exe warns on this too.

Differential Revision: https://reviews.llvm.org/D70163

lld/COFF/Driver.cpp
lld/test/COFF/align.s

index 05d60428d26061a7bc073094be90fa9714cfa279..d33e86841492ddab99692f417babf5337ef6901c 100644 (file)
@@ -1479,6 +1479,8 @@ void LinkerDriver::link(ArrayRef<const char *> argsArr) {
     parseNumbers(arg->getValue(), &config->align);
     if (!isPowerOf2_64(config->align))
       error("/align: not a power of two: " + StringRef(arg->getValue()));
+    if (!args.hasArg(OPT_driver))
+      warn("/align specified without /driver; image may not run");
   }
 
   // Handle /aligncomm
index 67ca349e0030f4bbd592f2a4b6dbe8b18c62119e..ca005b5e42ed21f9ef7f2a69268d0f1b9a2f7d8c 100644 (file)
@@ -4,6 +4,19 @@
 
 # CHECK: SectionAlignment: 32
 
+# RUN: lld-link /out:%t.exe /entry:main /align:32 %t.obj 2>&1 \
+# RUN:   | FileCheck -check-prefix=WARN1 %s
+
+# WARN1: /align specified without /driver; image may not run
+
+# RUN: lld-link /out:%t.exe /entry:main /align:32 %t.obj /driver 2>&1 \
+# RUN:   | FileCheck -check-prefix=WARN2 --allow-empty %s
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj /driver 2>&1 \
+# RUN:   | FileCheck -check-prefix=WARN2 --allow-empty %s
+
+# WARN2-NOT: /align specified without /driver; image may not run
+
 --- !COFF
 header:
   Machine:         IMAGE_FILE_MACHINE_AMD64