about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Tolnay <dtolnay@gmail.com>2023-10-25 13:46:59 -0700
committerDavid Tolnay <dtolnay@gmail.com>2023-10-26 01:57:12 -0700
commit1078250f483ded63e4526ff379813ab367e2a6c7 (patch)
tree5dedbcf8f382bf79cdd740e223dee1fbd6427d7c
parent65f025333427a881a3fa651a6fefcfa7f6a79354 (diff)
downloadrust-1078250f483ded63e4526ff379813ab367e2a6c7.tar.gz
rust-1078250f483ded63e4526ff379813ab367e2a6c7.zip
Continue generating other symbols if an expr is not supported
-rw-r--r--compiler/rustc_macros/src/symbols.rs23
1 files changed, 14 insertions, 9 deletions
diff --git a/compiler/rustc_macros/src/symbols.rs b/compiler/rustc_macros/src/symbols.rs
index fd2d56eb29c..b808b858357 100644
--- a/compiler/rustc_macros/src/symbols.rs
+++ b/compiler/rustc_macros/src/symbols.rs
@@ -60,6 +60,7 @@ enum Value {
     SameAsName,
     String(LitStr),
     Env(LitStr),
+    Unsupported(Expr),
 }
 
 impl Parse for Symbol {
@@ -88,13 +89,7 @@ impl Parse for Value {
             }
             _ => {}
         }
-        Err(syn::Error::new_spanned(
-            expr,
-            concat!(
-                "unsupported expression for symbol value; implement support for this in ",
-                file!(),
-            ),
-        ))
+        Ok(Value::Unsupported(expr))
     }
 }
 
@@ -223,7 +218,17 @@ fn symbols_with_errors(input: TokenStream) -> (TokenStream, Vec<syn::Error>) {
         let value = match &symbol.value {
             Value::SameAsName => name.to_string(),
             Value::String(lit) => lit.value(),
-            Value::Env(_) => continue,
+            Value::Env(_) => continue, // in another loop below
+            Value::Unsupported(expr) => {
+                errors.list.push(syn::Error::new_spanned(
+                    expr,
+                    concat!(
+                        "unsupported expression for symbol value; implement support for this in ",
+                        file!(),
+                    ),
+                ));
+                continue;
+            }
         };
         let idx = entries.insert(symbol.name.span(), &value, &mut errors);
 
@@ -249,7 +254,7 @@ fn symbols_with_errors(input: TokenStream) -> (TokenStream, Vec<syn::Error>) {
     for symbol in &input.symbols {
         let env_var = match &symbol.value {
             Value::Env(lit) => lit,
-            _ => continue,
+            Value::SameAsName | Value::String(_) | Value::Unsupported(_) => continue,
         };
 
         let value = match proc_macro::tracked_env::var(env_var.value()) {